@@ -170,19 +170,28 @@ extension JavaTranslator {
170
170
let javaType = try JavaType ( javaTypeName: javaClass. getName ( ) )
171
171
let isSwiftOptional = javaType. isSwiftOptional
172
172
return (
173
- try javaType. swiftTypeName ( resolver: self . getSwiftTypeNameFromJavaClassName ( _: ) ) ,
173
+ try javaType. swiftTypeName { javaClassName in
174
+ try self . getSwiftTypeNameFromJavaClassName ( javaClassName)
175
+ } ,
174
176
isSwiftOptional
175
177
)
176
178
}
177
179
178
180
/// Map a Java class name to its corresponding Swift type.
179
- private func getSwiftTypeNameFromJavaClassName( _ name: String ) throws -> String {
181
+ private func getSwiftTypeNameFromJavaClassName(
182
+ _ name: String ,
183
+ escapeMemberNames: Bool = true
184
+ ) throws -> String {
180
185
if let translated = translatedClasses [ name] {
181
186
// Note that we need to import this Swift module.
182
187
if let swiftModule = translated. swiftModule, swiftModule != swiftModuleName {
183
188
importedSwiftModules. insert ( swiftModule)
184
189
}
185
190
191
+ if escapeMemberNames {
192
+ return translated. swiftType. escapingSwiftMemberNames
193
+ }
194
+
186
195
return translated. swiftType
187
196
}
188
197
@@ -197,7 +206,7 @@ extension JavaTranslator {
197
206
/// JavaClass to house static methods.
198
207
package func translateClass( _ javaClass: JavaClass < JavaObject > ) throws -> [ DeclSyntax ] {
199
208
let fullName = javaClass. getName ( )
200
- let swiftTypeName = try getSwiftTypeNameFromJavaClassName ( fullName)
209
+ let swiftTypeName = try getSwiftTypeNameFromJavaClassName ( fullName, escapeMemberNames : false )
201
210
let ( swiftParentType, swiftInnermostTypeName) = swiftTypeName. splitSwiftTypeName ( )
202
211
203
212
// If the swift parent type has not been translated, don't try to translate this one
@@ -636,3 +645,30 @@ extension JavaTranslator {
636
645
}
637
646
}
638
647
}
648
+
649
+ extension String {
650
+ /// Escape Swift types that involve member name references like '.Type'
651
+ fileprivate var escapingSwiftMemberNames : String {
652
+ var count = 0
653
+ return split ( separator: " . " ) . map { component in
654
+ defer {
655
+ count += 1
656
+ }
657
+
658
+ if count > 0 && component. memberRequiresBackticks {
659
+ return " ` \( component) ` "
660
+ }
661
+
662
+ return String ( component)
663
+ } . joined ( separator: " . " )
664
+ }
665
+ }
666
+
667
+ extension Substring {
668
+ fileprivate var memberRequiresBackticks : Bool {
669
+ switch self {
670
+ case " Type " : return true
671
+ default : return false
672
+ }
673
+ }
674
+ }
0 commit comments