Skip to content

Commit 573b85e

Browse files
committed
add a line item for the feature matrix
1 parent abf15bb commit 573b85e

2 files changed

Lines changed: 9 additions & 66 deletions

File tree

Sources/SwiftJavaDocumentation/Documentation.docc/SupportedFeatures.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ SwiftJava's `swift-java jextract` tool automates generating Java bindings from S
6464
| Generic type: `struct S<T>` |||
6565
| Functions or properties using generic type param: `struct S<T> { func f(_: T) {} }` |||
6666
| Generic type specialization and conditional extensions: `struct S<T>{} extension S where T == Value {}` |||
67+
| Generic parameters over `some DataProtocol` handled with efficient Java type |||
6768
| Static functions or properties in generic type |||
6869
| Generic parameters in functions: `func f<T: A & B>(x: T)` |||
6970
| Generic return values in functions: `func f<T: A & B>() -> T` |||

Tests/JExtractSwiftTests/DataImportTests.swift

Lines changed: 8 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -641,35 +641,14 @@ final class DataImportTests {
641641
input: text,
642642
.jni,
643643
.swift,
644-
detectChunkByInitialLines: 2,
644+
detectChunkByInitialLines: 1,
645645
expectedChunks: [
646646
"""
647647
public func Java_com_example_swift_SwiftModule__00024processData__Ljava_lang_Object_2(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass, data: jobject?) -> jlong {
648-
let dataswiftObject$: (DataProtocol)
649-
let datapointer$ = environment.interface.CallLongMethodA(environment, data, _JNIMethodIDCache.JNISwiftInstance.memoryAddress, [])
650-
let datatypeMetadata$ = environment.interface.CallLongMethodA(environment, data, _JNIMethodIDCache.JNISwiftInstance.typeMetadataAddress, [])
651-
guard let datapointer$TypeMetadataPointer$ = UnsafeRawPointer(bitPattern: Int(Int64(fromJNI: datatypeMetadata$, in: environment))) else {
652-
fatalError("datatypeMetadata$ memory address was null")
653-
}
654-
let datapointer$DynamicType$: Any.Type = unsafeBitCast(datapointer$TypeMetadataPointer$, to: Any.Type.self)
655-
guard let datapointer$RawPointer$ = UnsafeMutableRawPointer(bitPattern: Int(Int64(fromJNI: datapointer$, in: environment))) else {
656-
fatalError("datapointer$ memory address was null")
657-
}
658-
#if hasFeature(ImplicitOpenExistentials)
659-
let datapointer$Existential$ = datapointer$RawPointer$.load(as: datapointer$DynamicType$) as! any (DataProtocol)
660-
#else
661-
func datapointer$DoLoad<Ty>(_ ty: Ty.Type) -> any (DataProtocol) {
662-
datapointer$RawPointer$.load(as: ty) as! any (DataProtocol)
663-
}
664-
let datapointer$Existential$ = _openExistential(datapointer$DynamicType$, do: datapointer$DoLoad)
665-
#endif
666-
dataswiftObject$ = datapointer$Existential$
667-
let result$ = UnsafeMutablePointer<MyResult>.allocate(capacity: 1)
668-
result$.initialize(to: SwiftModule.processData(data: dataswiftObject$))
669-
let resultBits$ = Int64(Int(bitPattern: result$))
670-
return resultBits$.getJNILocalRefValue(in: environment)
671-
}
648+
""",
672649
"""
650+
result$.initialize(to: SwiftModule.processData(data: dataswiftObject$))
651+
""",
673652
]
674653
)
675654
}
@@ -686,51 +665,14 @@ final class DataImportTests {
686665
input: text,
687666
.jni,
688667
.swift,
689-
detectChunkByInitialLines: 2,
668+
detectChunkByInitialLines: 1,
690669
expectedChunks: [
691670
"""
692671
public func Java_com_example_swift_SwiftModule__00024verify__Ljava_lang_Object_2Ljava_lang_Object_2(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass, first: jobject?, second: jobject?) -> jboolean {
693-
let firstswiftObject$: (DataProtocol)
694-
let firstpointer$ = environment.interface.CallLongMethodA(environment, first, _JNIMethodIDCache.JNISwiftInstance.memoryAddress, [])
695-
let firsttypeMetadata$ = environment.interface.CallLongMethodA(environment, first, _JNIMethodIDCache.JNISwiftInstance.typeMetadataAddress, [])
696-
guard let firstpointer$TypeMetadataPointer$ = UnsafeRawPointer(bitPattern: Int(Int64(fromJNI: firsttypeMetadata$, in: environment))) else {
697-
fatalError("firsttypeMetadata$ memory address was null")
698-
}
699-
let firstpointer$DynamicType$: Any.Type = unsafeBitCast(firstpointer$TypeMetadataPointer$, to: Any.Type.self)
700-
guard let firstpointer$RawPointer$ = UnsafeMutableRawPointer(bitPattern: Int(Int64(fromJNI: firstpointer$, in: environment))) else {
701-
fatalError("firstpointer$ memory address was null")
702-
}
703-
#if hasFeature(ImplicitOpenExistentials)
704-
let firstpointer$Existential$ = firstpointer$RawPointer$.load(as: firstpointer$DynamicType$) as! any (DataProtocol)
705-
#else
706-
func firstpointer$DoLoad<Ty>(_ ty: Ty.Type) -> any (DataProtocol) {
707-
firstpointer$RawPointer$.load(as: ty) as! any (DataProtocol)
708-
}
709-
let firstpointer$Existential$ = _openExistential(firstpointer$DynamicType$, do: firstpointer$DoLoad)
710-
#endif
711-
firstswiftObject$ = firstpointer$Existential$
712-
let secondswiftObject$: (DataProtocol)
713-
let secondpointer$ = environment.interface.CallLongMethodA(environment, second, _JNIMethodIDCache.JNISwiftInstance.memoryAddress, [])
714-
let secondtypeMetadata$ = environment.interface.CallLongMethodA(environment, second, _JNIMethodIDCache.JNISwiftInstance.typeMetadataAddress, [])
715-
guard let secondpointer$TypeMetadataPointer$ = UnsafeRawPointer(bitPattern: Int(Int64(fromJNI: secondtypeMetadata$, in: environment))) else {
716-
fatalError("secondtypeMetadata$ memory address was null")
717-
}
718-
let secondpointer$DynamicType$: Any.Type = unsafeBitCast(secondpointer$TypeMetadataPointer$, to: Any.Type.self)
719-
guard let secondpointer$RawPointer$ = UnsafeMutableRawPointer(bitPattern: Int(Int64(fromJNI: secondpointer$, in: environment))) else {
720-
fatalError("secondpointer$ memory address was null")
721-
}
722-
#if hasFeature(ImplicitOpenExistentials)
723-
let secondpointer$Existential$ = secondpointer$RawPointer$.load(as: secondpointer$DynamicType$) as! any (DataProtocol)
724-
#else
725-
func secondpointer$DoLoad<Ty>(_ ty: Ty.Type) -> any (DataProtocol) {
726-
secondpointer$RawPointer$.load(as: ty) as! any (DataProtocol)
727-
}
728-
let secondpointer$Existential$ = _openExistential(secondpointer$DynamicType$, do: secondpointer$DoLoad)
729-
#endif
730-
secondswiftObject$ = secondpointer$Existential$
731-
return SwiftModule.verify(first: firstswiftObject$, second: secondswiftObject$).getJNILocalRefValue(in: environment)
732-
}
672+
""",
733673
"""
674+
return SwiftModule.verify(first: firstswiftObject$, second: secondswiftObject$).getJNILocalRefValue(in: environment)
675+
""",
734676
]
735677
)
736678
}

0 commit comments

Comments
 (0)