diff --git a/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs b/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs index 681d4efbb..1bb282d19 100644 --- a/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs +++ b/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs @@ -143,7 +143,7 @@ public static string GetPartialAssemblyQualifiedName (this TypeReference type, I return string.Format ("{0}, {1}", // Cecil likes to use '/' as the nested type separator, while // Reflection uses '+' as the nested type separator. Use Reflection. - type.FullName.Replace ('/', '+'), + CecilTypeNameToReflectionTypeName (type.FullName), type.GetPartialAssemblyName (resolver)); } @@ -160,7 +160,7 @@ public static string GetAssemblyQualifiedName (this TypeReference type, IMetadat return string.Format ("{0}, {1}", // Cecil likes to use '/' as the nested type separator, while // Reflection uses '+' as the nested type separator. Use Reflection. - type.FullName.Replace ('/', '+'), + CecilTypeNameToReflectionTypeName (type.FullName), (def ?? type).Module.Assembly.Name.FullName); } @@ -188,5 +188,7 @@ public static string GetAssemblyQualifiedName (this TypeReference type, IMetadat return null; } + + public static string? CecilTypeNameToReflectionTypeName (string? typeName) => typeName?.Replace ('/', '+'); } } diff --git a/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs b/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs index 9bbc997ef..d30bce4aa 100644 --- a/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs +++ b/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs @@ -34,9 +34,11 @@ public class OverriddenMethodDescriptor public string JniSignature { get; } public string Connector { get; } public string ManagedTypeName { get; } + public string OriginalDescString { get; } - public OverriddenMethodDescriptor (string javaPackageName, string methodDescription) + public OverriddenMethodDescriptor (string javaPackageName, string methodDescription, string fallbackManagedTypeName) { + OriginalDescString = methodDescription; JavaPackageName = javaPackageName; string[] parts = methodDescription.Split (methodDescSplitChars, 4); @@ -49,9 +51,13 @@ public OverriddenMethodDescriptor (string javaPackageName, string methodDescript if (parts.Length > 2) { Connector = parts[2]; if (parts.Length > 3) { - ManagedTypeName = parts[3]; + ManagedTypeName = TypeDefinitionRocks.CecilTypeNameToReflectionTypeName (parts[3]); } } + + if (String.IsNullOrEmpty (ManagedTypeName)) { + ManagedTypeName = fallbackManagedTypeName; + } } } @@ -529,7 +535,6 @@ string GetManagedParameters (MethodDefinition ctor, string outerType) public void Generate (TextWriter writer) { - overriddenMethodDescriptors = new List (); if (!string.IsNullOrEmpty (package)) { writer.WriteLine ("package " + package + ";"); writer.WriteLine (); @@ -563,17 +568,6 @@ public void Generate (TextWriter writer) } GenerateFooter (writer); - - string javaTypeName = $"{package}.{name}"; - AddOverridenMethods (methods); - AddOverridenMethods (ctors); - - void AddOverridenMethods (List list) - { - foreach (Signature sig in list) { - overriddenMethodDescriptors.Add (new OverriddenMethodDescriptor (javaTypeName, sig.Method)); - } - } } public void Generate (string outputPath) @@ -716,9 +710,17 @@ void GenerateBody (TextWriter sw) void GenerateRegisterType (TextWriter sw, JavaCallableWrapperGenerator self, string field) { + if (overriddenMethodDescriptors == null) { + overriddenMethodDescriptors = new List (); + } + sw.WriteLine ("\t\t{0} = ", field); - foreach (Signature method in self.methods) + string managedTypeName = self.type.GetPartialAssemblyQualifiedName (cache); + string javaTypeName = $"{package}.{name}"; + foreach (Signature method in self.methods) { sw.WriteLine ("\t\t\t\"{0}\\n\" +", method.Method); + overriddenMethodDescriptors.Add (new OverriddenMethodDescriptor (javaTypeName, method.Method, managedTypeName)); + } sw.WriteLine ("\t\t\t\"\";"); if (CannotRegisterInStaticConstructor (self.type)) return; @@ -732,7 +734,7 @@ void GenerateRegisterType (TextWriter sw, JavaCallableWrapperGenerator self, str break; } sw.Write ("\t\t"); - sw.WriteLine (format, self.type.GetPartialAssemblyQualifiedName (cache), self.name, field); + sw.WriteLine (format, managedTypeName, self.name, field); } void GenerateFooter (TextWriter sw)