@@ -17,13 +17,19 @@ import JavaTypes
1717extension JNISwift2JavaGenerator {
1818 func translatedDecl(
1919 for decl: ImportedFunc
20- ) -> TranslatedFunctionDecl {
20+ ) -> TranslatedFunctionDecl ? {
2121 if let cached = translatedDecls [ decl] {
2222 return cached
2323 }
2424
25- let translation = JavaTranslation ( swiftModuleName: self . swiftModuleName)
26- let translated = translation. translate ( decl)
25+ let translated : TranslatedFunctionDecl ?
26+ do {
27+ let translation = JavaTranslation ( swiftModuleName: swiftModuleName)
28+ translated = try translation. translate ( decl)
29+ } catch {
30+ self . logger. info ( " Failed to translate: ' \( decl. swiftDecl. qualifiedNameForDebug) '; \( error) " )
31+ translated = nil
32+ }
2733
2834 translatedDecls [ decl] = translated
2935 return translated
@@ -32,8 +38,8 @@ extension JNISwift2JavaGenerator {
3238 struct JavaTranslation {
3339 let swiftModuleName : String
3440
35- func translate( _ decl: ImportedFunc ) -> TranslatedFunctionDecl {
36- let translatedFunctionSignature = translate ( functionSignature: decl. functionSignature)
41+ func translate( _ decl: ImportedFunc ) throws -> TranslatedFunctionDecl {
42+ let translatedFunctionSignature = try translate ( functionSignature: decl. functionSignature)
3743 // Types with no parent will be outputted inside a "module" class.
3844 let parentName = decl. parentType? . asNominalType? . nominalTypeDecl. qualifiedName ?? swiftModuleName
3945
@@ -51,31 +57,31 @@ extension JNISwift2JavaGenerator {
5157 )
5258 }
5359
54- func translate( functionSignature: SwiftFunctionSignature , isInitializer: Bool = false ) -> TranslatedFunctionSignature {
55- let parameters = functionSignature. parameters. enumerated ( ) . map { idx, param in
60+ func translate( functionSignature: SwiftFunctionSignature , isInitializer: Bool = false ) throws -> TranslatedFunctionSignature {
61+ let parameters = try functionSignature. parameters. enumerated ( ) . map { idx, param in
5662 let parameterName = param. parameterName ?? " arg \( idx) ) "
57- return translate ( swiftParam: param, parameterName: parameterName)
63+ return try translate ( swiftParam: param, parameterName: parameterName)
5864 }
5965
60- return TranslatedFunctionSignature (
66+ return try TranslatedFunctionSignature (
6167 parameters: parameters,
6268 resultType: translate ( swiftType: functionSignature. result. type)
6369 )
6470 }
6571
66- func translate( swiftParam: SwiftParameter , parameterName: String ) -> JavaParameter {
67- return JavaParameter (
72+ func translate( swiftParam: SwiftParameter , parameterName: String ) throws -> JavaParameter {
73+ return try JavaParameter (
6874 name: parameterName,
6975 type: translate ( swiftType: swiftParam. type)
7076 )
7177 }
7278
73- func translate( swiftType: SwiftType ) -> JavaType {
79+ func translate( swiftType: SwiftType ) throws -> JavaType {
7480 switch swiftType {
7581 case . nominal( let nominalType) :
7682 if let knownType = nominalType. nominalTypeDecl. knownTypeKind {
7783 guard let javaType = translate ( knownType: knownType) else {
78- fatalError ( " unsupported known type: \( knownType ) " )
84+ throw JavaTranslationError . unsupportedSwiftType ( swiftType )
7985 }
8086 return javaType
8187 }
@@ -86,7 +92,7 @@ extension JNISwift2JavaGenerator {
8692 return . void
8793
8894 case . metatype, . optional, . tuple, . function, . existential, . opaque:
89- fatalError ( " unsupported type: \( self ) " )
95+ throw JavaTranslationError . unsupportedSwiftType ( swiftType )
9096 }
9197 }
9298
@@ -127,4 +133,8 @@ extension JNISwift2JavaGenerator {
127133 let parameters : [ JavaParameter ]
128134 let resultType : JavaType
129135 }
136+
137+ enum JavaTranslationError : Error {
138+ case unsupportedSwiftType( SwiftType )
139+ }
130140}
0 commit comments