diff --git a/Package.swift b/Package.swift index 3964be48..080d35fe 100644 --- a/Package.swift +++ b/Package.swift @@ -157,6 +157,11 @@ let package = Package( targets: ["CSwiftJavaJNI"] ), + .library( + name: "SwiftJavaConfigurationShared", + targets: ["SwiftJavaConfigurationShared"] + ), + .library( name: "JavaUtil", targets: ["JavaUtil"] @@ -297,7 +302,6 @@ let package = Package( "CSwiftJavaJNI", "SwiftJavaMacros", "JavaTypes", - "SwiftJavaConfigurationShared", // for Configuration reading at runtime ], exclude: ["swift-java.config"], swiftSettings: [ diff --git a/Samples/JavaDependencySampleApp/Package.swift b/Samples/JavaDependencySampleApp/Package.swift index ed88ecb1..a501d157 100644 --- a/Samples/JavaDependencySampleApp/Package.swift +++ b/Samples/JavaDependencySampleApp/Package.swift @@ -111,6 +111,7 @@ let package = Package( name: "JavaDependencySample", dependencies: [ .product(name: "SwiftJava", package: "swift-java"), + .product(name: "SwiftJavaConfigurationShared", package: "swift-java"), .product(name: "CSwiftJavaJNI", package: "swift-java"), .product(name: "JavaUtilFunction", package: "swift-java"), "JavaCommonsCSV" diff --git a/Sources/SwiftJava/String+Extensions.swift b/Sources/SwiftJava/String+Extensions.swift index b87e6a0c..78d5f216 100644 --- a/Sources/SwiftJava/String+Extensions.swift +++ b/Sources/SwiftJava/String+Extensions.swift @@ -12,7 +12,11 @@ // //===----------------------------------------------------------------------===// +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import Foundation +#endif extension String { /// For a String that's of the form java.util.Vector, return the "Vector" part. @@ -30,11 +34,10 @@ extension String { /// Convert a Java class name to its canonical name. /// Replaces `$` with `.` for nested classes but preserves `$` at the start of identifiers. package var javaClassNameToCanonicalName: String { - self.replacingOccurrences( - of: #"(?<=\w)\$"#, - with: ".", - options: .regularExpression - ) + let regex = try! Regex(#"(\w)\$"#, as: (Substring, Substring).self) + return self.replacing(regex) { match in + "\(match.output.1)." + } } /// Whether this is the name of an anonymous class. diff --git a/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift b/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift index 3880ea61..48cbaa47 100644 --- a/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift +++ b/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift @@ -60,7 +60,7 @@ public final class _JNIMethodIDCache: Sendable { fatalError("Cannot get JNI.shared, it should have been initialized by JNI_OnLoad when loading the library") } guard let javaClass = try? jni.applicationClassLoader?.loadClass( - className.replacingOccurrences(of: "/", with: ".") + className.replacing("/", with: ".") ) else { fatalError("Class \(className) could not be found!") }