Skip to content

Commit fc1a9b8

Browse files
committed
Propetly extract usage of Data type from FoundationEssentials.
1 parent c77273e commit fc1a9b8

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed

Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ extension SwiftKnownTypeDeclKind {
125125
.qualified(const: true, volatile: false, type: .void)
126126
)
127127
case .void: .void
128-
case .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, .unsafeBufferPointer, .unsafeMutableBufferPointer, .string, .data, .dataProtocol, .optional:
128+
case .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer,
129+
.unsafeBufferPointer, .unsafeMutableBufferPointer, .string, .data, .dataProtocol, .essentialsData,
130+
.essentialsDataProtocol, .optional:
129131
nil
130132
}
131133
}

Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ enum JNIJavaTypeTranslator {
5050
.unsafePointer, .unsafeMutablePointer,
5151
.unsafeRawBufferPointer, .unsafeMutableRawBufferPointer,
5252
.unsafeBufferPointer, .unsafeMutableBufferPointer,
53-
.optional, .data, .dataProtocol:
53+
.optional, .data, .dataProtocol, .essentialsData, .essentialsDataProtocol:
5454
return nil
5555
}
5656
}

Sources/JExtractSwiftLib/Swift2JavaTranslator.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,10 @@ extension Swift2JavaTranslator {
108108
visitor.visit(sourceFile: input.syntax)
109109
}
110110

111-
// If any API uses 'Foundation.Data', import 'Data' as if it's declared in
112-
// this module.
113-
if let dataDecl = self.symbolTable[.data] {
114-
let dataProtocolDecl = self.symbolTable[.dataProtocol]!
111+
// If any API uses 'Foundation.Data' or 'FoundationEssentials.Data',
112+
// import 'Data' as if it's declared in this module.
113+
if let dataDecl = self.symbolTable[.data] ?? self.symbolTable[.essentialsData] {
114+
let dataProtocolDecl = (self.symbolTable[.dataProtocol] ?? self.symbolTable[.essentialsDataProtocol])!
115115
if self.isUsing(where: { $0 == dataDecl || $0 == dataProtocolDecl }) {
116116
visitor.visit(nominalDecl: dataDecl.syntax!.asNominal!, in: nil)
117117
}

Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownModules.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import SwiftSyntaxBuilder
1818
enum SwiftKnownModule: String {
1919
case swift = "Swift"
2020
case foundation = "Foundation"
21+
case foundationEssentials = "FoundationEssentials"
2122

2223
var name: String {
2324
return self.rawValue
@@ -27,13 +28,15 @@ enum SwiftKnownModule: String {
2728
return switch self {
2829
case .swift: swiftSymbolTable
2930
case .foundation: foundationSymbolTable
31+
case .foundationEssentials: foundationEssentialsSymbolTable
3032
}
3133
}
3234

3335
var sourceFile: SourceFileSyntax {
3436
return switch self {
3537
case .swift: swiftSourceFile
36-
case .foundation: foundationSourceFile
38+
case .foundation: foundationEssentialsSourceFile
39+
case .foundationEssentials: foundationEssentialsSourceFile
3740
}
3841
}
3942
}
@@ -44,6 +47,12 @@ private var swiftSymbolTable: SwiftModuleSymbolTable {
4447
return builder.finalize()
4548
}
4649

50+
private var foundationEssentialsSymbolTable: SwiftModuleSymbolTable {
51+
var builder = SwiftParsedModuleSymbolTableBuilder(moduleName: "FoundationEssentials", importedModules: ["Swift": swiftSymbolTable])
52+
builder.handle(sourceFile: foundationEssentialsSourceFile)
53+
return builder.finalize()
54+
}
55+
4756
private var foundationSymbolTable: SwiftModuleSymbolTable {
4857
var builder = SwiftParsedModuleSymbolTableBuilder(moduleName: "Foundation", importedModules: ["Swift": swiftSymbolTable])
4958
builder.handle(sourceFile: foundationSourceFile)
@@ -87,7 +96,7 @@ private let swiftSourceFile: SourceFileSyntax = """
8796
}
8897
"""
8998

90-
private let foundationSourceFile: SourceFileSyntax = """
99+
private let foundationEssentialsSourceFile: SourceFileSyntax = """
91100
public protocol DataProtocol {}
92101
93102
public struct Data: DataProtocol {
@@ -96,3 +105,9 @@ private let foundationSourceFile: SourceFileSyntax = """
96105
public func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) -> Void)
97106
}
98107
"""
108+
109+
private var foundationSourceFile: SourceFileSyntax {
110+
// On platforms other than Darwin, imports such as FoundationEssentials, FoundationNetworking, etc. are used,
111+
// so this file should be created by combining the files of the aforementioned modules.
112+
foundationEssentialsSourceFile
113+
}

Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypeDecls.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import SwiftSyntax
1616

1717
enum SwiftKnownTypeDeclKind: String, Hashable {
18+
// MARK: -Std
1819
case bool = "Swift.Bool"
1920
case int = "Swift.Int"
2021
case uint = "Swift.UInt"
@@ -40,8 +41,11 @@ enum SwiftKnownTypeDeclKind: String, Hashable {
4041
case void = "Swift.Void"
4142
case string = "Swift.String"
4243

44+
// MARK: -Foundation
4345
case dataProtocol = "Foundation.DataProtocol"
46+
case essentialsDataProtocol = "FoundationEssentials.DataProtocol"
4447
case data = "Foundation.Data"
48+
case essentialsData = "FoundationEssentials.Data"
4549

4650
var moduleAndName: (module: String, name: String) {
4751
let qualified = self.rawValue

0 commit comments

Comments
 (0)