From b9393d2edd17d2a920b06cdd8ba6894c6d272ecd Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Mon, 15 Nov 2021 15:49:49 -0600 Subject: [PATCH] [JavaTypeSystem] Enable resolving generic types on declaring types. --- .../JavaModels/JavaTypeModel.cs | 10 ++-- ....Interop.Tools.JavaTypeSystem-Tests.csproj | 2 +- .../JavaTypeCollectionTests.cs | 49 +++++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaTypeModel.cs b/src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaTypeModel.cs index ce4eba975..2049742c2 100644 --- a/src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaTypeModel.cs +++ b/src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaTypeModel.cs @@ -106,13 +106,9 @@ public IEnumerable GetApplicableTypeParameters () foreach (var jtp in TypeParameters) yield return jtp; - yield break; - - // TODO, this is more correct, but disabled for ApiXmlAdjuster compatibility. - // https://github.com/xamarin/java.interop/issues/815 - //if (DeclaringType != null) - // foreach (var jtp in DeclaringType.GetApplicableTypeParameters ()) - // yield return jtp; + if (DeclaringType != null) + foreach (var jtp in DeclaringType.GetApplicableTypeParameters ()) + yield return jtp; } } } diff --git a/tests/Java.Interop.Tools.JavaTypeSystem-Tests/Java.Interop.Tools.JavaTypeSystem-Tests.csproj b/tests/Java.Interop.Tools.JavaTypeSystem-Tests/Java.Interop.Tools.JavaTypeSystem-Tests.csproj index 016f5d578..f9b6b103f 100644 --- a/tests/Java.Interop.Tools.JavaTypeSystem-Tests/Java.Interop.Tools.JavaTypeSystem-Tests.csproj +++ b/tests/Java.Interop.Tools.JavaTypeSystem-Tests/Java.Interop.Tools.JavaTypeSystem-Tests.csproj @@ -1,7 +1,7 @@ - net472 + net472;net6.0 false Java.Interop.Tools.JavaTypeSystem.Tests diff --git a/tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaTypeCollectionTests.cs b/tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaTypeCollectionTests.cs index bb190e3af..913aae904 100644 --- a/tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaTypeCollectionTests.cs +++ b/tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaTypeCollectionTests.cs @@ -73,5 +73,54 @@ public void IntentServiceHack () Assert.AreSame (new_intent_service, api.FindType ("mono.android.app.IntentService")); Assert.AreSame (new_intent_service, api.FindType ("android.app.IntentService")); } + + [Test] + public void InheritedGenericTypeParameters () + { + // Ensure we can resolve generic type parameters from parent types: + // public class MyClass + // { + // public class MyNestedClass + // { + // public void DoT (T value) { } + // public void DoU (U value) { } + // } + // } + var xml = @" + + + + + + + + + + + + + + + + + + + + + +"; + + var xapi = JavaApiTestHelper.GetLoadedApi (); + JavaXmlApiImporter.ParseString (xml, xapi); + + var results = xapi.ResolveCollection (); + + var t = xapi.Packages ["example"].Types.First (_ => _.Name == "MyClass").NestedTypes.First (_ => _.Name == "MyNestedClass") as JavaClassModel; + + Assert.AreEqual (2, t.Methods.Count); + + Assert.IsNotNull (t.Methods.SingleOrDefault (m => m.Name == "DoT"), "Method with generic T not found"); + Assert.IsNotNull (t.Methods.SingleOrDefault (m => m.Name == "DoU"), "Method with generic U not found"); + } } }