From ae74193fc60e395c23761e8ee5d8bad9981a8ec3 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 22 Sep 2025 14:13:23 -0500 Subject: [PATCH 1/2] Revert "[generator] Don't mark a method as `[UnsupportedOSPlatform]` if it overrides a supported base method. (#1313)" This reverts commit 28d690593480bfeeacd5f27f3849756eedae8909. --- .../Unit-Tests/CodeGeneratorTests.cs | 33 ------------------- .../GenBase.cs | 5 --- 2 files changed, 38 deletions(-) diff --git a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs index c02b7def7..5a64b53d4 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs @@ -1436,39 +1436,6 @@ public void UnsupportedOSPlatformConstFields () StringAssert.Contains ("[global::System.Runtime.Versioning.UnsupportedOSPlatformAttribute (\"android30.0\")]", builder.ToString (), "Should contain UnsupportedOSPlatform!"); } - - [Test] - public void UnsupportedOSPlatformIgnoresMethodOverrides () - { - // Given: - // public class TextView { - // public Object doThing () { ... } - // } - // public class TextView2 : TextView { - // public Object doThing () { ... } // removed-since = 30 - // } - // We should not write [UnsupportedOSPlatform] on TextView2.doThing (), because the base method isn't "removed". - var xml = @$" - - - - - - - - - - - - "; - - var gens = ParseApiDefinition (xml); - var klass = gens.Single (g => g.Name == "TextView2"); - var actual = GetGeneratedTypeOutput (klass); - - StringAssert.DoesNotContain ("[global::System.Runtime.Versioning.UnsupportedOSPlatformAttribute (\"android30.0\")]", actual, "Should contain UnsupportedOSPlatform!"); - } - [Test] public void StringPropertyOverride ([Values ("true", "false")] string final) { diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs index 317835581..18f32e9bf 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs @@ -323,11 +323,6 @@ public void FixupMethodOverrides (CodeGenerationOptions opt) m.DeprecatedSince = bm.DeprecatedSince; } - // If a "removed" method overrides a "not removed" method, the method was - // likely moved to a base class, so don't mark it as removed. - if (m.ApiRemovedSince > 0 && bm.ApiRemovedSince == 0) - m.ApiRemovedSince = default; - break; } } From 130b7c83662a7c1fe6ae54ae3ffb1da731f8d8bf Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Mon, 22 Sep 2025 14:23:08 -0500 Subject: [PATCH 2/2] Revert "[generator] Add support for emitting [UnsupportedOSPlatform] (#1307)" This reverts commit 1cfb4f4d4c592f2ad1d4c085624211f2f942bf4d. --- .../Unit-Tests/CodeGeneratorTests.cs | 30 ------------------- .../Unit-Tests/XmlApiImporterTests.cs | 9 ------ tools/generator/ApiVersionsSupport.cs | 1 - .../XmlApiImporter.cs | 8 +---- .../Field.cs | 1 - .../GenBase.cs | 2 -- .../MethodBase.cs | 1 - .../Attributes/UnsupportedOSPlatformAttr.cs | 26 ---------------- .../Extensions/SourceWriterExtensions.cs | 12 +------- 9 files changed, 2 insertions(+), 88 deletions(-) delete mode 100644 tools/generator/SourceWriters/Attributes/UnsupportedOSPlatformAttr.cs diff --git a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs index 5a64b53d4..1896de7a5 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs @@ -1406,36 +1406,6 @@ public void SupportedOSPlatformConstFields () StringAssert.Contains ("[global::System.Runtime.Versioning.SupportedOSPlatformAttribute (\"android30.0\")]", builder.ToString (), "Should contain SupportedOSPlatform!"); } - [Test] - public void UnsupportedOSPlatform () - { - var klass = SupportTypeBuilder.CreateClass ("java.code.MyClass", options); - klass.ApiRemovedSince = new AndroidSdkVersion (30); - - generator.Context.ContextTypes.Push (klass); - generator.WriteType (klass, string.Empty, new GenerationInfo ("", "", "MyAssembly")); - generator.Context.ContextTypes.Pop (); - - StringAssert.Contains ("[global::System.Runtime.Versioning.UnsupportedOSPlatformAttribute (\"android30.0\")]", builder.ToString (), "Should contain UnsupportedOSPlatform!"); - } - - [Test] - public void UnsupportedOSPlatformConstFields () - { - var klass = new TestClass ("java.lang.Object", "com.mypackage.foo"); - var field = new TestField ("java.lang.String", "bar").SetConstant ("MY_VALUE"); - - field.ApiRemovedSince = new AndroidSdkVersion (30); - - klass.Fields.Add (field); - - generator.Context.ContextTypes.Push (klass); - generator.WriteType (klass, string.Empty, new GenerationInfo ("", "", "MyAssembly")); - generator.Context.ContextTypes.Pop (); - - StringAssert.Contains ("[global::System.Runtime.Versioning.UnsupportedOSPlatformAttribute (\"android30.0\")]", builder.ToString (), "Should contain UnsupportedOSPlatform!"); - } - [Test] public void StringPropertyOverride ([Values ("true", "false")] string final) { diff --git a/tests/generator-Tests/Unit-Tests/XmlApiImporterTests.cs b/tests/generator-Tests/Unit-Tests/XmlApiImporterTests.cs index 472be69f4..817086037 100644 --- a/tests/generator-Tests/Unit-Tests/XmlApiImporterTests.cs +++ b/tests/generator-Tests/Unit-Tests/XmlApiImporterTests.cs @@ -51,15 +51,6 @@ public void CreateClass_CorrectApiSinceOverridePackage () Assert.AreEqual (9, klass.ApiAvailableSince.ApiLevel); } - [Test] - public void CreateClass_CorrectApiRemoved () - { - var xml = XDocument.Parse (""); - var klass = XmlApiImporter.CreateClass (xml.Root, xml.Root.Element ("class"), opt); - - Assert.AreEqual (7, klass.ApiRemovedSince.ApiLevel); - } - [Test] public void CreateCtor_EnsureValidName () { diff --git a/tools/generator/ApiVersionsSupport.cs b/tools/generator/ApiVersionsSupport.cs index d512a4027..25f339c9a 100644 --- a/tools/generator/ApiVersionsSupport.cs +++ b/tools/generator/ApiVersionsSupport.cs @@ -20,7 +20,6 @@ public static class ApiVersionsSupport public interface IApiAvailability { AndroidSdkVersion ApiAvailableSince { get; set; } - AndroidSdkVersion ApiRemovedSince { get; set; } } static IEnumerable FlattenGens (IEnumerable gens) diff --git a/tools/generator/Java.Interop.Tools.Generator.Importers/XmlApiImporter.cs b/tools/generator/Java.Interop.Tools.Generator.Importers/XmlApiImporter.cs index 5016f66be..952c8903c 100644 --- a/tools/generator/Java.Interop.Tools.Generator.Importers/XmlApiImporter.cs +++ b/tools/generator/Java.Interop.Tools.Generator.Importers/XmlApiImporter.cs @@ -159,7 +159,6 @@ public static Ctor CreateCtor (GenBase declaringType, XElement elem, CodeGenerat var ctor = new Ctor (declaringType) { AnnotatedVisibility = elem.XGetAttribute ("annotated-visibility"), ApiAvailableSince = declaringType.ApiAvailableSince, - ApiRemovedSince = declaringType.ApiRemovedSince, CustomAttributes = elem.XGetAttribute ("customAttributes"), Deprecated = elem.Deprecated (), DeprecatedSince = elem.XGetAttributeAsAndroidSdkVersionOrNull ("deprecated-since"), @@ -212,7 +211,6 @@ public static Field CreateField (GenBase declaringType, XElement elem, CodeGener var field = new Field { AnnotatedVisibility = elem.XGetAttribute ("annotated-visibility"), ApiAvailableSince = declaringType.ApiAvailableSince, - ApiRemovedSince = declaringType.ApiRemovedSince, DeprecatedComment = elem.XGetAttribute ("deprecated"), DeprecatedSince = elem.XGetAttributeAsAndroidSdkVersionOrNull ("deprecated-since"), IsAcw = true, @@ -371,7 +369,6 @@ public static Method CreateMethod (GenBase declaringType, XElement elem, CodeGen var method = new Method (declaringType) { AnnotatedVisibility = elem.XGetAttribute ("annotated-visibility"), ApiAvailableSince = declaringType.ApiAvailableSince, - ApiRemovedSince = declaringType.ApiRemovedSince, ArgsType = elem.Attribute ("argsType")?.Value, CustomAttributes = elem.XGetAttribute ("customAttributes"), Deprecated = elem.Deprecated (), @@ -518,12 +515,9 @@ static XElement GetPreviousClass (XNode n, string nameValue) // Elements need to be passed in the above order. (package, class, member) static void FillApiSince (ApiVersionsSupport.IApiAvailability model, params XElement[] elems) { - foreach (var elem in elems) { + foreach (var elem in elems) if (AndroidSdkVersion.TryParse (elem.XGetAttribute ("api-since"), out var result)) model.ApiAvailableSince = result; - if (AndroidSdkVersion.TryParse (elem.XGetAttribute ("removed-since"), out var removed)) - model.ApiRemovedSince = removed; - } } static bool IsObfuscatedName (int threshold, string name) diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/Field.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/Field.cs index 1a3f89f5b..f10f07e07 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/Field.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/Field.cs @@ -9,7 +9,6 @@ public class Field : ApiVersionsSupport.IApiAvailability, ISourceLineInfo public string AnnotatedVisibility { get; set; } public string Annotation { get; set; } public AndroidSdkVersion ApiAvailableSince { get; set; } - public AndroidSdkVersion ApiRemovedSince { get; set; } public string DeprecatedComment { get; set; } public AndroidSdkVersion? DeprecatedSince { get; set; } public bool IsAcw { get; set; } diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs index 18f32e9bf..d109a4653 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs @@ -188,8 +188,6 @@ IEnumerable Ancestors () public AndroidSdkVersion ApiAvailableSince { get; set; } - public AndroidSdkVersion ApiRemovedSince { get; set; } - public virtual ClassGen BaseGen => null; public GenBase BaseSymbol => diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/MethodBase.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/MethodBase.cs index 2a8680faa..12bd9d16f 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/MethodBase.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/MethodBase.cs @@ -16,7 +16,6 @@ protected MethodBase (GenBase declaringType) public string AnnotatedVisibility { get; set; } public string Annotation { get; internal set; } public AndroidSdkVersion ApiAvailableSince { get; set; } - public AndroidSdkVersion ApiRemovedSince { get; set; } public string AssemblyName { get; set; } public GenBase DeclaringType { get; } public string Deprecated { get; set; } diff --git a/tools/generator/SourceWriters/Attributes/UnsupportedOSPlatformAttr.cs b/tools/generator/SourceWriters/Attributes/UnsupportedOSPlatformAttr.cs deleted file mode 100644 index b15a70cbd..000000000 --- a/tools/generator/SourceWriters/Attributes/UnsupportedOSPlatformAttr.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Xamarin.SourceWriter; - -using Java.Interop.Tools.Generator; - -namespace generator.SourceWriters -{ - public class UnsupportedOSPlatformAttr : AttributeWriter - { - public AndroidSdkVersion Version { get; } - - public UnsupportedOSPlatformAttr (AndroidSdkVersion version) => Version = version; - - public override void WriteAttribute (CodeWriter writer) - { - var apiLevel = Version.MinorRelease == 0 - ? $"{Version.ApiLevel}.0" - : Version.ToString (); - writer.WriteLine ($"[global::System.Runtime.Versioning.UnsupportedOSPlatformAttribute (\"android{apiLevel}\")]"); - } - } -} diff --git a/tools/generator/SourceWriters/Extensions/SourceWriterExtensions.cs b/tools/generator/SourceWriters/Extensions/SourceWriterExtensions.cs index 626eb1cb0..8d7faf4dd 100644 --- a/tools/generator/SourceWriters/Extensions/SourceWriterExtensions.cs +++ b/tools/generator/SourceWriters/Extensions/SourceWriterExtensions.cs @@ -308,10 +308,7 @@ public static void AddParameterListCallArgs (List body, ParameterList pa } public static void AddSupportedOSPlatform (List attributes, ApiVersionsSupport.IApiAvailability member, CodeGenerationOptions opt) - { - AddSupportedOSPlatform (attributes, member.ApiAvailableSince, opt); - AddUnsupportedOSPlatform (attributes, member.ApiRemovedSince, opt); - } + => AddSupportedOSPlatform (attributes, member.ApiAvailableSince, opt); public static void AddSupportedOSPlatform (List attributes, AndroidSdkVersion since, CodeGenerationOptions opt) { @@ -321,13 +318,6 @@ public static void AddSupportedOSPlatform (List attributes, And attributes.Add (new SupportedOSPlatformAttr (since)); } - public static void AddUnsupportedOSPlatform (List attributes, AndroidSdkVersion since, CodeGenerationOptions opt) - { - // Here it makes sense to still write 'android15' because it will be missing in later versions like `android35`. - if (since > 0 && opt.CodeGenerationTarget == CodeGenerationTarget.XAJavaInterop1) - attributes.Add (new UnsupportedOSPlatformAttr (since)); - } - public static void AddObsolete (List attributes, string message, CodeGenerationOptions opt, bool forceDeprecate = false, bool isError = false, AndroidSdkVersion? deprecatedSince = null) { // Bail if we're not obsolete