Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Sources/JExtractSwiftLib/Convenience/String+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@

extension String {

// TODO: naive implementation good enough for our simple case `methodMethodSomething` -> `MethodSomething`
var toCamelCase: String {
var firstCharacterUppercased: String {
guard let f = first else {
return self
}
Expand Down
8 changes: 4 additions & 4 deletions Sources/JExtractSwiftLib/ImportedDecls.swift
Original file line number Diff line number Diff line change
Expand Up @@ -160,15 +160,15 @@ extension ImportedFunc {
let returnsBoolean = self.functionSignature.result.type.asNominalTypeDeclaration?.knownTypeKind == .bool

if !returnsBoolean {
return "get\(self.name.toCamelCase)"
return "get\(self.name.firstCharacterUppercased)"
} else if !self.name.hasJavaBooleanNamingConvention {
return "is\(self.name.toCamelCase)"
return "is\(self.name.firstCharacterUppercased)"
} else {
return self.name.toCamelCase
return self.name
}
}

var javaSetterName: String {
"set\(self.name.toCamelCase)"
"set\(self.name.firstCharacterUppercased)"
}
}
56 changes: 55 additions & 1 deletion Tests/JExtractSwiftTests/JNI/JNIVariablesTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ struct JNIVariablesTests {
}

@Test
func boolean_swiftThunks() throws {
func someBoolean_swiftThunks() throws {
try assertOutput(
input: membersSource,
.jni,
Expand Down Expand Up @@ -450,4 +450,58 @@ struct JNIVariablesTests {
]
)
}

@Test
func isBoolean_javaBindings() throws {
try assertOutput(
input: membersSource,
.jni,
.java,
detectChunkByInitialLines: 8,
expectedChunks: [
"""
/**
* Downcall to Swift:
* {@snippet lang=swift :
* public let isBoolean: Bool
* }
*/
public boolean isBoolean() {
long self$ = this.$memoryAddress();
return MyClass.$isBoolean(self$);
}
""",
"""
private static native boolean $isBoolean(long selfPointer);
""",
]
)
}

@Test
func isBoolean_swiftThunks() throws {
try assertOutput(
input: membersSource,
.jni,
.swift,
detectChunkByInitialLines: 1,
expectedChunks: [
"""
@_cdecl("Java_com_example_swift_MyClass__00024isBoolean__J")
func Java_com_example_swift_MyClass__00024isBoolean__J(environment: UnsafeMutablePointer<JNIEnv?>!, thisClass: jclass, selfPointer: jlong) -> jboolean {
guard let env$ = environment else {
fatalError("Missing JNIEnv in downcall to \\(#function)")
}
assert(selfPointer != 0, "selfPointer memory address was null")
let selfBits$ = Int(Int64(fromJNI: selfPointer, in: env$))
guard let self$ = UnsafeMutablePointer<MyClass>(bitPattern: selfBits$) else {
fatalError("self memory address was null in call to \\(#function)!")
}
let result = self$.pointee.isBoolean
return result.getJNIValue(in: environment)
}
""",
]
)
}
}
Loading