@@ -170,19 +170,28 @@ extension JavaTranslator {
170170 let javaType = try JavaType ( javaTypeName: javaClass. getName ( ) )
171171 let isSwiftOptional = javaType. isSwiftOptional
172172 return (
173- try javaType. swiftTypeName ( resolver: self . getSwiftTypeNameFromJavaClassName ( _: ) ) ,
173+ try javaType. swiftTypeName { javaClassName in
174+ try self . getSwiftTypeNameFromJavaClassName ( javaClassName)
175+ } ,
174176 isSwiftOptional
175177 )
176178 }
177179
178180 /// 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 {
180185 if let translated = translatedClasses [ name] {
181186 // Note that we need to import this Swift module.
182187 if let swiftModule = translated. swiftModule, swiftModule != swiftModuleName {
183188 importedSwiftModules. insert ( swiftModule)
184189 }
185190
191+ if escapeMemberNames {
192+ return translated. swiftType. escapingSwiftMemberNames
193+ }
194+
186195 return translated. swiftType
187196 }
188197
@@ -197,7 +206,7 @@ extension JavaTranslator {
197206 /// JavaClass to house static methods.
198207 package func translateClass( _ javaClass: JavaClass < JavaObject > ) throws -> [ DeclSyntax ] {
199208 let fullName = javaClass. getName ( )
200- let swiftTypeName = try getSwiftTypeNameFromJavaClassName ( fullName)
209+ let swiftTypeName = try getSwiftTypeNameFromJavaClassName ( fullName, escapeMemberNames : false )
201210 let ( swiftParentType, swiftInnermostTypeName) = swiftTypeName. splitSwiftTypeName ( )
202211
203212 // If the swift parent type has not been translated, don't try to translate this one
@@ -636,3 +645,30 @@ extension JavaTranslator {
636645 }
637646 }
638647}
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