Skip to content

Commit dab4736

Browse files
authored
wrap-java: account for generic use inside parameterized types in (#522)
1 parent a9f36f4 commit dab4736

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

Sources/SwiftJavaToolLib/JavaClassTranslator.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,16 @@ extension JavaClassTranslator {
616616
if parameterizedType.isEqualTo(typeParam.as(Type.self)) {
617617
return true
618618
}
619+
620+
// Also check if the type param is used as a type argument inside a parameterized parameter type
621+
if let parameterizedParamType = parameterizedType.as(ParameterizedType.self) {
622+
for actualTypeParam in parameterizedParamType.getActualTypeArguments() {
623+
guard let actualTypeParam else { continue }
624+
if actualTypeParam.isEqualTo(typeParam.as(Type.self)) {
625+
return true
626+
}
627+
}
628+
}
619629
}
620630
}
621631

Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,5 +408,40 @@ final class GenericsWrapJavaTests: XCTestCase {
408408
]
409409
)
410410
}
411+
412+
413+
func testWrapJavaGenericMethod_parameterizedParameterType() async throws {
414+
let classpathURL = try await compileJava(
415+
"""
416+
package com.example;
417+
418+
class Resolver<T> { }
419+
class Serializer<T> { }
420+
421+
class Store {
422+
public <ValueType> Store
423+
bootstrapStore(
424+
String name,
425+
Resolver<ValueType> resolver,
426+
Serializer<ValueType> serializer
427+
) { return null; }
428+
}
429+
""")
430+
431+
try assertWrapJavaOutput(
432+
javaClassNames: [
433+
"com.example.Resolver",
434+
"com.example.Serializer",
435+
"com.example.Store"
436+
],
437+
classpath: [classpathURL],
438+
expectedChunks: [
439+
"""
440+
@JavaMethod
441+
open func bootstrapStore<ValueType: AnyJavaObject>(_ arg0: String, _ arg1: Resolver<ValueType>?, _ arg2: Serializer<ValueType>?) -> Store!
442+
""",
443+
]
444+
)
445+
}
411446

412447
}

0 commit comments

Comments
 (0)