@@ -130,7 +130,7 @@ extension Swift2JavaTranslator {
130
130
131
131
/// Print required helper classes/interfaces for describing the CFunction.
132
132
///
133
- /// * function pointer parameter as a function interface.
133
+ /// * function pointer parameter as a functional interface.
134
134
/// * Unnamed-struct parameter as a record. (unimplemented)
135
135
func printParameterDescriptorClasses(
136
136
_ printer: inout CodePrinter ,
@@ -151,6 +151,7 @@ extension Swift2JavaTranslator {
151
151
///
152
152
/// ```java
153
153
/// class $<parameter-name> {
154
+ /// @FunctionalInterface
154
155
/// interface Function {
155
156
/// <return-type> apply(<parameters>);
156
157
/// }
@@ -167,7 +168,7 @@ extension Swift2JavaTranslator {
167
168
_ cType: CType
168
169
) {
169
170
guard case . pointer( . function( let cResultType, let cParameterTypes, variadic: false ) ) = cType else {
170
- preconditionFailure ( " must be a C function pointer type " )
171
+ preconditionFailure ( " must be a C function pointer type; name= \( name ) , cType= \( cType ) " )
171
172
}
172
173
173
174
let cParams = cParameterTypes. enumerated ( ) . map { i, ty in
@@ -187,6 +188,7 @@ extension Swift2JavaTranslator {
187
188
) { printer in
188
189
printer. print (
189
190
"""
191
+ @FunctionalInterface
190
192
public interface Function {
191
193
\( cResultType. javaType) apply( \( paramDecls. joined ( separator: " , " ) ) );
192
194
}
@@ -206,7 +208,7 @@ extension Swift2JavaTranslator {
206
208
207
209
/// Print the helper type container for a user-facing Java API.
208
210
///
209
- /// * User-facing function interfaces.
211
+ /// * User-facing functional interfaces.
210
212
func printJavaBindingWrapperHelperClass(
211
213
_ printer: inout CodePrinter ,
212
214
_ decl: ImportedFunc
@@ -228,22 +230,22 @@ extension Swift2JavaTranslator {
228
230
}
229
231
}
230
232
231
- /// Print "wrapper" function interface representing a Swift closure type.
233
+ /// Print "wrapper" functional interface representing a Swift closure type.
232
234
func printJavaBindingWrapperFunctionTypeHelper(
233
235
_ printer: inout CodePrinter ,
234
236
_ functionType: TranslatedFunctionType ,
235
237
_ bindingDescriptorName: String
236
238
) {
237
- let cdeclDescritor = " \( bindingDescriptorName) .$ \( functionType. name) "
238
- if functionType. isTrivial {
239
- // If the usser -facing function interface is C- compatible, just extend the
240
- // lowered function pointer parameter interface.
239
+ let cdeclDescriptor = " \( bindingDescriptorName) .$ \( functionType. name) "
240
+ if functionType. isCompatibleWithC {
241
+ // If the user -facing functional interface is C ABI compatible, just extend
242
+ // the lowered function pointer parameter interface.
241
243
printer. print (
242
244
"""
243
- public interface \( functionType . name ) extends \( cdeclDescritor ) .Function {
244
- default MemorySegment toUpcallStub(Arena arena) {
245
- return \( bindingDescriptorName ) .$ \( functionType. name) .toUpcallStub(this, arena);
246
- }
245
+ @FunctionalInterface
246
+ public interface \( functionType . name ) extends \( cdeclDescriptor ) .Function {}
247
+ private static MemorySegment $toUpcallStub( \( functionType. name) fi, Arena arena) {
248
+ return \( bindingDescriptorName ) .$ \( functionType . name ) .toUpcallStub(fi, arena);
247
249
}
248
250
"""
249
251
)
@@ -256,13 +258,14 @@ extension Swift2JavaTranslator {
256
258
257
259
printer. print (
258
260
"""
261
+ @FunctionalInterface
259
262
public interface \( functionType. name) {
260
263
\( functionType. result. javaResultType) apply( \( apiParams. joined ( separator: " , " ) ) );
261
- private default MemorySegment toUpcallStub(Arena arena) {
262
- return \( cdeclDescritor ) . toUpcallStub((<cdecl-params>) -> {
263
- <maybe- return> fi(<converted-args>)
264
- }, arena);
265
- }
264
+ }
265
+ private static MemorySegment $ toUpcallStub( \( functionType . name ) fi, Arena arena) {
266
+ return \( cdeclDescriptor ) .toUpcallStub((<cdecl-params>) -> {
267
+ <maybe-return> fi(<converted-args>)
268
+ }, arena);
266
269
}
267
270
"""
268
271
)
0 commit comments