Skip to content

Commit b5fb44d

Browse files
committed
Separate out SwiftExcract, a reusable Swift analysis module
This will take a while to finish up but this introduces a new core foundational module called `SwiftExtract` that allows for analysis of swift code into an analysis result that then source generators -- such as swift-java can use. This is to prepare reuse from other language generators, with a strong well maintianed analysis core that swift-java has spearheaded here. This is a massive "move stuff around" so reviewing everyting might be hard but the long term benefit will be massive.
1 parent 0251fb5 commit b5fb44d

65 files changed

Lines changed: 697 additions & 538 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Package.swift

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ let package = Package(
108108
targets: ["SwiftRuntimeFunctions"]
109109
),
110110

111+
.library(
112+
name: "SwiftExtract",
113+
targets: ["SwiftExtract"]
114+
),
115+
111116
.library(
112117
name: "JExtractSwiftLib",
113118
targets: ["JExtractSwiftLib"]
@@ -336,6 +341,30 @@ let package = Package(
336341
]
337342
),
338343

344+
.target(
345+
name: "SwiftExtract",
346+
dependencies: [
347+
.product(name: "SwiftBasicFormat", package: "swift-syntax"),
348+
.product(name: "SwiftIfConfig", package: "swift-syntax"),
349+
.product(name: "SwiftLexicalLookup", package: "swift-syntax"),
350+
.product(name: "SwiftParser", package: "swift-syntax"),
351+
.product(name: "SwiftSyntax", package: "swift-syntax"),
352+
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
353+
.product(name: "Logging", package: "swift-log"),
354+
"SwiftJavaConfigurationShared",
355+
],
356+
path: "Sources/SwiftExtract",
357+
resources: [
358+
.process("Resources")
359+
],
360+
swiftSettings: [
361+
.swiftLanguageMode(.v5)
362+
],
363+
plugins: [
364+
.plugin(name: "_StaticBuildConfigPlugin")
365+
]
366+
),
367+
339368
.target(
340369
name: "JExtractSwiftLib",
341370
dependencies: [
@@ -347,19 +376,14 @@ let package = Package(
347376
.product(name: "ArgumentParser", package: "swift-argument-parser"),
348377
.product(name: "OrderedCollections", package: "swift-collections"),
349378
.product(name: "SwiftJavaJNICore", package: "swift-java-jni-core"),
379+
"SwiftExtract",
350380
"SwiftJavaShared",
351381
"SwiftJavaConfigurationShared",
352382
"CodePrinting",
353383
],
354-
resources: [
355-
.process("Resources")
356-
],
357384
swiftSettings: [
358385
.swiftLanguageMode(.v5),
359386
.enableUpcomingFeature("BareSlashRegexLiterals"),
360-
],
361-
plugins: [
362-
.plugin(name: "_StaticBuildConfigPlugin")
363387
]
364388
),
365389

@@ -435,6 +459,7 @@ let package = Package(
435459
name: "JExtractSwiftTests",
436460
dependencies: [
437461
"JExtractSwiftLib",
462+
"SwiftExtract",
438463
"CodePrinting",
439464
],
440465
swiftSettings: [

Sources/JExtractSwiftLib/AnalysisResult.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

Sources/JExtractSwiftLib/Common/JavaTypeAnnotations.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import SwiftExtract
1516
import SwiftJavaConfigurationShared
1617
import SwiftJavaJNICore
1718

Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import SwiftExtract
1516
import SwiftJavaJNICore
1617

1718
extension JavaType {

Sources/JExtractSwiftLib/Convenience/String+Extensions.swift renamed to Sources/JExtractSwiftLib/Convenience/String+JNIExtensions.swift

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,7 @@
1515
import SwiftJavaJNICore
1616

1717
extension String {
18-
19-
var firstCharacterUppercased: String {
20-
guard let f = first else {
21-
return self
22-
}
23-
24-
return "\(f.uppercased())\(String(dropFirst()))"
25-
}
26-
27-
var firstCharacterLowercased: String {
28-
guard let f = first else {
29-
return self
30-
}
31-
32-
return "\(f.lowercased())\(String(dropFirst()))"
33-
}
34-
35-
/// Returns whether the string is of the format `isX`
36-
var hasJavaBooleanNamingConvention: Bool {
37-
guard self.hasPrefix("is"), self.count > 2 else {
38-
return false
39-
}
40-
41-
let thirdCharacterIndex = self.index(self.startIndex, offsetBy: 2)
42-
return self[thirdCharacterIndex].isUppercase
43-
}
44-
45-
/// Returns a version of the string correctly escaped for a JNI
18+
/// Returns a version of the string correctly escaped for a JNI identifier
4619
var escapedJNIIdentifier: String {
4720
self.map {
4821
if $0 == "_" {
@@ -66,15 +39,6 @@ extension String {
6639
.joined()
6740
}
6841

69-
/// If the string ends with `.swift`, return it without that suffix;
70-
/// otherwise return self unchanged
71-
func dropSwiftFileSuffix() -> String {
72-
if hasSuffix(".swift") {
73-
return String(dropLast(".swift".count))
74-
}
75-
return self
76-
}
77-
7842
/// Looks up self as a SwiftJava wrapped class name and converts it
7943
/// into a `JavaType.class` if it exists in `lookupTable`.
8044
func parseJavaClassFromSwiftJavaName(in lookupTable: [String: String]) -> JavaType? {
@@ -87,14 +51,6 @@ extension String {
8751

8852
return .class(package: javaPackageName, name: javaClassName)
8953
}
90-
91-
/// Unescapes the name if it is surrounded by backticks.
92-
var unescapedSwiftName: String {
93-
if count >= 2 && hasPrefix("`") && hasSuffix("`") {
94-
return String(dropFirst().dropLast())
95-
}
96-
return self
97-
}
9854
}
9955

10056
extension Array where Element == String {

Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import SwiftExtract
16+
1517
extension CType {
1618
/// Lower the given Swift type down to a its corresponding C type.
1719
///

Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import SwiftExtract
1516
import SwiftJavaJNICore
1617
import SwiftSyntax
1718

Sources/JExtractSwiftLib/FFM/ConversionStep.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import SwiftExtract
1516
import SwiftSyntax
1617
import SwiftSyntaxBuilder
1718

Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+FoundationData.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import CodePrinting
16+
import SwiftExtract
1617
import SwiftJavaConfigurationShared
1718
import SwiftJavaJNICore
1819
import SwiftSyntax

Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import CodePrinting
16+
import SwiftExtract
1617
import SwiftJavaConfigurationShared
1718
import SwiftJavaJNICore
1819

0 commit comments

Comments
 (0)