diff --git a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs index c242eb3f3..5b13ab221 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGeneratorTests.cs @@ -1120,6 +1120,50 @@ public void AvoidNREOnInvalidBaseMethod () Assert.AreEqual (true, base_class.Methods [0].IsValid); } + [Test] + public void FixupDeprecatedBaseMethods () + { + var xml = @" + + + + + + + + + + + "; + + var gens = ParseApiDefinition (xml); + + // Override method should be marked deprecated because base method is + Assert.AreEqual ("deprecated", gens.Single (g => g.Name == "MyClass").Methods.Single (m => m.Name == "DoStuff").Deprecated); + } + + [Test] + public void FixupDeprecatedSinceBaseMethods () + { + var xml = @" + + + + + + + + + + + "; + + var gens = ParseApiDefinition (xml); + + // Override method should match base method's 'deprecated-since' + Assert.AreEqual (11, gens.Single (g => g.Name == "MyClass").Methods.Single (m => m.Name == "DoStuff").DeprecatedSince); + } + static string StripRegisterAttributes (string str) { // It is hard to test if the [Obsolete] is on the setter/etc due to the [Register], so remove all [Register]s diff --git a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs index 713d45e3b..7189073e4 100644 --- a/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs +++ b/tools/generator/Java.Interop.Tools.Generator.ObjectModel/GenBase.cs @@ -310,6 +310,15 @@ public void FixupMethodOverrides (CodeGenerationOptions opt) var bm = bt.Methods.FirstOrDefault (mm => mm.Name == m.Name && mm.Visibility == m.Visibility && ParameterList.Equals (mm.Parameters, m.Parameters)); if (bm != null && bm.RetVal.FullName == m.RetVal.FullName) { // if return type is different, it could be still "new", not "override". m.IsOverride = true; + + // If method overrides a deprecated method, it also needs to be marked as deprecated + if (bm.Deprecated.HasValue () && !m.Deprecated.HasValue ()) + m.Deprecated = bm.Deprecated; + + // Fix issue when base method was deprecated before the overriding method, set both both to base method value + if (bm.DeprecatedSince.GetValueOrDefault (0) < m.DeprecatedSince.GetValueOrDefault (0)) + m.DeprecatedSince = bm.DeprecatedSince; + break; } }