diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolWithStatic.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolWithStatic.swift index 9936646a..f565b1c6 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolWithStatic.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolWithStatic.swift @@ -15,6 +15,19 @@ public protocol ProtocolWithStatic { // static requirements are not yet supported. static func myFunc() -> Int - static var value: Int64 { get } init() } + +public func useProtocolWithStatic(_ value: any ProtocolWithStatic) -> Int { + let meta = type(of: value) + return meta.myFunc() +} + +public protocol ProtocolWithStaticProperty { + static var value: Int { get } +} + +public func useProtocolWithStaticProperty(_ value: any ProtocolWithStaticProperty) -> Int { + let meta = type(of: value) + return meta.value +} diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift index e5ba671d..a7e968e9 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift @@ -23,7 +23,7 @@ extension JNISwift2JavaGenerator { ) -> [ImportedNominalType: JavaInterfaceSwiftWrapper] { var wrappers = [ImportedNominalType: JavaInterfaceSwiftWrapper]() - for type in types { + for type in types where type.swiftNominal.kind == .protocol { do { let translator = JavaInterfaceProtocolWrapperGenerator() wrappers[type] = try translator.generate(for: type) @@ -78,6 +78,12 @@ extension JNISwift2JavaGenerator { struct JavaInterfaceProtocolWrapperGenerator { func generate(for type: ImportedNominalType) throws -> JavaInterfaceSwiftWrapper { + if !type.initializers.isEmpty + || type.methods.contains(where: \.isStatic) + || type.variables.contains(where: \.isStatic) { + throw JavaTranslationError.protocolStaticRequirementsNotSupported + } + let functions = try type.methods.map { method in try translate(function: method) } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index 1c791df0..a1565123 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -1369,6 +1369,8 @@ extension JNISwift2JavaGenerator { // FIXME: Remove once we support protocol variables case protocolVariablesNotSupported + case protocolStaticRequirementsNotSupported + /// We cannot generate interface wrappers for /// protocols that we unable to be jextracted. case protocolWasNotExtracted