From f84fb50dfc6843ce2b5151c2c7a50de8a9d0f6b4 Mon Sep 17 00:00:00 2001 From: Iceman Date: Fri, 13 Mar 2026 15:24:27 +0900 Subject: [PATCH 1/4] Fix incorrect test case about overriding --- Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift b/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift index cfd32556..d32c02e7 100644 --- a/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift +++ b/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift @@ -613,7 +613,7 @@ class Java2SwiftTests: XCTestCase { """, """ @JavaMethod - open override func getDeclaringClass() -> JavaClass! + open func getDeclaringClass() -> JavaClass! """, ] ) From fced20654f0cf544e8e1aa4bf438628224d48507 Mon Sep 17 00:00:00 2001 From: Iceman Date: Fri, 13 Mar 2026 15:43:55 +0900 Subject: [PATCH 2/4] Stop to convert java bounds when checking equality --- Sources/SwiftJavaToolLib/JavaType+Equality.swift | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/Sources/SwiftJavaToolLib/JavaType+Equality.swift b/Sources/SwiftJavaToolLib/JavaType+Equality.swift index 88a1840c..1b612a31 100644 --- a/Sources/SwiftJavaToolLib/JavaType+Equality.swift +++ b/Sources/SwiftJavaToolLib/JavaType+Equality.swift @@ -41,26 +41,17 @@ extension Type { return self } - /// Determine whether this type is equivalent to or a subtype of the other - /// type. - func isEqualTo(_ other: Type, file: String = #file, line: Int = #line, function: String = #function) -> Bool { + /// Determine whether this type is equivalent to the other type. + func isEqualTo(_ other: Type) -> Bool { if self.javaHolder.object == other.javaHolder.object { return true } - // First, adjust types to their bounds, if we need to. - var anyAdjusted: Bool = false - let adjustedSelf = self.adjustToJavaBounds(adjusted: &anyAdjusted) - let adjustedOther = other.adjustToJavaBounds(adjusted: &anyAdjusted) - if anyAdjusted { - return adjustedSelf.isEqualTo(adjustedOther) - } - // If both are classes, check for equivalence. if let selfClass = self.as(JavaClass.self), let otherClass = other.as(JavaClass.self) { - return selfClass.equals(otherClass.as(JavaObject.self)) + return selfClass.equals(otherClass) } // If both are arrays, check that their component types are equivalent. From 160d5e96a008229927880ec3fa82b306d79d9566 Mon Sep 17 00:00:00 2001 From: Iceman Date: Fri, 13 Mar 2026 15:49:14 +0900 Subject: [PATCH 3/4] Generate Constructor and other related classes --- .../generated/AccessibleObject.swift | 91 ++++++- .../generated/Constructor.swift | 161 ++++++++++-- .../generated/Executable.swift | 149 +++++++++-- .../JavaLangReflect/generated/Field.swift | 234 ++++++++++++++++-- .../JavaLangReflect/generated/Method.swift | 175 ++++++++++++- .../JavaClassTranslator.swift | 2 +- .../JavaGenericsSupport.swift | 2 +- Sources/SwiftJavaToolLib/JavaTranslator.swift | 3 +- 8 files changed, 741 insertions(+), 76 deletions(-) diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift b/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift index 30eebf20..7527bc1e 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift @@ -4,40 +4,113 @@ import SwiftJavaJNICore @JavaClass("java.lang.reflect.AccessibleObject") open class AccessibleObject: JavaObject { + /// Java method `setAccessible`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.AccessibleObject.setAccessible(boolean) + /// ``` @JavaMethod - open func isAnnotationPresent(_ arg0: JavaClass?) -> Bool + open func setAccessible(_ arg0: Bool) + /// Java method `isAnnotationPresent`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.AccessibleObject.isAnnotationPresent(java.lang.Class) + /// ``` @JavaMethod - open func getAnnotation(_ arg0: JavaClass?) -> Annotation! + open func isAnnotationPresent(_ arg0: JavaClass?) -> Bool + + /// Java method `getAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.AccessibleObject.getAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open func getAnnotation(_ arg0: JavaClass?) -> T! + /// Java method `getAnnotationsByType`. + /// + /// ### Java method signature + /// ```java + /// public T[] java.lang.reflect.AccessibleObject.getAnnotationsByType(java.lang.Class) + /// ``` @JavaMethod - open func getAnnotationsByType(_ arg0: JavaClass?) -> [Annotation?] + open func getAnnotationsByType(_ arg0: JavaClass?) -> [T?] + /// Java method `getAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.AccessibleObject.getAnnotations() + /// ``` @JavaMethod open func getAnnotations() -> [Annotation?] - @JavaMethod - open func getDeclaredAnnotation(_ arg0: JavaClass?) -> Annotation! + /// Java method `getDeclaredAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.AccessibleObject.getDeclaredAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open func getDeclaredAnnotation(_ arg0: JavaClass?) -> T! + /// Java method `getDeclaredAnnotationsByType`. + /// + /// ### Java method signature + /// ```java + /// public T[] java.lang.reflect.AccessibleObject.getDeclaredAnnotationsByType(java.lang.Class) + /// ``` @JavaMethod - open func getDeclaredAnnotationsByType(_ arg0: JavaClass?) -> [Annotation?] + open func getDeclaredAnnotationsByType(_ arg0: JavaClass?) -> [T?] + /// Java method `getDeclaredAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.AccessibleObject.getDeclaredAnnotations() + /// ``` @JavaMethod open func getDeclaredAnnotations() -> [Annotation?] - @JavaMethod - open func setAccessible(_ arg0: Bool) - + /// Java method `trySetAccessible`. + /// + /// ### Java method signature + /// ```java + /// public final boolean java.lang.reflect.AccessibleObject.trySetAccessible() + /// ``` @JavaMethod open func trySetAccessible() -> Bool + /// Java method `canAccess`. + /// + /// ### Java method signature + /// ```java + /// public final boolean java.lang.reflect.AccessibleObject.canAccess(java.lang.Object) + /// ``` @JavaMethod open func canAccess(_ arg0: JavaObject?) -> Bool + /// Java method `isAccessible`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.AccessibleObject.isAccessible() + /// ``` + @available(*, deprecated) @JavaMethod open func isAccessible() -> Bool } extension JavaClass { + /// Java method `setAccessible`. + /// + /// ### Java method signature + /// ```java + /// public static void java.lang.reflect.AccessibleObject.setAccessible(java.lang.reflect.AccessibleObject[],boolean) + /// ``` @JavaStaticMethod public func setAccessible(_ arg0: [AccessibleObject?], _ arg1: Bool) } diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift index 55881b40..dbc61c89 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift @@ -4,76 +4,201 @@ import SwiftJavaJNICore @JavaClass("java.lang.reflect.Constructor") open class Constructor: Executable { + /// Java method `getName`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Constructor.getName() + /// ``` @JavaMethod open override func getName() -> String + /// Java method `equals`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Constructor.equals(java.lang.Object) + /// ``` @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool + /// Java method `toString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Constructor.toString() + /// ``` @JavaMethod open override func toString() -> String + /// Java method `hashCode`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Constructor.hashCode() + /// ``` @JavaMethod open override func hashCode() -> Int32 + /// Java method `getModifiers`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Constructor.getModifiers() + /// ``` @JavaMethod open override func getModifiers() -> Int32 + /// Java method `getTypeParameters`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.TypeVariable>[] java.lang.reflect.Constructor.getTypeParameters() + /// ``` @JavaMethod - open func getTypeParameters() -> [TypeVariable>?] + open func getTypeParameters() -> [TypeVariable>?] + /// Java method `setAccessible`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Constructor.setAccessible(boolean) + /// ``` @JavaMethod - open func newInstance(_ arg0: [JavaObject?]) throws -> JavaObject! + open override func setAccessible(_ arg0: Bool) + /// Java method `newInstance`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.Constructor.newInstance(java.lang.Object...) throws java.lang.InstantiationException,java.lang.IllegalAccessException,java.lang.IllegalArgumentException,java.lang.reflect.InvocationTargetException + /// ``` + @JavaMethod(typeErasedResult: "T!") + open func newInstance(_ arg0: [JavaObject?]) throws -> T! + + /// Java method `getParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class[] java.lang.reflect.Constructor.getParameterTypes() + /// ``` @JavaMethod open override func getParameterTypes() -> [JavaClass?] + /// Java method `toGenericString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Constructor.toGenericString() + /// ``` @JavaMethod open override func toGenericString() -> String + /// Java method `isSynthetic`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Constructor.isSynthetic() + /// ``` @JavaMethod open override func isSynthetic() -> Bool - @JavaMethod - open override func getDeclaringClass() -> JavaClass! - - @JavaMethod - open override func getAnnotation(_ arg0: JavaClass?) -> Annotation! - + /// Java method `getDeclaringClass`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class java.lang.reflect.Constructor.getDeclaringClass() + /// ``` + @JavaMethod + open func getDeclaringClass() -> JavaClass! + + /// Java method `getAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.Constructor.getAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open override func getAnnotation(_ arg0: JavaClass?) -> T! + + /// Java method `getDeclaredAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.Constructor.getDeclaredAnnotations() + /// ``` @JavaMethod open override func getDeclaredAnnotations() -> [Annotation?] - @JavaMethod - open override func setAccessible(_ arg0: Bool) - + /// Java method `isVarArgs`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Constructor.isVarArgs() + /// ``` @JavaMethod open override func isVarArgs() -> Bool + /// Java method `getParameterCount`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Constructor.getParameterCount() + /// ``` @JavaMethod open override func getParameterCount() -> Int32 + /// Java method `getParameterAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[][] java.lang.reflect.Constructor.getParameterAnnotations() + /// ``` @JavaMethod open override func getParameterAnnotations() -> [[Annotation?]] + /// Java method `getGenericParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Constructor.getGenericParameterTypes() + /// ``` @JavaMethod open override func getGenericParameterTypes() -> [Type?] + /// Java method `getGenericExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Constructor.getGenericExceptionTypes() + /// ``` @JavaMethod open override func getGenericExceptionTypes() -> [Type?] + /// Java method `getExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class[] java.lang.reflect.Constructor.getExceptionTypes() + /// ``` @JavaMethod open override func getExceptionTypes() -> [JavaClass?] + /// Java method `getAnnotatedReturnType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType java.lang.reflect.Constructor.getAnnotatedReturnType() + /// ``` @JavaMethod open override func getAnnotatedReturnType() -> AnnotatedType! + /// Java method `getAnnotatedReceiverType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType java.lang.reflect.Constructor.getAnnotatedReceiverType() + /// ``` @JavaMethod open override func getAnnotatedReceiverType() -> AnnotatedType! } -extension JavaClass { - @JavaStaticField(isFinal: true) - public var PUBLIC: Int32 - - @JavaStaticField(isFinal: true) - public var DECLARED: Int32 -} diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift index 5470c4cb..ddbcd7f7 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift @@ -1,74 +1,195 @@ // Auto-generated by Java-to-Swift wrapper generator. -import JavaUtil import SwiftJava import SwiftJavaJNICore @JavaClass("java.lang.reflect.Executable", implements: GenericDeclaration.self) open class Executable: AccessibleObject { + /// Java method `getName`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.String java.lang.reflect.Executable.getName() + /// ``` @JavaMethod open func getName() -> String + /// Java method `getModifiers`. + /// + /// ### Java method signature + /// ```java + /// public abstract int java.lang.reflect.Executable.getModifiers() + /// ``` @JavaMethod open func getModifiers() -> Int32 + /// Java method `getTypeParameters`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.reflect.TypeVariable[] java.lang.reflect.Executable.getTypeParameters() + /// ``` + @JavaMethod + open func getTypeParameters() -> [TypeVariable?] + + /// Java method `getParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.Class[] java.lang.reflect.Executable.getParameterTypes() + /// ``` @JavaMethod open func getParameterTypes() -> [JavaClass?] + /// Java method `toGenericString`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.String java.lang.reflect.Executable.toGenericString() + /// ``` @JavaMethod open func toGenericString() -> String + /// Java method `isSynthetic`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Executable.isSynthetic() + /// ``` @JavaMethod open func isSynthetic() -> Bool + /// Java method `getDeclaringClass`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.Class java.lang.reflect.Executable.getDeclaringClass() + /// ``` @JavaMethod open func getDeclaringClass() -> JavaClass! - @JavaMethod - open override func getAnnotation(_ arg0: JavaClass?) -> Annotation! - - @JavaMethod - open override func getAnnotationsByType(_ arg0: JavaClass?) -> [Annotation?] - + /// Java method `getAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.Executable.getAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open override func getAnnotation(_ arg0: JavaClass?) -> T! + + /// Java method `getAnnotationsByType`. + /// + /// ### Java method signature + /// ```java + /// public T[] java.lang.reflect.Executable.getAnnotationsByType(java.lang.Class) + /// ``` + @JavaMethod + open override func getAnnotationsByType(_ arg0: JavaClass?) -> [T?] + + /// Java method `getDeclaredAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.Executable.getDeclaredAnnotations() + /// ``` @JavaMethod open override func getDeclaredAnnotations() -> [Annotation?] + /// Java method `isVarArgs`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Executable.isVarArgs() + /// ``` @JavaMethod open func isVarArgs() -> Bool + /// Java method `getAnnotatedParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType[] java.lang.reflect.Executable.getAnnotatedParameterTypes() + /// ``` @JavaMethod open func getAnnotatedParameterTypes() -> [AnnotatedType?] + /// Java method `getParameterCount`. + /// + /// ### Java method signature + /// ```java + /// public abstract int java.lang.reflect.Executable.getParameterCount() + /// ``` @JavaMethod open func getParameterCount() -> Int32 + /// Java method `getParameterAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.annotation.Annotation[][] java.lang.reflect.Executable.getParameterAnnotations() + /// ``` @JavaMethod open func getParameterAnnotations() -> [[Annotation?]] + /// Java method `getGenericParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Executable.getGenericParameterTypes() + /// ``` @JavaMethod open func getGenericParameterTypes() -> [Type?] + /// Java method `getGenericExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Executable.getGenericExceptionTypes() + /// ``` @JavaMethod open func getGenericExceptionTypes() -> [Type?] + /// Java method `getExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.Class[] java.lang.reflect.Executable.getExceptionTypes() + /// ``` @JavaMethod open func getExceptionTypes() -> [JavaClass?] + /// Java method `getAnnotatedReturnType`. + /// + /// ### Java method signature + /// ```java + /// public abstract java.lang.reflect.AnnotatedType java.lang.reflect.Executable.getAnnotatedReturnType() + /// ``` @JavaMethod open func getAnnotatedReturnType() -> AnnotatedType! + /// Java method `getParameters`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Parameter[] java.lang.reflect.Executable.getParameters() + /// ``` @JavaMethod open func getParameters() -> [Parameter?] + /// Java method `getAnnotatedReceiverType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType java.lang.reflect.Executable.getAnnotatedReceiverType() + /// ``` @JavaMethod open func getAnnotatedReceiverType() -> AnnotatedType! + /// Java method `getAnnotatedExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType[] java.lang.reflect.Executable.getAnnotatedExceptionTypes() + /// ``` @JavaMethod open func getAnnotatedExceptionTypes() -> [AnnotatedType?] } -extension JavaClass { - @JavaStaticField(isFinal: true) - public var PUBLIC: Int32 - - @JavaStaticField(isFinal: true) - public var DECLARED: Int32 -} diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift index 1b64b105..be96bea6 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift @@ -1,116 +1,312 @@ // Auto-generated by Java-to-Swift wrapper generator. -import JavaUtil import SwiftJava import SwiftJavaJNICore @JavaClass("java.lang.reflect.Field") open class Field: AccessibleObject { + /// Java method `getName`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Field.getName() + /// ``` @JavaMethod open func getName() -> String + /// Java method `get`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Object java.lang.reflect.Field.get(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func get(_ arg0: JavaObject?) throws -> JavaObject! + /// Java method `equals`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Field.equals(java.lang.Object) + /// ``` @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool + /// Java method `toString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Field.toString() + /// ``` @JavaMethod open override func toString() -> String + /// Java method `hashCode`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Field.hashCode() + /// ``` @JavaMethod open override func hashCode() -> Int32 - @JavaMethod - open func getModifiers() -> Int32 - + /// Java method `getBoolean`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Field.getBoolean(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getBoolean(_ arg0: JavaObject?) throws -> Bool + /// Java method `getByte`. + /// + /// ### Java method signature + /// ```java + /// public byte java.lang.reflect.Field.getByte(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getByte(_ arg0: JavaObject?) throws -> Int8 + /// Java method `getShort`. + /// + /// ### Java method signature + /// ```java + /// public short java.lang.reflect.Field.getShort(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getShort(_ arg0: JavaObject?) throws -> Int16 + /// Java method `getChar`. + /// + /// ### Java method signature + /// ```java + /// public char java.lang.reflect.Field.getChar(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getChar(_ arg0: JavaObject?) throws -> UInt16 + /// Java method `getInt`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Field.getInt(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getInt(_ arg0: JavaObject?) throws -> Int32 + /// Java method `getLong`. + /// + /// ### Java method signature + /// ```java + /// public long java.lang.reflect.Field.getLong(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getLong(_ arg0: JavaObject?) throws -> Int64 + /// Java method `getFloat`. + /// + /// ### Java method signature + /// ```java + /// public float java.lang.reflect.Field.getFloat(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getFloat(_ arg0: JavaObject?) throws -> Float + /// Java method `getDouble`. + /// + /// ### Java method signature + /// ```java + /// public double java.lang.reflect.Field.getDouble(java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func getDouble(_ arg0: JavaObject?) throws -> Double + /// Java method `getModifiers`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Field.getModifiers() + /// ``` @JavaMethod - open func toGenericString() -> String + open func getModifiers() -> Int32 + /// Java method `setAccessible`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setAccessible(boolean) + /// ``` @JavaMethod - open func isSynthetic() -> Bool + open override func setAccessible(_ arg0: Bool) + /// Java method `toGenericString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Field.toGenericString() + /// ``` @JavaMethod - open func getDeclaringClass() -> JavaClass! + open func toGenericString() -> String + /// Java method `isSynthetic`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Field.isSynthetic() + /// ``` @JavaMethod - open override func getAnnotation(_ arg0: JavaClass?) -> Annotation! + open func isSynthetic() -> Bool + /// Java method `getDeclaringClass`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class java.lang.reflect.Field.getDeclaringClass() + /// ``` @JavaMethod - open override func getAnnotationsByType(_ arg0: JavaClass?) -> [Annotation?] + open func getDeclaringClass() -> JavaClass! + /// Java method `getAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.Field.getAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open override func getAnnotation(_ arg0: JavaClass?) -> T! + + /// Java method `getAnnotationsByType`. + /// + /// ### Java method signature + /// ```java + /// public T[] java.lang.reflect.Field.getAnnotationsByType(java.lang.Class) + /// ``` + @JavaMethod + open override func getAnnotationsByType(_ arg0: JavaClass?) -> [T?] + + /// Java method `getDeclaredAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.Field.getDeclaredAnnotations() + /// ``` @JavaMethod open override func getDeclaredAnnotations() -> [Annotation?] + /// Java method `set`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.set(java.lang.Object,java.lang.Object) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func set(_ arg0: JavaObject?, _ arg1: JavaObject?) throws - @JavaMethod - open override func setAccessible(_ arg0: Bool) - + /// Java method `getGenericType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type java.lang.reflect.Field.getGenericType() + /// ``` @JavaMethod open func getGenericType() -> Type! + /// Java method `getType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class java.lang.reflect.Field.getType() + /// ``` @JavaMethod open func getType() -> JavaClass! + /// Java method `setBoolean`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setBoolean(java.lang.Object,boolean) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setBoolean(_ arg0: JavaObject?, _ arg1: Bool) throws + /// Java method `setByte`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setByte(java.lang.Object,byte) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setByte(_ arg0: JavaObject?, _ arg1: Int8) throws + /// Java method `setChar`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setChar(java.lang.Object,char) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setChar(_ arg0: JavaObject?, _ arg1: UInt16) throws + /// Java method `setShort`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setShort(java.lang.Object,short) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setShort(_ arg0: JavaObject?, _ arg1: Int16) throws + /// Java method `setInt`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setInt(java.lang.Object,int) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setInt(_ arg0: JavaObject?, _ arg1: Int32) throws + /// Java method `setLong`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setLong(java.lang.Object,long) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setLong(_ arg0: JavaObject?, _ arg1: Int64) throws + /// Java method `setFloat`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setFloat(java.lang.Object,float) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setFloat(_ arg0: JavaObject?, _ arg1: Float) throws + /// Java method `setDouble`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Field.setDouble(java.lang.Object,double) throws java.lang.IllegalArgumentException,java.lang.IllegalAccessException + /// ``` @JavaMethod open func setDouble(_ arg0: JavaObject?, _ arg1: Double) throws + /// Java method `isEnumConstant`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Field.isEnumConstant() + /// ``` @JavaMethod open func isEnumConstant() -> Bool + /// Java method `getAnnotatedType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType java.lang.reflect.Field.getAnnotatedType() + /// ``` @JavaMethod open func getAnnotatedType() -> AnnotatedType! } -extension JavaClass { - @JavaStaticField(isFinal: true) - public var PUBLIC: Int32 - - @JavaStaticField(isFinal: true) - public var DECLARED: Int32 -} diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift index dc3455c9..d81e112c 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift @@ -4,88 +4,237 @@ import SwiftJavaJNICore @JavaClass("java.lang.reflect.Method") open class Method: Executable { + /// Java method `invoke`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object...) throws java.lang.IllegalAccessException,java.lang.reflect.InvocationTargetException + /// ``` @JavaMethod open func invoke(_ arg0: JavaObject?, _ arg1: [JavaObject?]) throws -> JavaObject! + /// Java method `getName`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Method.getName() + /// ``` @JavaMethod open override func getName() -> String + /// Java method `equals`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Method.equals(java.lang.Object) + /// ``` @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool + /// Java method `toString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Method.toString() + /// ``` @JavaMethod open override func toString() -> String + /// Java method `hashCode`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Method.hashCode() + /// ``` @JavaMethod open override func hashCode() -> Int32 + /// Java method `getModifiers`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Method.getModifiers() + /// ``` @JavaMethod open override func getModifiers() -> Int32 + /// Java method `getTypeParameters`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.TypeVariable[] java.lang.reflect.Method.getTypeParameters() + /// ``` @JavaMethod open func getTypeParameters() -> [TypeVariable?] + /// Java method `setAccessible`. + /// + /// ### Java method signature + /// ```java + /// public void java.lang.reflect.Method.setAccessible(boolean) + /// ``` + @JavaMethod + open override func setAccessible(_ arg0: Bool) + + /// Java method `getReturnType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class java.lang.reflect.Method.getReturnType() + /// ``` @JavaMethod open func getReturnType() -> JavaClass! + /// Java method `getParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class[] java.lang.reflect.Method.getParameterTypes() + /// ``` @JavaMethod open override func getParameterTypes() -> [JavaClass?] + /// Java method `toGenericString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.lang.reflect.Method.toGenericString() + /// ``` @JavaMethod open override func toGenericString() -> String + /// Java method `isSynthetic`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Method.isSynthetic() + /// ``` @JavaMethod open override func isSynthetic() -> Bool + /// Java method `getDeclaringClass`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class java.lang.reflect.Method.getDeclaringClass() + /// ``` @JavaMethod open override func getDeclaringClass() -> JavaClass! - @JavaMethod - open override func getAnnotation(_ arg0: JavaClass?) -> Annotation! - + /// Java method `getAnnotation`. + /// + /// ### Java method signature + /// ```java + /// public T java.lang.reflect.Method.getAnnotation(java.lang.Class) + /// ``` + @JavaMethod(typeErasedResult: "T!") + open override func getAnnotation(_ arg0: JavaClass?) -> T! + + /// Java method `getDeclaredAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[] java.lang.reflect.Method.getDeclaredAnnotations() + /// ``` @JavaMethod open override func getDeclaredAnnotations() -> [Annotation?] - @JavaMethod - open override func setAccessible(_ arg0: Bool) - + /// Java method `isVarArgs`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Method.isVarArgs() + /// ``` @JavaMethod open override func isVarArgs() -> Bool + /// Java method `getParameterCount`. + /// + /// ### Java method signature + /// ```java + /// public int java.lang.reflect.Method.getParameterCount() + /// ``` @JavaMethod open override func getParameterCount() -> Int32 + /// Java method `getParameterAnnotations`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.annotation.Annotation[][] java.lang.reflect.Method.getParameterAnnotations() + /// ``` @JavaMethod open override func getParameterAnnotations() -> [[Annotation?]] + /// Java method `getGenericParameterTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Method.getGenericParameterTypes() + /// ``` @JavaMethod open override func getGenericParameterTypes() -> [Type?] + /// Java method `getGenericExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type[] java.lang.reflect.Method.getGenericExceptionTypes() + /// ``` @JavaMethod open override func getGenericExceptionTypes() -> [Type?] + /// Java method `isDefault`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Method.isDefault() + /// ``` @JavaMethod open func isDefault() -> Bool + /// Java method `getGenericReturnType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.Type java.lang.reflect.Method.getGenericReturnType() + /// ``` @JavaMethod open func getGenericReturnType() -> Type! + /// Java method `getExceptionTypes`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Class[] java.lang.reflect.Method.getExceptionTypes() + /// ``` @JavaMethod open override func getExceptionTypes() -> [JavaClass?] + /// Java method `isBridge`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.lang.reflect.Method.isBridge() + /// ``` @JavaMethod open func isBridge() -> Bool + /// Java method `getDefaultValue`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Object java.lang.reflect.Method.getDefaultValue() + /// ``` @JavaMethod open func getDefaultValue() -> JavaObject! + /// Java method `getAnnotatedReturnType`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.reflect.AnnotatedType java.lang.reflect.Method.getAnnotatedReturnType() + /// ``` @JavaMethod open override func getAnnotatedReturnType() -> AnnotatedType! } -extension JavaClass { - @JavaStaticField(isFinal: true) - public var PUBLIC: Int32 - - @JavaStaticField(isFinal: true) - public var DECLARED: Int32 -} diff --git a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift index b201823d..1a8c07aa 100644 --- a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift +++ b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift @@ -882,7 +882,7 @@ extension JavaClassTranslator { ) -> OrderedSet { var allGenericParameters = OrderedSet(genericParameters) - let typeParameters = method.getTypeParameters() + let typeParameters = method.getTypeParameters() as [TypeVariable?] for typeParameter in typeParameters { guard let typeParameter else { continue } diff --git a/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift b/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift index 44a6064f..7c0e78db 100644 --- a/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift +++ b/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift @@ -41,7 +41,7 @@ func getGenericJavaTypeOriginInfo(_ type: Type?, from method: Method) -> [Generi return [] // it's not a generic type, no "origin" of the use to detect } - var methodTypeVars = method.getTypeParameters() + var methodTypeVars = method.getTypeParameters() as [TypeVariable?] // TODO: also handle nested classes here... var classTypeVars = method.getDeclaringClass().getTypeParameters() diff --git a/Sources/SwiftJavaToolLib/JavaTranslator.swift b/Sources/SwiftJavaToolLib/JavaTranslator.swift index f987f926..c19b2fc1 100644 --- a/Sources/SwiftJavaToolLib/JavaTranslator.swift +++ b/Sources/SwiftJavaToolLib/JavaTranslator.swift @@ -233,7 +233,8 @@ extension JavaTranslator { if mappedSwiftName == nil || mappedSwiftName == "JavaObject" { // Try to salvage it, is it perhaps a type parameter? if let method { - if method.getTypeParameters().contains(where: { $0?.getTypeName() == typeArg.getTypeName() }) { + let typeParameters = method.getTypeParameters() as [TypeVariable?] + if typeParameters.contains(where: { $0?.getTypeName() == typeArg.getTypeName() }) { return typeArg.getTypeName() } } From 7e596df6f2a2de17e6fd7b4711a66fb95813e3aa Mon Sep 17 00:00:00 2001 From: Iceman Date: Fri, 13 Mar 2026 17:38:00 +0900 Subject: [PATCH 4/4] Add more strict logic --- Sources/SwiftJavaToolLib/JavaType+Equality.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Sources/SwiftJavaToolLib/JavaType+Equality.swift b/Sources/SwiftJavaToolLib/JavaType+Equality.swift index 1b612a31..23c16afa 100644 --- a/Sources/SwiftJavaToolLib/JavaType+Equality.swift +++ b/Sources/SwiftJavaToolLib/JavaType+Equality.swift @@ -121,6 +121,22 @@ extension Type { return selfClass.isSubclass(of: otherClass) } + if let selfType = self.as(ParameterizedType.self), + let otherType = other.as(ParameterizedType.self) + { + if !selfType.getRawType().isEqualToOrSubtypeOf(otherType.getRawType()) { + return false + } + + if selfType.getActualTypeArguments().allTypesEqual(otherType.getActualTypeArguments()) { + return true + } + + // Even where Java allows subtyping (e.g., Box from Box), + // this cannot be a subtype relationship in Swift. + return false + } + // Anything object-like is a subclass of java.lang.Object if let otherClass = other.as(JavaClass.self), otherClass.getName() == "java.lang.Object"