Skip to content

Commit ac5ddbc

Browse files
committed
-remove implicit overload synthesis, and raw unsafe buf ptr return
It's not really a great idea to support this so we'll wait until anyone actually has a real reason for it; it complicated code a lot as well
1 parent c2fc236 commit ac5ddbc

11 files changed

Lines changed: 16 additions & 298 deletions

File tree

Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/UnsafeRawBufferPointer.swift

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import SwiftJava
1616

17-
/// Sum all bytes in the buffer
1817
public func sumOfBytes(data: UnsafeRawBufferPointer) -> Int64 {
1918
var sum: Int64 = 0
2019
for byte in data {
@@ -23,22 +22,6 @@ public func sumOfBytes(data: UnsafeRawBufferPointer) -> Int64 {
2322
return sum
2423
}
2524

26-
/// Return the count of bytes in the buffer
2725
public func bufferCount(data: UnsafeRawBufferPointer) -> Int64 {
2826
Int64(data.count)
2927
}
30-
31-
/// Allocates a buffer of `count` bytes, each set to its index (mod 256)
32-
public func makeByteBuffer(count: Int32) -> UnsafeRawBufferPointer {
33-
let ptr = UnsafeMutableRawBufferPointer.allocate(byteCount: Int(count), alignment: 1)
34-
for i in 0..<Int(count) {
35-
ptr[i] = UInt8(i % 256)
36-
}
37-
return UnsafeRawBufferPointer(ptr)
38-
}
39-
40-
/// Deallocates a buffer previously returned by makeByteBuffer
41-
public func freeByteBuffer(pointer: UnsafeRawBufferPointer) {
42-
guard let base = pointer.baseAddress else { return }
43-
UnsafeMutableRawPointer(mutating: base).deallocate()
44-
}

Samples/SwiftJavaExtractJNISampleApp/src/test/java/com/example/swift/UnsafeRawBufferPointerTest.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,4 @@ void bufferCount_empty() {
4242
byte[] input = new byte[] {};
4343
assertEquals(0, MySwiftLibrary.bufferCount(input));
4444
}
45-
46-
@Test
47-
void makeByteBuffer() {
48-
var buf = MySwiftLibrary.makeByteBuffer(10);
49-
assertNotEquals(0, buf.pointer);
50-
assertEquals(10, buf.count);
51-
MySwiftLibrary.freeByteBuffer(buf);
52-
}
5345
}

Sources/JExtractSwiftLib/ImportedDecls.swift

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -127,22 +127,6 @@ public final class ImportedFunc: ImportedDecl, CustomStringConvertible {
127127

128128
var functionSignature: SwiftFunctionSignature
129129

130-
/// Whether this declaration was synthesized during import (not from source)
131-
var isImplicit: Bool { self.implicitOverloadKind != nil }
132-
133-
/// If non-nil, this is a synthesized overload with alternative parameter translation
134-
var implicitOverloadKind: ImplicitJavaOverloadKind?
135-
136-
/// Determines if we should handle this method slightly differently than usual.
137-
///
138-
/// This allows to provide secondary / compatibility overloads for methods which
139-
/// may have different useful ways to call them from Java.
140-
enum ImplicitJavaOverloadKind {
141-
/// Overload with `UnsafeRawBufferPointer` parameters translated as `SwiftUnsafeRawBufferPointer`
142-
/// (pointer+count longs) instead of byte[]
143-
case unsafeRawBufferPointerParams
144-
}
145-
146130
public var signatureString: String {
147131
self.swiftDecl.signatureString
148132
}

Sources/JExtractSwiftLib/ImportedFunc+ImplicitOverloads.swift

Lines changed: 0 additions & 36 deletions
This file was deleted.

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ extension JNISwift2JavaGenerator {
8787
let protocolWrappers: [ImportedNominalType: JavaInterfaceSwiftWrapper]
8888
let logger: Logger
8989
var javaIdentifiers: JavaIdentifierFactory
90-
var implicitOverloadKind: ImportedFunc.ImplicitJavaOverloadKind?
9190

9291
func translate(enumCase: ImportedEnumCase) throws -> TranslatedEnumCase {
9392
let nativeTranslation = NativeJavaTranslation(
@@ -217,15 +216,14 @@ extension JNISwift2JavaGenerator {
217216
}
218217

219218
func translate(_ decl: ImportedFunc) throws -> TranslatedFunctionDecl {
220-
var nativeTranslation = NativeJavaTranslation(
219+
let nativeTranslation = NativeJavaTranslation(
221220
config: self.config,
222221
javaPackage: self.javaPackage,
223222
javaClassLookupTable: self.javaClassLookupTable,
224223
knownTypes: self.knownTypes,
225224
protocolWrappers: self.protocolWrappers,
226225
logger: self.logger
227226
)
228-
nativeTranslation.implicitOverloadKind = decl.implicitOverloadKind
229227

230228
// Types with no parent will be outputted inside a "module" class.
231229
let parentName = decl.parentType?.asNominalType?.nominalTypeDecl.qualifiedName ?? swiftModuleName
@@ -234,9 +232,7 @@ extension JNISwift2JavaGenerator {
234232
let javaName = javaIdentifiers.makeJavaMethodName(decl)
235233

236234
// Swift -> Java
237-
var copy = self
238-
copy.implicitOverloadKind = decl.implicitOverloadKind
239-
var translatedFunctionSignature = try copy.translate(
235+
var translatedFunctionSignature = try self.translate(
240236
functionSignature: decl.functionSignature,
241237
methodName: javaName,
242238
parentName: parentName
@@ -504,21 +500,10 @@ extension JNISwift2JavaGenerator {
504500
break // Handled as wrapped struct
505501

506502
case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer:
507-
switch implicitOverloadKind {
508-
case .unsafeRawBufferPointerParams:
509-
return TranslatedParameter(
510-
parameter: JavaParameter(name: parameterName, type: .swiftUnsafeRawBufferPointer),
511-
conversion: .commaSeparated([
512-
.member(.placeholder, field: "pointer"),
513-
.member(.placeholder, field: "count"),
514-
])
515-
)
516-
default:
517-
return TranslatedParameter(
518-
parameter: JavaParameter(name: parameterName, type: .array(.byte)),
519-
conversion: .placeholder
520-
)
521-
}
503+
return TranslatedParameter(
504+
parameter: JavaParameter(name: parameterName, type: .array(.byte)),
505+
conversion: .placeholder
506+
)
522507

523508
case .foundationUUID, .essentialsUUID:
524509
return TranslatedParameter(
@@ -959,21 +944,6 @@ extension JNISwift2JavaGenerator {
959944
// Handled as wrapped struct
960945
break
961946

962-
case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer:
963-
let outParam = "\(resultName)$unsafeBufferPointer"
964-
return TranslatedResult(
965-
javaType: .swiftUnsafeRawBufferPointer,
966-
outParameters: [
967-
OutParameter(name: outParam, type: .array(.long), allocation: .newArray(.long, size: 2)),
968-
],
969-
conversion: .tupleSameTypeFromOutParam(
970-
className: "new SwiftUnsafeRawBufferPointer",
971-
outParamName: outParam,
972-
elementCount: 2,
973-
elementConversion: .placeholder
974-
)
975-
)
976-
977947
case .foundationUUID, .essentialsUUID:
978948
return TranslatedResult(
979949
javaType: .javaUtilUUID,
@@ -1816,7 +1786,7 @@ extension JNISwift2JavaGenerator {
18161786
case tupleFromOutParams(tupleClassName: String, elements: [(outParamName: String, elementConversion: JavaNativeConversionStep)])
18171787

18181788
/// Constructs a value from a single out-parameter array where all elements are the same type
1819-
/// E.g. `new SwiftUnsafeRawBufferPointer(result$urbp[0], result$urbp[1])`
1789+
/// E.g. `new SomeType(result$arr[0], result$arr[1])`
18201790
indirect case tupleSameTypeFromOutParam(className: String, outParamName: String, elementCount: Int, elementConversion: JavaNativeConversionStep)
18211791

18221792
/// `Arrays.stream(args)`

Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift

Lines changed: 8 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ extension JNISwift2JavaGenerator {
2525
var knownTypes: SwiftKnownTypes
2626
let protocolWrappers: [ImportedNominalType: JavaInterfaceSwiftWrapper]
2727
let logger: Logger
28-
var implicitOverloadKind: ImportedFunc.ImplicitJavaOverloadKind?
2928

3029
/// Translates a Swift function into the native JNI method signature.
3130
func translate(
@@ -127,29 +126,14 @@ extension JNISwift2JavaGenerator {
127126
)
128127

129128
case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer:
130-
switch implicitOverloadKind {
131-
case .unsafeRawBufferPointerParams:
132-
let pointerParam = "\(parameterName)$pointer"
133-
let countParam = "\(parameterName)$count"
134-
return NativeParameter(
135-
parameters: [
136-
JavaParameter(name: pointerParam, type: .long),
137-
JavaParameter(name: countParam, type: .long),
138-
],
139-
conversion: .jniLongsToUnsafeRawBufferPointer(pointerParam: pointerParam, countParam: countParam),
140-
indirectConversion: nil,
141-
conversionCheck: nil
142-
)
143-
default:
144-
return NativeParameter(
145-
parameters: [
146-
JavaParameter(name: parameterName, type: .array(.byte))
147-
],
148-
conversion: .jniByteArrayToUnsafeRawBufferPointer(.placeholder, name: parameterName),
149-
indirectConversion: nil,
150-
conversionCheck: nil
151-
)
152-
}
129+
return NativeParameter(
130+
parameters: [
131+
JavaParameter(name: parameterName, type: .array(.byte))
132+
],
133+
conversion: .jniByteArrayToUnsafeRawBufferPointer(.placeholder, name: parameterName),
134+
indirectConversion: nil,
135+
conversionCheck: nil
136+
)
153137

154138
case .foundationDate, .essentialsDate, .foundationData, .essentialsData:
155139
// Handled as wrapped struct
@@ -725,16 +709,6 @@ extension JNISwift2JavaGenerator {
725709
resultName: resultName
726710
)
727711

728-
case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer:
729-
let outParam = "\(resultName)$unsafeBufferPointer"
730-
return NativeResult(
731-
javaType: .void,
732-
conversion: .unsafeRawBufferPointerDestructure(.placeholder, outParam: outParam),
733-
outParameters: [
734-
JavaParameter(name: outParam, type: .array(.long)),
735-
]
736-
)
737-
738712
case .foundationDate, .essentialsDate, .foundationData, .essentialsData:
739713
// Handled as wrapped struct
740714
break
@@ -1201,19 +1175,13 @@ extension JNISwift2JavaGenerator {
12011175
/// Converts a jbyteArray to UnsafeRawBufferPointer via GetByteArrayElements + defer
12021176
indirect case jniByteArrayToUnsafeRawBufferPointer(NativeSwiftConversionStep, name: String)
12031177

1204-
/// Constructs UnsafeRawBufferPointer from two jlong params (pointer, count) — zero copy
1205-
case jniLongsToUnsafeRawBufferPointer(pointerParam: String, countParam: String)
1206-
12071178
/// Constructs a Swift tuple from individually-converted elements.
12081179
/// E.g. `(label0: conv0, conv1)` for `(label0: Int, String)`
12091180
indirect case tupleConstruct(elements: [(label: String?, conversion: NativeSwiftConversionStep)])
12101181

12111182
/// Destructures a Swift tuple result and writes each element to an out-parameter.
12121183
indirect case tupleDestructure(elements: [(index: Int, label: String?, conversion: NativeSwiftConversionStep, outParamName: String, javaType: JavaType)])
12131184

1214-
/// Destructures an UnsafeRawBufferPointer into a long[2] out-parameter: [0]=pointer, [1]=count
1215-
indirect case unsafeRawBufferPointerDestructure(NativeSwiftConversionStep, outParam: String)
1216-
12171185
/// Promotes the outermost `.getJNIValue` to `.getJNILocalRefValue`.
12181186
/// Used for `@_cdecl` return positions to ensure the local ref survives
12191187
/// ARC destruction of temporary `JavaObject`s.
@@ -1770,13 +1738,6 @@ extension JNISwift2JavaGenerator {
17701738
)
17711739
return rbpVar
17721740

1773-
case .jniLongsToUnsafeRawBufferPointer(let pointerParam, let countParam):
1774-
let rbpVar = "\(pointerParam)$rbp"
1775-
printer.print(
1776-
"let \(rbpVar) = UnsafeRawBufferPointer(start: UnsafeRawPointer(bitPattern: Int(\(pointerParam)))!, count: Int(\(countParam)))"
1777-
)
1778-
return rbpVar
1779-
17801741
case .tupleConstruct(let elements):
17811742
let parts = elements.enumerated().map { idx, element in
17821743
let converted = element.conversion.render(&printer, "\(placeholder)_\(idx)")
@@ -1808,20 +1769,6 @@ extension JNISwift2JavaGenerator {
18081769
}
18091770
}
18101771
return ""
1811-
1812-
case .unsafeRawBufferPointerDestructure(let inner, let outParam):
1813-
let inner = inner.render(&printer, placeholder)
1814-
let resultVar = "\(outParam)$result"
1815-
printer.print("let \(resultVar) = \(inner)")
1816-
printer.print(
1817-
"""
1818-
var \(outParam)$jni_0 = jlong(Int(bitPattern: \(resultVar).baseAddress))
1819-
environment.interface.SetLongArrayRegion(environment, \(outParam), 0, 1, &\(outParam)$jni_0)
1820-
var \(outParam)$jni_1 = jlong(\(resultVar).count)
1821-
environment.interface.SetLongArrayRegion(environment, \(outParam), 1, 1, &\(outParam)$jni_1)
1822-
"""
1823-
)
1824-
return ""
18251772
}
18261773
}
18271774
}

Sources/JExtractSwiftLib/JavaIdentifierFactory.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ package struct JavaIdentifierFactory {
3030
private mutating func record(_ methods: [ImportedFunc]) {
3131
// Group methods by their Java base name.
3232
var methodsByBaseName: [String: [ImportedFunc]] = [:]
33-
for method in methods where !method.isImplicit {
33+
for method in methods {
3434
let baseName: String =
3535
switch method.apiKind {
3636
case .getter, .subscriptGetter: method.javaGetterName

Sources/JExtractSwiftLib/JavaTypes/JavaType+JDK.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,4 @@ extension JavaType {
5959
.class(package: "java.util", name: "UUID")
6060
}
6161

62-
static var swiftUnsafeRawBufferPointer: JavaType {
63-
.class(package: "org.swift.swiftkit.core", name: "SwiftUnsafeRawBufferPointer")
64-
}
6562
}

Sources/JExtractSwiftLib/Swift2JavaTranslator.swift

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,6 @@ extension Swift2JavaTranslator {
106106
}
107107

108108
self.visitFoundationDeclsIfNeeded(with: visitor)
109-
// If we have any decls that have implicit overloads, synthesize imported funcs for those.
110-
// Rest of the pipeline will be able to treat them as-if normal funcs
111-
self.synthesizeImplicitOverloads()
112109
}
113110

114111
private func visitFoundationDeclsIfNeeded(with visitor: Swift2JavaVisitor) {
@@ -142,22 +139,6 @@ extension Swift2JavaTranslator {
142139
}
143140
}
144141

145-
private func synthesizeImplicitOverloads() {
146-
for decl in importedGlobalFuncs {
147-
if decl.hasUnsafeRawBufferPointerParameters {
148-
importedGlobalFuncs.append(decl.makeImplicitOverloadFunc(.unsafeRawBufferPointerParams))
149-
}
150-
}
151-
152-
for (_, type) in importedTypes {
153-
for method in type.methods {
154-
if method.hasUnsafeRawBufferPointerParameters {
155-
type.methods.append(method.makeImplicitOverloadFunc(.unsafeRawBufferPointerParams))
156-
}
157-
}
158-
}
159-
}
160-
161142
package func prepareForTranslation() {
162143
let dependenciesSource = self.buildDependencyClassesSourceFile()
163144

SwiftKitCore/src/main/java/org/swift/swiftkit/core/SwiftUnsafeRawBufferPointer.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)