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;
}
}