diff --git a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs index 69d1b6455..df1359fff 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs @@ -611,6 +611,36 @@ public void ObsoletedOSPlatformAttributeUnneededSupport () Assert.True (writer.ToString ().Contains ("[global::System.Obsolete (@\"This method has an invalid deprecated-since!\")]"), writer.ToString ()); } + [Test] + public void ObsoletedOSPlatformAttributeInterfaceInfrastructureSupport () + { + var xml = @" + + + + "; + + options.UseObsoletedOSPlatformAttributes = true; + + var gens = ParseApiDefinition (xml); + var iface = gens.OfType ().Single (g => g.Name == "IMyType"); + + generator.Context.ContextTypes.Push (iface); + var invoker = new InterfaceInvokerClass (iface, options, generator.Context); + var extensions = new InterfaceExtensionsClass (iface, iface.Name, options); + generator.Context.ContextTypes.Pop (); + + // Ensure attribute was added to invoker class + var invoker_attribute = invoker.Attributes.OfType ().Single (); + Assert.AreEqual ("This interface was deprecated in API-25", invoker_attribute.Message); + Assert.AreEqual (25, invoker_attribute.Version); + + // Ensure attribute was added to extensions class + var extensions_attribute = invoker.Attributes.OfType ().Single (); + Assert.AreEqual ("This interface was deprecated in API-25", extensions_attribute.Message); + Assert.AreEqual (25, extensions_attribute.Version); + } + [Test] public void ObsoleteGetterOnlyProperty () { diff --git a/tools/generator/SourceWriters/InterfaceExtensionsClass.cs b/tools/generator/SourceWriters/InterfaceExtensionsClass.cs index edf5ac0d4..378c7323a 100644 --- a/tools/generator/SourceWriters/InterfaceExtensionsClass.cs +++ b/tools/generator/SourceWriters/InterfaceExtensionsClass.cs @@ -18,6 +18,8 @@ public InterfaceExtensionsClass (InterfaceGen iface, string declaringTypeName, C IsStatic = true; IsPartial = true; + SourceWriterExtensions.AddObsolete (Attributes, iface.DeprecatedComment, opt, iface.IsDeprecated, deprecatedSince: iface.DeprecatedSince); + foreach (var method in iface.Methods.Where (m => !m.IsStatic)) { if (method.CanHaveStringOverload) { // TODO: Don't allow obsolete here to match old generator. diff --git a/tools/generator/SourceWriters/InterfaceInvokerClass.cs b/tools/generator/SourceWriters/InterfaceInvokerClass.cs index 3bde0695a..c0e39419e 100644 --- a/tools/generator/SourceWriters/InterfaceInvokerClass.cs +++ b/tools/generator/SourceWriters/InterfaceInvokerClass.cs @@ -32,6 +32,8 @@ public InterfaceInvokerClass (InterfaceGen iface, CodeGenerationOptions opt, Cod MemberType = (!ji) ? null : (MemberTypes?) MemberTypes.TypeInfo, }); + SourceWriterExtensions.AddObsolete (Attributes, iface.DeprecatedComment, opt, iface.IsDeprecated, deprecatedSince: iface.DeprecatedSince); + Fields.Add (new PeerMembersField (opt, iface.RawJniName, $"{iface.Name}Invoker", false)); if (!ji) {