@@ -485,6 +485,15 @@ extension JNISwift2JavaGenerator {
485485 parameterName: parameterName
486486 )
487487
488+ case . set:
489+ guard let genericArgs = nominalType. genericArguments, genericArgs. count == 1 else {
490+ throw JavaTranslationError . setRequiresElementType ( swiftType)
491+ }
492+ return try translateSetParameter (
493+ elementType: genericArgs [ 0 ] ,
494+ parameterName: parameterName
495+ )
496+
488497 case . foundationDate, . essentialsDate:
489498 break // Handled as wrapped struct
490499
@@ -590,6 +599,12 @@ extension JNISwift2JavaGenerator {
590599 parameterName: parameterName
591600 )
592601
602+ case . set( let elementType) :
603+ return try translateSetParameter (
604+ elementType: elementType,
605+ parameterName: parameterName
606+ )
607+
593608 case . metatype:
594609 return TranslatedParameter (
595610 parameter: JavaParameter ( name: parameterName, type: . long) ,
@@ -889,6 +904,14 @@ extension JNISwift2JavaGenerator {
889904 valueType: genericArgs [ 1 ]
890905 )
891906
907+ case . set:
908+ guard let genericArgs = nominalType. genericArguments, genericArgs. count == 1 else {
909+ throw JavaTranslationError . setRequiresElementType ( swiftType)
910+ }
911+ return try translateSetResult (
912+ elementType: genericArgs [ 0 ]
913+ )
914+
892915 case . foundationDate, . essentialsDate:
893916 // Handled as wrapped struct
894917 break
@@ -974,6 +997,11 @@ extension JNISwift2JavaGenerator {
974997 valueType: valueType
975998 )
976999
1000+ case . set( let elementType) :
1001+ return try translateSetResult (
1002+ elementType: elementType
1003+ )
1004+
9771005 case . tuple( let elements) where !elements. isEmpty:
9781006 return try translateTupleResult ( elements: elements, resultName: resultName)
9791007
@@ -1293,6 +1321,36 @@ extension JNISwift2JavaGenerator {
12931321 conversion: . wrapMemoryAddressUnsafe( . placeholder, dictType)
12941322 )
12951323 }
1324+
1325+ func translateSetParameter(
1326+ elementType: SwiftType ,
1327+ parameterName: String
1328+ ) throws -> TranslatedParameter {
1329+ let elementJavaType = try javaTypeForDictionaryComponent ( elementType)
1330+ let setType = JavaType . swiftSet ( elementJavaType)
1331+
1332+ return TranslatedParameter (
1333+ parameter: JavaParameter ( name: parameterName, type: setType) ,
1334+ conversion: . method(
1335+ . requireNonNull( . placeholder, message: " \( parameterName) must not be null " ) ,
1336+ function: " $memoryAddress " ,
1337+ arguments: [ ]
1338+ )
1339+ )
1340+ }
1341+
1342+ func translateSetResult(
1343+ elementType: SwiftType
1344+ ) throws -> TranslatedResult {
1345+ let elementJavaType = try javaTypeForDictionaryComponent ( elementType)
1346+ let setType = JavaType . swiftSet ( elementJavaType)
1347+
1348+ return TranslatedResult (
1349+ javaType: setType,
1350+ outParameters: [ ] ,
1351+ conversion: . wrapMemoryAddressUnsafe( . placeholder, setType)
1352+ )
1353+ }
12961354 }
12971355
12981356 struct TranslatedEnumCase {
@@ -1788,5 +1846,8 @@ extension JNISwift2JavaGenerator {
17881846
17891847 /// Dictionary type requires exactly two generic type arguments (key and value).
17901848 case dictionaryRequiresKeyAndValueTypes( SwiftType )
1849+
1850+ /// Set type requires exactly one generic type argument (element).
1851+ case setRequiresElementType( SwiftType )
17911852 }
17921853}
0 commit comments