Skip to content

Commit f16496b

Browse files
sidepelicanktoso
andauthored
Optimize dependencies to reduce runtime binary size (#516)
Co-authored-by: Konrad Malawski <ktoso@apple.com>
1 parent b14ad9b commit f16496b

4 files changed

Lines changed: 15 additions & 7 deletions

File tree

‎Package.swift‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ let package = Package(
157157
targets: ["CSwiftJavaJNI"]
158158
),
159159

160+
.library(
161+
name: "SwiftJavaConfigurationShared",
162+
targets: ["SwiftJavaConfigurationShared"]
163+
),
164+
160165
.library(
161166
name: "JavaUtil",
162167
targets: ["JavaUtil"]
@@ -297,7 +302,6 @@ let package = Package(
297302
"CSwiftJavaJNI",
298303
"SwiftJavaMacros",
299304
"JavaTypes",
300-
"SwiftJavaConfigurationShared", // for Configuration reading at runtime
301305
],
302306
exclude: ["swift-java.config"],
303307
swiftSettings: [

‎Samples/JavaDependencySampleApp/Package.swift‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ let package = Package(
111111
name: "JavaDependencySample",
112112
dependencies: [
113113
.product(name: "SwiftJava", package: "swift-java"),
114+
.product(name: "SwiftJavaConfigurationShared", package: "swift-java"),
114115
.product(name: "CSwiftJavaJNI", package: "swift-java"),
115116
.product(name: "JavaUtilFunction", package: "swift-java"),
116117
"JavaCommonsCSV"

‎Sources/SwiftJava/String+Extensions.swift‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
#if canImport(FoundationEssentials)
16+
import FoundationEssentials
17+
#else
1518
import Foundation
19+
#endif
1620

1721
extension String {
1822
/// For a String that's of the form java.util.Vector, return the "Vector" part.
@@ -30,11 +34,10 @@ extension String {
3034
/// Convert a Java class name to its canonical name.
3135
/// Replaces `$` with `.` for nested classes but preserves `$` at the start of identifiers.
3236
package var javaClassNameToCanonicalName: String {
33-
self.replacingOccurrences(
34-
of: #"(?<=\w)\$"#,
35-
with: ".",
36-
options: .regularExpression
37-
)
37+
let regex = try! Regex(#"(\w)\$"#, as: (Substring, Substring).self)
38+
return self.replacing(regex) { match in
39+
"\(match.output.1)."
40+
}
3841
}
3942

4043
/// Whether this is the name of an anonymous class.

‎Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public final class _JNIMethodIDCache: Sendable {
6060
fatalError("Cannot get JNI.shared, it should have been initialized by JNI_OnLoad when loading the library")
6161
}
6262
guard let javaClass = try? jni.applicationClassLoader?.loadClass(
63-
className.replacingOccurrences(of: "/", with: ".")
63+
className.replacing("/", with: ".")
6464
) else {
6565
fatalError("Class \(className) could not be found!")
6666
}

0 commit comments

Comments
 (0)