@@ -81,7 +81,7 @@ struct SwiftSymbolTableSuite {
8181 public struct MyValue {}
8282 }
8383
84- public func fullyQualifiedType() -> MyModule.MyModule.MyValue
84+ public func fullyQualifiedType() -> MyModule.MyModule.MyValue
8585 """ ,
8686 mode,
8787 . java,
@@ -92,4 +92,94 @@ struct SwiftSymbolTableSuite {
9292 ] ,
9393 )
9494 }
95+
96+ @Test func moduleScopedLookup( ) throws {
97+ let sourceFile : SourceFileSyntax = """
98+ public struct MyClass {}
99+ """
100+ let symbolTable = SwiftSymbolTable . setup (
101+ moduleName: " MyModule " ,
102+ [
103+ . init( syntax: sourceFile, path: " Fake.swift " )
104+ ] ,
105+ config: nil ,
106+ log: Logger ( label: " swift-java " , logLevel: . critical) ,
107+ )
108+
109+ // Lookup in self-module by qualified name
110+ let myClass = symbolTable. lookupTopLevelNominalType ( " MyClass " , inModule: " MyModule " )
111+ #expect( myClass != nil )
112+ #expect( myClass? . qualifiedName == " MyClass " )
113+
114+ // Lookup in imported module (Swift)
115+ let swiftInt = symbolTable. lookupTopLevelNominalType ( " Int " , inModule: " Swift " )
116+ #expect( swiftInt != nil )
117+ #expect( swiftInt? . qualifiedName == " Int " )
118+
119+ // Lookup in unknown module returns nil
120+ let unknown = symbolTable. lookupTopLevelNominalType ( " Foo " , inModule: " NoSuchModule " )
121+ #expect( unknown == nil )
122+ }
123+
124+ @Test ( arguments: [ JExtractGenerationMode . jni, . ffm] )
125+ func resolveQualifiedTypesInFunctionSignatures( mode: JExtractGenerationMode ) throws {
126+ try assertOutput (
127+ input: """
128+ public struct MySwiftClass {
129+ public init() {}
130+ }
131+
132+ public func factory(len: Swift.Int, cap: Swift.Int) -> MyModule.MySwiftClass
133+ """ ,
134+ mode,
135+ . java,
136+ swiftModuleName: " MyModule " ,
137+ detectChunkByInitialLines: 1 ,
138+ expectedChunks: [
139+ " public static MySwiftClass factory( "
140+ ] ,
141+ )
142+ }
143+
144+ @Test ( arguments: [ JExtractGenerationMode . jni, . ffm] )
145+ func resolveQualifiedNestedTypesInFunctionSignatures( mode: JExtractGenerationMode ) throws {
146+ try assertOutput (
147+ input: """
148+ public struct MySwiftClass {
149+ public struct Nested {
150+ public init() {}
151+ }
152+ }
153+
154+ public func factory(len: Swift.Int, cap: Swift.Int) -> MyModule.MySwiftClass.Nested
155+ """ ,
156+ mode,
157+ . java,
158+ swiftModuleName: " MyModule " ,
159+ detectChunkByInitialLines: 1 ,
160+ expectedChunks: [
161+ " public static MySwiftClass.Nested factory( "
162+ ] ,
163+ )
164+ }
165+
166+ @Test ( arguments: [ JExtractGenerationMode . jni, . ffm] )
167+ func resolveQualifiedTypesShadowingModule( mode: JExtractGenerationMode ) throws {
168+ try assertOutput (
169+ input: """
170+ public struct MyModule { // shadowing module MyModule
171+ public init() {}
172+ }
173+
174+ public func factory(len: Swift.Int, cap: Swift.Int) -> MyModule
175+ """ ,
176+ mode,
177+ . java,
178+ swiftModuleName: " MyModule " ,
179+ detectChunkByInitialLines: 1 ,
180+ expectedChunks: [
181+ " public static MyModule factory( "
182+ ] ,
183+ )
184+ }
95185}
0 commit comments