diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 1af4a7f17..e621368ae 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -13,8 +13,7 @@ jobs: with: # Not API stable package (yet) api_breakage_check_enabled: false - # FIXME: Something is off with the format task and it gets "stuck", need to investigate - format_check_enabled: false + format_check_enabled: true license_header_check_project_name: Swift.org # Since we need JAVA_HOME to be set up for building the project and depending on a different workflow won't # give us that, we disable the checking and make a separate job that performs docs validation diff --git a/.swift-format b/.swift-format new file mode 100644 index 000000000..c2a8a313c --- /dev/null +++ b/.swift-format @@ -0,0 +1,63 @@ +{ + "version" : 1, + "indentation" : { + "spaces" : 2 + }, + "tabWidth" : 2, + "fileScopedDeclarationPrivacy" : { + "accessLevel" : "private" + }, + "spacesAroundRangeFormationOperators" : false, + "indentConditionalCompilationBlocks" : false, + "indentSwitchCaseLabels" : false, + "lineBreakAroundMultilineExpressionChainComponents" : false, + "lineBreakBeforeControlFlowKeywords" : false, + "lineBreakBeforeEachArgument" : true, + "lineBreakBeforeEachGenericRequirement" : true, + "lineLength" : 180, + "maximumBlankLines" : 2, + "spacesBeforeEndOfLineComments" : 1, + "respectsExistingLineBreaks" : true, + "prioritizeKeepingFunctionOutputTogether" : true, + "rules" : { + "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : false, + "AlwaysUseLowerCamelCase" : false, + "AmbiguousTrailingClosureOverload" : true, + "BeginDocumentationCommentWithOneLineSummary" : false, + "DoNotUseSemicolons" : true, + "DontRepeatTypeInStaticProperties" : true, + "FileScopedDeclarationPrivacy" : true, + "FullyIndirectEnum" : true, + "GroupNumericLiterals" : true, + "IdentifiersMustBeASCII" : true, + "NeverForceUnwrap" : false, + "NeverUseForceTry" : false, + "NeverUseImplicitlyUnwrappedOptionals" : false, + "NoAccessLevelOnExtensionDeclaration" : true, + "NoAssignmentInExpressions" : true, + "NoBlockComments" : false, + "NoCasesWithOnlyFallthrough" : true, + "NoEmptyTrailingClosureParentheses" : true, + "NoLabelsInCasePatterns" : true, + "NoLeadingUnderscores" : false, + "NoParensAroundConditions" : true, + "NoVoidReturnOnFunctionSignature" : true, + "OmitExplicitReturns" : true, + "OneCasePerLine" : true, + "OneVariableDeclarationPerLine" : true, + "OnlyOneTrailingClosureArgument" : true, + "OrderedImports" : true, + "ReplaceForEachWithForLoop" : true, + "ReturnVoidInsteadOfEmptyTuple" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : false, + "UseLetInEveryBoundCaseVariable" : false, + "UseShorthandTypeNames" : true, + "UseSingleLinePropertyGetter" : false, + "UseSynthesizedInitializer" : false, + "UseTripleSlashForDocumentationComments" : true, + "UseWhereClausesInForLoops" : false, + "ValidateDocumentationComments" : false + } +} diff --git a/Benchmarks/Benchmarks/JavaApiCallBenchmarks/JavaApiCallBenchmarks.swift b/Benchmarks/Benchmarks/JavaApiCallBenchmarks/JavaApiCallBenchmarks.swift index d52d31330..0154c9575 100644 --- a/Benchmarks/Benchmarks/JavaApiCallBenchmarks/JavaApiCallBenchmarks.swift +++ b/Benchmarks/Benchmarks/JavaApiCallBenchmarks/JavaApiCallBenchmarks.swift @@ -14,21 +14,21 @@ import Benchmark import Foundation -import SwiftJava import JavaNet +import SwiftJava @MainActor let benchmarks = { - var jvm: JavaVirtualMachine { - get throws { - try .shared() - } + var jvm: JavaVirtualMachine { + get throws { + try .shared() } - Benchmark("Simple call to Java library") { benchmark in - for _ in benchmark.scaledIterations { - let environment = try jvm.environment() + } + Benchmark("Simple call to Java library") { benchmark in + for _ in benchmark.scaledIterations { + let environment = try jvm.environment() - let urlConnectionClass = try JavaClass(environment: environment) - blackHole(urlConnectionClass.getDefaultAllowUserInteraction()) - } + let urlConnectionClass = try JavaClass(environment: environment) + blackHole(urlConnectionClass.getDefaultAllowUserInteraction()) } + } } diff --git a/Benchmarks/Package.swift b/Benchmarks/Package.swift index c96707e75..9df7b27b3 100644 --- a/Benchmarks/Package.swift +++ b/Benchmarks/Package.swift @@ -1,7 +1,7 @@ // swift-tools-version: 6.0 -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -58,13 +58,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -76,12 +78,12 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( diff --git a/Package.swift b/Package.swift index 080d35fe3..9c1808ae0 100644 --- a/Package.swift +++ b/Package.swift @@ -2,9 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription - import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -28,9 +27,10 @@ func findJavaHome() -> String { return home } - + if let home = getJavaHomeFromLibexecJavaHome(), - !home.isEmpty { + !home.isEmpty + { return home } @@ -42,8 +42,9 @@ func findJavaHome() -> String { return home } - - if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1" && ProcessInfo.processInfo.environment["SPI_BUILD"] == nil { + if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1" + && ProcessInfo.processInfo.environment["SPI_BUILD"] == nil + { // Just ignore that we're missing a JAVA_HOME when building in Swift Package Index during general processing where no Java is needed. However, do _not_ suppress the error during SPI's compatibility build stage where Java is required. return "" } @@ -52,40 +53,40 @@ func findJavaHome() -> String { /// On MacOS we can use the java_home tool as a fallback if we can't find JAVA_HOME environment variable. func getJavaHomeFromLibexecJavaHome() -> String? { - let task = Process() - task.executableURL = URL(fileURLWithPath: "/usr/libexec/java_home") + let task = Process() + task.executableURL = URL(fileURLWithPath: "/usr/libexec/java_home") - // Check if the executable exists before trying to run it - guard FileManager.default.fileExists(atPath: task.executableURL!.path) else { - print("/usr/libexec/java_home does not exist") - return nil - } + // Check if the executable exists before trying to run it + guard FileManager.default.fileExists(atPath: task.executableURL!.path) else { + print("/usr/libexec/java_home does not exist") + return nil + } + + let pipe = Pipe() + task.standardOutput = pipe + task.standardError = pipe // Redirect standard error to the same pipe for simplicity - let pipe = Pipe() - task.standardOutput = pipe - task.standardError = pipe // Redirect standard error to the same pipe for simplicity - - do { - try task.run() - task.waitUntilExit() - - let data = pipe.fileHandleForReading.readDataToEndOfFile() - let output = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines) - - if task.terminationStatus == 0 { - return output - } else { - print("java_home terminated with status: \(task.terminationStatus)") - // Optionally, log the error output for debugging - if let errorOutput = String(data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) { - print("Error output: \(errorOutput)") - } - return nil - } - } catch { - print("Error running java_home: \(error)") - return nil + do { + try task.run() + task.waitUntilExit() + + let data = pipe.fileHandleForReading.readDataToEndOfFile() + let output = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines) + + if task.terminationStatus == 0 { + return output + } else { + print("java_home terminated with status: \(task.terminationStatus)") + // Optionally, log the error output for debugging + if let errorOutput = String(data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) { + print("Error output: \(errorOutput)") + } + return nil } + } catch { + print("Error running java_home: \(error)") + return nil + } } func getJavaHomeFromSDKMAN() -> String? { @@ -113,13 +114,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -132,11 +135,11 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #elseif os(Windows) - let javaPlatformIncludePath = "\(javaIncludePath)/win32" +let javaPlatformIncludePath = "\(javaIncludePath)/win32" #endif let package = Package( @@ -201,8 +204,7 @@ let package = Package( name: "swift-java", targets: ["SwiftJavaTool"] ), - - + .library( name: "SwiftJavaDocumentation", targets: ["SwiftJavaDocumentation"] @@ -278,7 +280,7 @@ let package = Package( "SwiftRuntimeFunctions", ] ), - + .macro( name: "SwiftJavaMacros", dependencies: [ @@ -306,7 +308,10 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])), + .unsafeFlags( + ["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], + .when(platforms: [.macOS, .linux, .windows]) + ), .unsafeFlags(["-Xfrontend", "-sil-verify-none"], .when(configuration: .release)), // Workaround for https://github.com/swiftlang/swift/issues/84899 ], linkerSettings: [ @@ -322,7 +327,8 @@ let package = Package( [ "-L\(javaHome)/lib" ], - .when(platforms: [.windows])), + .when(platforms: [.windows]) + ), .linkedLibrary( "jvm", .when(platforms: [.linux, .macOS, .windows]) @@ -336,7 +342,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( @@ -346,7 +352,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( @@ -356,7 +362,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( @@ -366,7 +372,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( @@ -376,7 +382,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( @@ -386,7 +392,7 @@ let package = Package( exclude: ["swift-java.config"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -408,18 +414,18 @@ let package = Package( dependencies: [], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), .target( name: "SwiftJavaRuntimeSupport", dependencies: [ "CSwiftJavaJNI", - "SwiftJava" + "SwiftJava", ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -427,7 +433,7 @@ let package = Package( name: "SwiftRuntimeFunctions", swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -435,7 +441,10 @@ let package = Package( name: "CSwiftJavaJNI", swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])) + .unsafeFlags( + ["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], + .when(platforms: [.macOS, .linux, .windows]) + ), ], linkerSettings: [ .linkedLibrary("log", .when(platforms: [.android])) @@ -465,7 +474,7 @@ let package = Package( "JavaTypes", "SwiftJavaShared", "SwiftJavaConfigurationShared", - .product(name: "Subprocess", package: "swift-subprocess") + .product(name: "Subprocess", package: "swift-subprocess"), ], swiftSettings: [ .swiftLanguageMode(.v5), @@ -496,7 +505,8 @@ let package = Package( .enableUpcomingFeature("BareSlashRegexLiterals"), .define( "SYSTEM_PACKAGE_DARWIN", - .when(platforms: [.macOS, .macCatalyst, .iOS, .watchOS, .tvOS, .visionOS])), + .when(platforms: [.macOS, .macCatalyst, .iOS, .watchOS, .tvOS, .visionOS]) + ), .define("SYSTEM_PACKAGE"), ] ), @@ -531,12 +541,12 @@ let package = Package( .testTarget( name: "SwiftJavaTests", dependencies: [ - "SwiftJava", - "JavaNet" + "SwiftJava", + "JavaNet", ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -568,7 +578,7 @@ let package = Package( ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -577,7 +587,7 @@ let package = Package( dependencies: ["SwiftJavaConfigurationShared"], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), @@ -588,8 +598,8 @@ let package = Package( ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] - ) + ), ] ) diff --git a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift index 4ac1a4e5d..5b4a89c38 100644 --- a/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift +++ b/Plugins/JExtractSwiftPlugin/JExtractSwiftPlugin.swift @@ -15,7 +15,7 @@ import Foundation import PackagePlugin -fileprivate let SwiftJavaConfigFileName = "swift-java.config" +private let SwiftJavaConfigFileName = "swift-java.config" @main struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { @@ -30,11 +30,10 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { guard let sourceModule = target.sourceModule else { return [] } - // Note: Target doesn't have a directoryURL counterpart to directory, // so we cannot eliminate this deprecation warning. for dependency in target.dependencies { - switch (dependency) { + switch dependency { case .target(let t): t.sourceModule case .product(let p): @@ -78,7 +77,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { let (moduleName, configFile) = moduleAndConfigFile return [ "--depends-on", - "\(moduleName)=\(configFile.path(percentEncoded: false))" + "\(moduleName)=\(configFile.path(percentEncoded: false))", ] } arguments += dependentConfigFilesArguments @@ -114,17 +113,20 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { outputSwiftDirectory.appending(path: "Foundation+SwiftJava.swift") ] - print("[swift-java-plugin] Output swift files:\n - \(outputSwiftFiles.map({$0.absoluteString}).joined(separator: "\n - "))") + print( + "[swift-java-plugin] Output swift files:\n - \(outputSwiftFiles.map({$0.absoluteString}).joined(separator: "\n - "))" + ) var jextractOutputFiles = outputSwiftFiles // If the developer has enabled java callbacks in the configuration (default is false) // and we are running in JNI mode, we will run additional phases in this build plugin // to generate Swift wrappers using wrap-java that can be used to callback to Java. - let shouldRunJavaCallbacksPhases = - if let configuration, - configuration.enableJavaCallbacks == true, - configuration.effectiveMode == .jni { + let shouldRunJavaCallbacksPhases = + if let configuration, + configuration.enableJavaCallbacks == true, + configuration.effectiveMode == .jni + { true } else { false @@ -135,7 +137,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { let javaSourcesFile = outputJavaDirectory.appending(path: javaSourcesListFileName) if shouldRunJavaCallbacksPhases { arguments += [ - "--generated-java-sources-list-file-output", javaSourcesListFileName + "--generated-java-sources-list-file-output", javaSourcesListFileName, ] jextractOutputFiles += [javaSourcesFile] } @@ -145,7 +147,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { displayName: "Generate Java wrappers for Swift types", executable: toolURL, arguments: arguments, - inputFiles: [ configFile ] + swiftFiles, + inputFiles: [configFile] + swiftFiles, outputFiles: jextractOutputFiles ) ] @@ -181,8 +183,9 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { gradlewEnvironment[GradleUserHome] = gradleUserHomePath log("Forward environment: \(gradlewEnvironment)") - let gradleExecutable = findExecutable(name: "gradle") ?? // try using installed 'gradle' if available in PATH - swiftJavaDirectory.appending(path: "gradlew") // fallback to calling ./gradlew if gradle is not installed + let gradleExecutable = + findExecutable(name: "gradle") // try using installed 'gradle' if available in PATH + ?? swiftJavaDirectory.appending(path: "gradlew") // fallback to calling ./gradlew if gradle is not installed log("Detected 'gradle' executable (or gradlew fallback): \(gradleExecutable)") commands += [ @@ -192,9 +195,9 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { arguments: [ ":SwiftKitCore:build", "--project-dir", swiftJavaDirectory.path(percentEncoded: false), - "--gradle-user-home", gradleUserHomePath, + "--gradle-user-home", gradleUserHomePath, "--configure-on-demand", - "--no-daemon" + "--no-daemon", ], environment: gradlewEnvironment, inputFiles: [swiftJavaDirectory], @@ -208,14 +211,15 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { commands += [ .buildCommand( displayName: "Build extracted Java sources", - executable: javaHome + executable: + javaHome .appending(path: "bin") .appending(path: self.javacName), arguments: [ "@\(javaSourcesFile.path(percentEncoded: false))", "-d", javaCompiledClassesURL.path(percentEncoded: false), "-parameters", - "-classpath", swiftKitCoreClassPath.path(percentEncoded: false) + "-classpath", swiftKitCoreClassPath.path(percentEncoded: false), ], inputFiles: [javaSourcesFile, swiftKitCoreClassPath], outputFiles: [javaCompiledClassesURL] @@ -234,7 +238,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { "--output-directory", context.pluginWorkDirectoryURL.path(percentEncoded: false), "--cp", javaCompiledClassesURL.path(percentEncoded: false), "--swift-module", sourceModule.name, - "--swift-type-prefix", "Java" + "--swift-type-prefix", "Java", ], inputFiles: [javaCompiledClassesURL], outputFiles: [swiftJavaConfigURL] @@ -250,7 +254,7 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { "--output-directory", outputSwiftDirectory.path(percentEncoded: false), "--config", swiftJavaConfigURL.path(percentEncoded: false), "--cp", swiftKitCoreClassPath.path(percentEncoded: false), - "--single-swift-file-output", singleSwiftFileOutputName + "--single-swift-file-output", singleSwiftFileOutputName, ] // Add any dependent config files as arguments @@ -270,11 +274,11 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { } var javacName: String { -#if os(Windows) + #if os(Windows) "javac.exe" -#else + #else "javac" -#endif + #endif } /// Find the manifest files from other swift-java executions in any targets @@ -287,9 +291,11 @@ struct JExtractSwiftBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { let dependencyURL = URL(filePath: target.directory.string) // Look for a config file within this target. - let dependencyConfigURL = dependencyURL + let dependencyConfigURL = + dependencyURL .appending(path: SwiftJavaConfigFileName) - let dependencyConfigString = dependencyConfigURL + let dependencyConfigString = + dependencyConfigURL .path(percentEncoded: false) if FileManager.default.fileExists(atPath: dependencyConfigString) { diff --git a/Plugins/JavaCompilerPlugin/JavaCompilerPlugin.swift b/Plugins/JavaCompilerPlugin/JavaCompilerPlugin.swift index 93c358df0..6d9dc1aff 100644 --- a/Plugins/JavaCompilerPlugin/JavaCompilerPlugin.swift +++ b/Plugins/JavaCompilerPlugin/JavaCompilerPlugin.swift @@ -68,15 +68,16 @@ struct JavaCompilerBuildToolPlugin: BuildToolPlugin { let javaHome = URL(filePath: findJavaHome()) let javaClassFileURL = context.pluginWorkDirectoryURL .appending(path: "Java") - #if os(Windows) + #if os(Windows) let javac = "javac.exe" - #else + #else let javac = "javac" - #endif + #endif return [ .buildCommand( displayName: "Compiling \(javaFiles.count) Java files for target \(sourceModule.name) to \(javaClassFileURL)", - executable: javaHome + executable: + javaHome .appending(path: "bin") .appending(path: javac), arguments: javaFiles.map { $0.path } + [ diff --git a/Plugins/PluginsShared/PluginUtils.swift b/Plugins/PluginsShared/PluginUtils.swift index 8f451655d..13e3d65e0 100644 --- a/Plugins/PluginsShared/PluginUtils.swift +++ b/Plugins/PluginsShared/PluginUtils.swift @@ -111,13 +111,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path diff --git a/Plugins/PluginsShared/SwiftJavaPluginProtocol.swift b/Plugins/PluginsShared/SwiftJavaPluginProtocol.swift index 89aa483e9..98ae39c2c 100644 --- a/Plugins/PluginsShared/SwiftJavaPluginProtocol.swift +++ b/Plugins/PluginsShared/SwiftJavaPluginProtocol.swift @@ -15,7 +15,7 @@ protocol SwiftJavaPluginProtocol { var verbose: Bool { get } var pluginName: String { get } - + func log(_ message: @autoclosure () -> String, terminator: String) } @@ -23,7 +23,7 @@ extension SwiftJavaPluginProtocol { func log(_ message: @autoclosure () -> String, terminator: String = "\n") { print("[\(pluginName)] \(message())", terminator: terminator) } - + func warn(_ message: @autoclosure () -> String, terminator: String = "\n") { print("[\(pluginName)][warning] \(message())", terminator: terminator) } diff --git a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift index 33f8f4694..bc0e78310 100644 --- a/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift +++ b/Plugins/SwiftJavaPlugin/SwiftJavaPlugin.swift @@ -15,21 +15,21 @@ import Foundation import PackagePlugin -fileprivate let SwiftJavaConfigFileName = "swift-java.config" +private let SwiftJavaConfigFileName = "swift-java.config" @main struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { var pluginName: String = "swift-java" var verbose: Bool = getEnvironmentBool("SWIFT_JAVA_VERBOSE") - + func createBuildCommands(context: PluginContext, target: Target) throws -> [Command] { log("Create build commands for target '\(target.name)'") guard let sourceModule = target.sourceModule else { return [] } let executable = try context.tool(named: "SwiftJavaTool").url var commands: [Command] = [] - + // Note: Target doesn't have a directoryURL counterpart to directory, // so we cannot eliminate this deprecation warning. let sourceDir = target.directory.string @@ -52,9 +52,11 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { let dependencyURL = URL(filePath: target.directory.string) // Look for a config file within this target. - let dependencyConfigURL = dependencyURL + let dependencyConfigURL = + dependencyURL .appending(path: SwiftJavaConfigFileName) - let dependencyConfigString = dependencyConfigURL + let dependencyConfigString = + dependencyConfigURL .path(percentEncoded: false) if FileManager.default.fileExists(atPath: dependencyConfigString) { @@ -102,10 +104,10 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { let swiftNestedName = swiftName.replacingOccurrences(of: ".", with: "+") return outputDirectoryGenerated.appending(path: "\(swiftNestedName).swift") } - + arguments += [ "--cache-directory", - context.pluginWorkDirectoryURL.path(percentEncoded: false) + context.pluginWorkDirectoryURL.path(percentEncoded: false), ] // Find the Java .class files generated from prior plugins. @@ -133,13 +135,14 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { classFile.deleteLastPathComponent() } - let className = classNameComponents + let className = + classNameComponents .reversed() .joined(separator: ".") arguments += ["--swift-native-implementation", className] } } - + var fetchDependenciesOutputFiles: [URL] = [] if let dependencies = config.dependencies, !dependencies.isEmpty { let displayName = "Fetch (Java) dependencies for Swift target \(sourceModule.name)" @@ -164,7 +167,7 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { } else { log("No dependencies to fetch for target \(sourceModule.name)") } - + // Add all the core Java stdlib modules as --depends-on let javaStdlibModules = getExtractedJavaStdlibModules() log("Include Java standard library SwiftJava modules: \(javaStdlibModules)") @@ -183,7 +186,7 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { executable: executable, arguments: ["wrap-java"] + arguments, - inputFiles: compiledClassFiles + fetchDependenciesOutputFiles + [ configFile ], + inputFiles: compiledClassFiles + fetchDependenciesOutputFiles + [configFile], outputFiles: outputSwiftFiles ) ] @@ -199,8 +202,8 @@ struct SwiftJavaBuildToolPlugin: SwiftJavaPluginProtocol, BuildToolPlugin { extension SwiftJavaBuildToolPlugin { func argumentsSwiftModule(sourceModule: Target) -> [String] { - return [ - "--swift-module", sourceModule.name + [ + "--swift-module", sourceModule.name, ] } @@ -208,15 +211,15 @@ extension SwiftJavaBuildToolPlugin { // since we cannot have the same option in common options and in the top level // command from which we get into sub commands. The top command will NOT have this option. func argumentsSwiftModuleDeprecated(sourceModule: Target) -> [String] { - return [ - "--swift-module-deprecated", sourceModule.name + [ + "--swift-module-deprecated", sourceModule.name, ] } func argumentsOutputDirectory(context: PluginContext, generated: Bool = true) -> [String] { - return [ + [ "--output-directory", - outputDirectory(context: context, generated: generated).path(percentEncoded: false) + outputDirectory(context: context, generated: generated).path(percentEncoded: false), ] } @@ -225,7 +228,7 @@ extension SwiftJavaBuildToolPlugin { let (moduleName, configFile) = moduleAndConfigFile return [ "--depends-on", - "\(moduleName)=\(configFile.path(percentEncoded: false))" + "\(moduleName)=\(configFile.path(percentEncoded: false))", ] } } @@ -238,7 +241,7 @@ extension SwiftJavaBuildToolPlugin { return dir } } - + func outputFilePath(context: PluginContext, generated: Bool, filename: String) -> URL { outputDirectory(context: context, generated: generated).appending(path: filename) } @@ -253,13 +256,17 @@ extension SwiftJavaBuildToolPlugin { .appendingPathComponent("Sources") .appendingPathComponent("JavaStdlib") - guard let stdlibDirContents = try? fileManager.contentsOfDirectory( - at: sourcesPath, - includingPropertiesForKeys: [.isDirectoryKey], - options: [.skipsHiddenFiles] - ) else { - warn("Unable to find Java standard library Swift wrappers! Expected \(sourcesPath) to exist." + - "May be unable to wrap-java types involving Java standard library types.") + guard + let stdlibDirContents = try? fileManager.contentsOfDirectory( + at: sourcesPath, + includingPropertiesForKeys: [.isDirectoryKey], + options: [.skipsHiddenFiles] + ) + else { + warn( + "Unable to find Java standard library Swift wrappers! Expected \(sourcesPath) to exist." + + "May be unable to wrap-java types involving Java standard library types." + ) return [] } @@ -269,10 +276,11 @@ extension SwiftJavaBuildToolPlugin { warn("Expected JavaStdlib directory \(url) to contain swift-java.config but it was missing!") return nil } - + guard let resourceValues = try? url.resourceValues(forKeys: [.isDirectoryKey]), - let isDirectory = resourceValues.isDirectory, - isDirectory else { + let isDirectory = resourceValues.isDirectory, + isDirectory + else { return nil } return url.lastPathComponent diff --git a/Samples/JavaDependencySampleApp/Package.swift b/Samples/JavaDependencySampleApp/Package.swift index a501d157d..c328a6571 100644 --- a/Samples/JavaDependencySampleApp/Package.swift +++ b/Samples/JavaDependencySampleApp/Package.swift @@ -2,8 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -60,13 +60,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -78,12 +80,12 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( @@ -99,7 +101,7 @@ let package = Package( .executable( name: "JavaDependencySample", targets: ["JavaDependencySample"] - ), + ) ], dependencies: [ @@ -114,7 +116,7 @@ let package = Package( .product(name: "SwiftJavaConfigurationShared", package: "swift-java"), .product(name: "CSwiftJavaJNI", package: "swift-java"), .product(name: "JavaUtilFunction", package: "swift-java"), - "JavaCommonsCSV" + "JavaCommonsCSV", ], exclude: ["swift-java.config"], swiftSettings: [ @@ -122,7 +124,7 @@ let package = Package( .swiftLanguageMode(.v5), ], plugins: [ - .plugin(name: "SwiftJavaPlugin", package: "swift-java"), + .plugin(name: "SwiftJavaPlugin", package: "swift-java") ] ), @@ -141,8 +143,8 @@ let package = Package( .swiftLanguageMode(.v5), ], plugins: [ -// .plugin(name: "SwiftJavaBootstrapJavaPlugin", package: "swift-java"), - .plugin(name: "SwiftJavaPlugin", package: "swift-java"), + // .plugin(name: "SwiftJavaBootstrapJavaPlugin", package: "swift-java"), + .plugin(name: "SwiftJavaPlugin", package: "swift-java") ] ), diff --git a/Samples/JavaDependencySampleApp/Sources/JavaDependencySample/main.swift b/Samples/JavaDependencySampleApp/Sources/JavaDependencySample/main.swift index 13ea6eed3..64088d31a 100644 --- a/Samples/JavaDependencySampleApp/Sources/JavaDependencySample/main.swift +++ b/Samples/JavaDependencySampleApp/Sources/JavaDependencySample/main.swift @@ -12,14 +12,13 @@ // //===----------------------------------------------------------------------===// -import SwiftJava -import JavaUtilFunction -import JavaIO -import SwiftJavaConfigurationShared import Foundation - // Import the commons-csv library wrapper: import JavaCommonsCSV +import JavaIO +import JavaUtilFunction +import SwiftJava +import SwiftJavaConfigurationShared print("") print("") diff --git a/Samples/JavaKitSampleApp/Package.swift b/Samples/JavaKitSampleApp/Package.swift index 2e312c2c4..5b3b749c1 100644 --- a/Samples/JavaKitSampleApp/Package.swift +++ b/Samples/JavaKitSampleApp/Package.swift @@ -2,8 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -60,13 +60,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -78,11 +80,11 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #elseif os(Windows) - let javaPlatformIncludePath = "\(javaIncludePath)/win32)" +let javaPlatformIncludePath = "\(javaIncludePath)/win32)" #endif let package = Package( @@ -99,7 +101,7 @@ let package = Package( name: "JavaKitExample", type: .dynamic, targets: ["JavaKitExample"] - ), + ) ], dependencies: [ @@ -116,14 +118,14 @@ let package = Package( ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ], plugins: [ .plugin(name: "JavaCompilerPlugin", package: "swift-java"), .plugin(name: "SwiftJavaPlugin", package: "swift-java"), ] ), - + .testTarget( name: "JavaKitExampleTests", dependencies: [ @@ -131,7 +133,7 @@ let package = Package( ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ] ), ] diff --git a/Samples/JavaKitSampleApp/Sources/JavaKitExample/JavaKitExample.swift b/Samples/JavaKitSampleApp/Sources/JavaKitExample/JavaKitExample.swift index 44f811d30..4fa5c9d00 100644 --- a/Samples/JavaKitSampleApp/Sources/JavaKitExample/JavaKitExample.swift +++ b/Samples/JavaKitSampleApp/Sources/JavaKitExample/JavaKitExample.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import JavaUtilFunction +import SwiftJava enum SwiftWrappedError: Error { case message(String) diff --git a/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitExampleRuntimeTests.swift b/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitExampleRuntimeTests.swift index c43bd4b64..2674a02db 100644 --- a/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitExampleRuntimeTests.swift +++ b/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitExampleRuntimeTests.swift @@ -13,9 +13,8 @@ //===----------------------------------------------------------------------===// import JavaKitExample - -import SwiftJava import JavaUtilFunction +import SwiftJava import Testing @Suite @@ -28,24 +27,24 @@ struct JavaKitExampleRuntimeTests { let env = try jvm.environment() let helper = ThreadSafeHelperClass(environment: env) - + let text: JavaString? = helper.textOptional #expect(#"Optional("cool string")"# == String(describing: Optional("cool string"))) #expect(#"Optional("cool string")"# == String(describing: text)) // let defaultValue: String? = helper.getOrElse(JavaOptional.empty()) // #expect(#"Optional("or else value")"# == String(describing: defaultValue)) - + let noneValue: JavaOptional = helper.getNil()! #expect(noneValue.isPresent() == false) #expect("\(noneValue)" == "SwiftJava.JavaOptional") - + let textFunc: JavaString? = helper.getTextOptional() #expect(#"Optional("cool string")"# == String(describing: textFunc)) - + let doubleOpt: Double? = helper.valOptional #expect(#"Optional(2.0)"# == String(describing: doubleOpt)) - + let longOpt: Int64? = helper.fromOptional(21 as Int32?) #expect(#"Optional(21)"# == String(describing: longOpt)) } @@ -55,7 +54,7 @@ struct JavaKitExampleRuntimeTests { let env = try jvm.environment() let hello = HelloSwift(environment: env) - + let reply = hello.`init`(128) #expect(reply == 128) } diff --git a/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitSampleJVM.swift b/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitSampleJVM.swift index 129575c4b..cfc690e2d 100644 --- a/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitSampleJVM.swift +++ b/Samples/JavaKitSampleApp/Tests/JavaKitExampleTests/JavaKitSampleJVM.swift @@ -13,23 +13,22 @@ //===----------------------------------------------------------------------===// import JavaKitExample - -import SwiftJava import JavaUtilFunction +import SwiftJava -/// Utility to configure the classpath and native libraries paths for writing tests against +/// Utility to configure the classpath and native libraries paths for writing tests against /// classes defined in this JavaKitExample project struct JavaKitSampleJVM { static var shared: JavaVirtualMachine = { try! JavaVirtualMachine.shared( classpath: [ - ".build/plugins/outputs/javakitsampleapp/JavaKitExample/destination/JavaCompilerPlugin/Java", + ".build/plugins/outputs/javakitsampleapp/JavaKitExample/destination/JavaCompilerPlugin/Java" ], vmOptions: [ - KnownJavaVMOptions.javaLibraryPath(".build/\(SwiftPlatform.debugOrRelease)/"), + KnownJavaVMOptions.javaLibraryPath(".build/\(SwiftPlatform.debugOrRelease)/") ] ) }() -} \ No newline at end of file +} diff --git a/Samples/JavaProbablyPrime/Package.swift b/Samples/JavaProbablyPrime/Package.swift index 3ebf8fcb5..424c5bb20 100644 --- a/Samples/JavaProbablyPrime/Package.swift +++ b/Samples/JavaProbablyPrime/Package.swift @@ -17,7 +17,7 @@ let package = Package( .executable( name: "JavaProbablyPrime", targets: ["JavaProbablyPrime"] - ), + ) ], dependencies: [ @@ -37,8 +37,8 @@ let package = Package( .swiftLanguageMode(.v5) ], plugins: [ - .plugin(name: "SwiftJavaPlugin", package: "swift-java"), + .plugin(name: "SwiftJavaPlugin", package: "swift-java") ] - ), + ) ] ) diff --git a/Samples/JavaSieve/Package.swift b/Samples/JavaSieve/Package.swift index 6efcb2ed8..2cb69c6c5 100644 --- a/Samples/JavaSieve/Package.swift +++ b/Samples/JavaSieve/Package.swift @@ -1,8 +1,8 @@ // swift-tools-version: 6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -59,13 +59,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -77,57 +79,57 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( - name: "JavaSieve", - platforms: [ - .macOS(.v15), - .iOS(.v18), - .watchOS(.v11), - .tvOS(.v18), - ], - dependencies: [ - .package(name: "swift-java", path: "../../"), - ], - targets: [ - .target( - name: "JavaMath", - dependencies: [ - .product(name: "SwiftJava", package: "swift-java"), - .product(name: "JavaUtilJar", package: "swift-java"), - ], - exclude: ["swift-java.config"], - swiftSettings: [ - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) - ], - plugins: [ - .plugin(name: "SwiftJavaPlugin", package: "swift-java"), - ] - ), - - // Targets are the basic building blocks of a package, defining a module or a test suite. - // Targets can depend on other targets in this package and products from dependencies. - .executableTarget( - name: "JavaSieve", - dependencies: [ - "JavaMath", - .product(name: "SwiftJava", package: "swift-java"), - .product(name: "JavaUtil", package: "swift-java"), - ], - exclude: ["swift-java.config"], - swiftSettings: [ - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) - ], - plugins: [ - .plugin(name: "SwiftJavaPlugin", package: "swift-java"), - ] - ), - ] + name: "JavaSieve", + platforms: [ + .macOS(.v15), + .iOS(.v18), + .watchOS(.v11), + .tvOS(.v18), + ], + dependencies: [ + .package(name: "swift-java", path: "../../") + ], + targets: [ + .target( + name: "JavaMath", + dependencies: [ + .product(name: "SwiftJava", package: "swift-java"), + .product(name: "JavaUtilJar", package: "swift-java"), + ], + exclude: ["swift-java.config"], + swiftSettings: [ + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + ], + plugins: [ + .plugin(name: "SwiftJavaPlugin", package: "swift-java") + ] + ), + + // Targets are the basic building blocks of a package, defining a module or a test suite. + // Targets can depend on other targets in this package and products from dependencies. + .executableTarget( + name: "JavaSieve", + dependencies: [ + "JavaMath", + .product(name: "SwiftJava", package: "swift-java"), + .product(name: "JavaUtil", package: "swift-java"), + ], + exclude: ["swift-java.config"], + swiftSettings: [ + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + ], + plugins: [ + .plugin(name: "SwiftJavaPlugin", package: "swift-java") + ] + ), + ] ) diff --git a/Samples/JavaSieve/Sources/JavaSieve/main.swift b/Samples/JavaSieve/Sources/JavaSieve/main.swift index 470ee5c79..204c9153b 100644 --- a/Samples/JavaSieve/Sources/JavaSieve/main.swift +++ b/Samples/JavaSieve/Sources/JavaSieve/main.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import JavaMath +import SwiftJava let jvm = try JavaVirtualMachine.shared() diff --git a/Samples/SwiftAndJavaJarSampleLib/Package.swift b/Samples/SwiftAndJavaJarSampleLib/Package.swift index bcfde3e67..88a0dd590 100644 --- a/Samples/SwiftAndJavaJarSampleLib/Package.swift +++ b/Samples/SwiftAndJavaJarSampleLib/Package.swift @@ -2,8 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -60,13 +60,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -78,12 +80,12 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( @@ -99,11 +101,11 @@ let package = Package( name: "MySwiftLibrary", type: .dynamic, targets: ["MySwiftLibrary"] - ), + ) ], dependencies: [ - .package(name: "swift-java", path: "../../"), + .package(name: "swift-java", path: "../../") ], targets: [ .target( @@ -111,18 +113,18 @@ let package = Package( dependencies: [ .product(name: "SwiftJava", package: "swift-java"), .product(name: "CSwiftJavaJNI", package: "swift-java"), - .product(name: "SwiftRuntimeFunctions", package: "swift-java") + .product(name: "SwiftRuntimeFunctions", package: "swift-java"), ], exclude: [ - "swift-java.config", + "swift-java.config" ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ], plugins: [ - .plugin(name: "JExtractSwiftPlugin", package: "swift-java"), + .plugin(name: "JExtractSwiftPlugin", package: "swift-java") ] - ), + ) ] ) diff --git a/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftClass.swift b/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftClass.swift index 615873ea6..41fb0ea2f 100644 --- a/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftClass.swift +++ b/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftClass.swift @@ -45,14 +45,14 @@ public class MySwiftClass { } public func echoIntMethod(i: Int) -> Int { - return i + i } public func makeIntMethod() -> Int { - return 12 + 12 } public func makeRandomIntMethod() -> Int { - return Int.random(in: 1..<256) + Int.random(in: 1..<256) } -} \ No newline at end of file +} diff --git a/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftLibrary.swift b/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftLibrary.swift index f60036c81..4a06c91fc 100644 --- a/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftLibrary.swift +++ b/Samples/SwiftAndJavaJarSampleLib/Sources/MySwiftLibrary/MySwiftLibrary.swift @@ -32,7 +32,7 @@ public func globalTakeInt(i: Int) { public func globalTakeIntInt(i: Int, j: Int) { } -public func globalCallMeRunnable(run: () -> ()) { +public func globalCallMeRunnable(run: () -> Void) { run() } @@ -42,4 +42,3 @@ func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: Stri print("[swift][\(file):\(line)](\(function)) \(msg)") fflush(stdout) } - diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Package.swift b/Samples/SwiftJavaExtractFFMSampleApp/Package.swift index 2b7abbd65..6a86ffbb9 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Package.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Package.swift @@ -2,8 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -60,13 +60,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -78,12 +80,12 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( @@ -99,11 +101,11 @@ let package = Package( name: "MySwiftLibrary", type: .dynamic, targets: ["MySwiftLibrary"] - ), + ) ], dependencies: [ - .package(name: "swift-java", path: "../../"), + .package(name: "swift-java", path: "../../") ], targets: [ .target( @@ -114,15 +116,15 @@ let package = Package( .product(name: "SwiftRuntimeFunctions", package: "swift-java"), ], exclude: [ - "swift-java.config", + "swift-java.config" ], swiftSettings: [ .swiftLanguageMode(.v5), - .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]) + .unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"]), ], plugins: [ - .plugin(name: "JExtractSwiftPlugin", package: "swift-java"), + .plugin(name: "JExtractSwiftPlugin", package: "swift-java") ] - ), + ) ] ) diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/Data.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/Data.swift index 5ebee848d..12295fffe 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/Data.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/Data.swift @@ -19,17 +19,17 @@ import Foundation #endif public func echoData(_ data: Data) -> Data { - return data + data } public func makeData() -> Data { - return Data([0x01, 0x02, 0x03, 0x04]) + Data([0x01, 0x02, 0x03, 0x04]) } public func getDataCount(_ data: Data) -> Int { - return data.count + data.count } public func compareData(_ data1: Data, _ data2: Data) -> Bool { - return data1 == data2 + data1 == data2 } diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/LibrarySubDirectory/SwiftTypeInSubDirectory.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/LibrarySubDirectory/SwiftTypeInSubDirectory.swift index e03eab0bc..520c8c54e 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/LibrarySubDirectory/SwiftTypeInSubDirectory.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/LibrarySubDirectory/SwiftTypeInSubDirectory.swift @@ -18,4 +18,4 @@ public final class SwiftTypeInSubDirectory { public func hello() -> Int { 12 } -} \ No newline at end of file +} diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift index 234cb357e..5b2ea2cf1 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -// This file exists to exercise the swiftpm plugin generating separate output Java files +// This file exists to exercise the swiftpm plugin generating separate output Java files // for the public types; because Java public types must be in a file with the same name as the type. public struct PublicTypeOne { @@ -20,7 +20,7 @@ public struct PublicTypeOne { public func test() {} } -public struct PublicTypeTwo { +public struct PublicTypeTwo { public init() {} public func test() {} -} \ No newline at end of file +} diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftClass.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftClass.swift index bbac8038a..b1a4e4899 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftClass.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftClass.swift @@ -29,7 +29,7 @@ public class MySwiftClass { public var counter: Int32 = 0 public static func factory(len: Int, cap: Int) -> MySwiftClass { - return MySwiftClass(len: len, cap: cap) + MySwiftClass(len: len, cap: cap) } public func voidMethod() { @@ -39,15 +39,15 @@ public class MySwiftClass { } public func echoIntMethod(i: Int) -> Int { - return i + i } public func makeIntMethod() -> Int { - return 12 + 12 } public func makeRandomIntMethod() -> Int { - return Int.random(in: 1..<256) + Int.random(in: 1..<256) } public func takeUnsignedChar(arg: UInt16) { diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift index 46ee268ac..b8b19d902 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift @@ -17,14 +17,14 @@ // // No annotations are necessary on the Swift side to perform the export. +import Foundation + #if os(Linux) import Glibc #else import Darwin.C #endif -import Foundation - public func helloWorld() { } @@ -32,28 +32,30 @@ public func globalTakeInt(i: Int) { } public func globalMakeInt() -> Int { - return 42 + 42 } public func globalWriteString(string: String) -> Int { - return string.count + string.count } public func globalTakeIntInt(i: Int, j: Int) { } -public func globalCallMeRunnable(run: () -> ()) { +public func globalCallMeRunnable(run: () -> Void) { run() } public func globalReceiveRawBuffer(buf: UnsafeRawBufferPointer) -> Int { - return buf.count + buf.count } -public var globalBuffer: UnsafeRawBufferPointer = UnsafeRawBufferPointer(UnsafeMutableRawBufferPointer.allocate(byteCount: 124, alignment: 1)) +public var globalBuffer: UnsafeRawBufferPointer = UnsafeRawBufferPointer( + UnsafeMutableRawBufferPointer.allocate(byteCount: 124, alignment: 1) +) public func globalReceiveReturnData(data: Data) -> Data { - return Data(data) + Data(data) } public func withBuffer(body: (UnsafeRawBufferPointer) -> Void) { @@ -61,7 +63,7 @@ public func withBuffer(body: (UnsafeRawBufferPointer) -> Void) { } public func getArray() -> [UInt8] { - return [1, 2, 3] + [1, 2, 3] } public func sumAllByteArrayElements(actuallyAnArray: UnsafeRawPointer, count: Int) -> Int { @@ -71,10 +73,10 @@ public func sumAllByteArrayElements(actuallyAnArray: UnsafeRawPointer, count: In } public func sumAllByteArrayElements(array: [UInt8]) -> Int { - return Int(array.reduce(0, { partialResult, element in partialResult + element })) + Int(array.reduce(0, { partialResult, element in partialResult + element })) } public func returnSwiftArray() -> [UInt8] { - return [1, 2, 3, 4] + [1, 2, 3, 4] } public func withArray(body: ([UInt8]) -> Void) { @@ -106,11 +108,11 @@ func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: Stri fflush(stdout) } - #if os(Linux) - // FIXME: why do we need this workaround? - @_silgen_name("_objc_autoreleaseReturnValue") - public func _objc_autoreleaseReturnValue(a: Any) {} +#if os(Linux) +// FIXME: why do we need this workaround? +@_silgen_name("_objc_autoreleaseReturnValue") +public func _objc_autoreleaseReturnValue(a: Any) {} - @_silgen_name("objc_autoreleaseReturnValue") - public func objc_autoreleaseReturnValue(a: Any) {} - #endif +@_silgen_name("objc_autoreleaseReturnValue") +public func objc_autoreleaseReturnValue(a: Any) {} +#endif diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift index 5329f8102..861d132db 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift @@ -17,7 +17,7 @@ public struct MySwiftStruct { private var cap: Int private var len: Int private var subscriptValue: Int - private var subscriptArray: [Int] + private var subscriptArray: [Int] public init(cap: Int, len: Int) { self.cap = cap @@ -33,11 +33,11 @@ public struct MySwiftStruct { } public func echoIntMethod(i: Int) -> Int { - return i + i } public func makeIntMethod() -> Int { - return 12 + 12 } public func getCapacity() -> Int { @@ -54,34 +54,34 @@ public struct MySwiftStruct { public mutating func increaseCap(by value: Int) -> Int { precondition(value > 0) - self.cap += value + self.cap += value return self.cap } public func makeRandomIntMethod() -> Int { - return Int.random(in: 1..<256) + Int.random(in: 1..<256) } public func getSubscriptValue() -> Int { - return self.subscriptValue + self.subscriptValue } public func getSubscriptArrayValue(index: Int) -> Int { - return self.subscriptArray[index] + self.subscriptArray[index] } public subscript() -> Int { - get { return subscriptValue } + get { subscriptValue } set { subscriptValue = newValue } } public subscript(index: Int) -> Int { - get { return subscriptArray[index] } + get { subscriptArray[index] } set { subscriptArray[index] = newValue } } - + // operator functions are ignored. - public static func ==(lhs: MySwiftStruct, rhs: MySwiftStruct) -> Bool { - return false + public static func == (lhs: MySwiftStruct, rhs: MySwiftStruct) -> Bool { + false } } diff --git a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/jni/JNIImplementations.swift b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/jni/JNIImplementations.swift index 50561d328..785887f86 100644 --- a/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/jni/JNIImplementations.swift +++ b/Samples/SwiftJavaExtractFFMSampleApp/Sources/MySwiftLibrary/jni/JNIImplementations.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import CSwiftJavaJNI +import SwiftJava @JavaClass("com.example.swift.HelloJava2Swift") open class HelloJava2Swift: JavaObject { @@ -36,11 +36,11 @@ protocol HelloJava2SwiftNativeMethods { extension HelloJava2Swift: HelloJava2SwiftNativeMethods { @JavaMethod func jniWriteString(_ message: String) -> Int32 { - return Int32(message.count) + Int32(message.count) } @JavaMethod func jniGetInt() -> Int32 { - return 12 + 12 } } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Package.swift b/Samples/SwiftJavaExtractJNISampleApp/Package.swift index f8174aa06..121ffad8b 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Package.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Package.swift @@ -2,8 +2,8 @@ // The swift-tools-version declares the minimum version of Swift required to build this package. import CompilerPluginSupport -import PackageDescription import Foundation +import PackageDescription // Note: the JAVA_HOME environment variable must be set to point to where // Java is installed, e.g., @@ -60,13 +60,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path @@ -78,12 +80,12 @@ let javaHome = findJavaHome() let javaIncludePath = "\(javaHome)/include" #if os(Linux) - let javaPlatformIncludePath = "\(javaIncludePath)/linux" +let javaPlatformIncludePath = "\(javaIncludePath)/linux" #elseif os(macOS) - let javaPlatformIncludePath = "\(javaIncludePath)/darwin" +let javaPlatformIncludePath = "\(javaIncludePath)/darwin" #else - // TODO: Handle windows as well - #error("Currently only macOS and Linux platforms are supported, this may change in the future.") +// TODO: Handle windows as well +#error("Currently only macOS and Linux platforms are supported, this may change in the future.") #endif let package = Package( diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Arrays.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Arrays.swift index b6f050c12..006d75abc 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Arrays.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Arrays.swift @@ -15,46 +15,45 @@ import SwiftJava public func booleanArray(array: [Bool]) -> [Bool] { - return array + array } public func byteArray(array: [UInt8]) -> [UInt8] { - return array + array } -public func byteArrayExplicit(array: Array) -> Array { - return array +public func byteArrayExplicit(array: [UInt8]) -> [UInt8] { + array } public func charArray(array: [UInt16]) -> [UInt16] { - return array + array } public func shortArray(array: [Int16]) -> [Int16] { - return array + array } public func intArray(array: [Int32]) -> [Int32] { - return array + array } public func longArray(array: [Int64]) -> [Int64] { - return array + array } public func floatArray(array: [Float]) -> [Float] { - return array + array } public func doubleArray(array: [Double]) -> [Double] { - return array + array } public func stringArray(array: [String]) -> [String] { - return array + array } public func objectArray(array: [MySwiftClass]) -> [MySwiftClass] { - return array + array } - diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Async.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Async.swift index 99f3a3933..5152d147a 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Async.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Async.swift @@ -15,7 +15,7 @@ import SwiftJava public func asyncSum(i1: Int64, i2: Int64) async -> Int64 { - return i1 + i2 + i1 + i2 } public func asyncSleep() async throws { @@ -38,5 +38,5 @@ public func asyncThrows() async throws { } public func asyncString(input: String) async -> String { - return input + input } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/CallbackProtcol.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/CallbackProtcol.swift index a874c5954..05ade0a77 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/CallbackProtcol.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/CallbackProtcol.swift @@ -27,7 +27,7 @@ public protocol CallbackProtocol { func withVoid() func withObject(_ input: MySwiftClass) -> MySwiftClass func withOptionalInt64(_ input: Int64?) -> Int64? - func withOptionalObject(_ input: MySwiftClass?) -> Optional + func withOptionalObject(_ input: MySwiftClass?) -> MySwiftClass? func withInt64Array(_ input: [Int64]) -> [Int64] func withStringArray(_ input: [String]) -> [String] func withObjectArray(_ input: [MySwiftClass]) -> [MySwiftClass] @@ -54,15 +54,15 @@ public struct CallbackOutput { } public func callProtocolVoid(_ callbacks: some CallbackProtocol) { - callbacks.withVoid(); + callbacks.withVoid() } public func callProtocolWithFailedThrowingFunction(_ callbacks: some CallbackProtocol) throws { - try callbacks.throwingFunction(); + try callbacks.throwingFunction() } public func callProtocolWithSuccessfulThrowingFunction(_ callbacks: some CallbackProtocol) throws { - try callbacks.successfulThrowingFunction(); + try callbacks.successfulThrowingFunction() } public func outputCallbacks( @@ -83,7 +83,7 @@ public func outputCallbacks( stringArray: [String], objectArray: [MySwiftClass] ) -> CallbackOutput { - return CallbackOutput( + CallbackOutput( bool: callbacks.withBool(bool), int8: callbacks.withInt8(int8), uint16: callbacks.withUInt16(uint16), diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Closures.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Closures.swift index 00d1f4b0f..4ee87109f 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Closures.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Closures.swift @@ -12,12 +12,12 @@ // //===----------------------------------------------------------------------===// -public func emptyClosure(closure: () -> ()) { +public func emptyClosure(closure: () -> Void) { closure() } public func closureWithInt(input: Int64, closure: (Int64) -> Int64) -> Int64 { - return closure(input) + closure(input) } public func closureMultipleArguments( @@ -25,7 +25,5 @@ public func closureMultipleArguments( input2: Int64, closure: (Int64, Int64) -> Int64 ) -> Int64 { - return closure(input1, input2) + closure(input1, input2) } - - diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ConcreteProtocolAB.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ConcreteProtocolAB.swift index 4f249609a..2dbb80825 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ConcreteProtocolAB.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ConcreteProtocolAB.swift @@ -23,10 +23,10 @@ public class ConcreteProtocolAB: ProtocolA, ProtocolB { } public func name() -> String { - return "ConcreteProtocolAB" + "ConcreteProtocolAB" } public func makeClass() -> MySwiftClass { - return MySwiftClass(x: 10, y: 50) + MySwiftClass(x: 10, y: 50) } } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Data.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Data.swift index b162b2c2b..11aa38a25 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Data.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Data.swift @@ -12,25 +12,26 @@ // //===----------------------------------------------------------------------===// +import SwiftJava + #if canImport(FoundationEssentials) import FoundationEssentials #else import Foundation #endif -import SwiftJava public func echoData(_ data: Data) -> Data { - return data + data } public func makeData() -> Data { - return Data([0x01, 0x02, 0x03, 0x04]) + Data([0x01, 0x02, 0x03, 0x04]) } public func getDataCount(_ data: Data) -> Int { - return data.count + data.count } public func compareData(_ data1: Data, _ data2: Data) -> Bool { - return data1 == data2 + data1 == data2 } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Date.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Date.swift index 35f78cbce..5d700e0d7 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Date.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Date.swift @@ -12,17 +12,18 @@ // //===----------------------------------------------------------------------===// +import SwiftJava + #if canImport(FoundationEssentials) import FoundationEssentials #else import Foundation #endif -import SwiftJava public func compareDates(date1: Date, date2: Date) -> Bool { - return date1 == date2 + date1 == date2 } public func dateFromSeconds(_ seconds: Double) -> Date { - return Date(timeIntervalSince1970: seconds) + Date(timeIntervalSince1970: seconds) } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/EscapingClosures.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/EscapingClosures.swift index 315028588..dcc0d5762 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/EscapingClosures.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/EscapingClosures.swift @@ -15,51 +15,51 @@ public class CallbackManager { private var callback: (() -> Void)? private var intCallback: ((Int64) -> Int64)? - + public init() {} - + public func setCallback(callback: @escaping () -> Void) { self.callback = callback } - + public func triggerCallback() { callback?() } - + public func clearCallback() { callback = nil } - + public func setIntCallback(callback: @escaping (Int64) -> Int64) { self.intCallback = callback } - + public func triggerIntCallback(value: Int64) -> Int64? { - return intCallback?(value) + intCallback?(value) } } public class ClosureStore { private var closures: [() -> Void] = [] - + public init() {} - + public func addClosure(closure: @escaping () -> Void) { closures.append(closure) } - + public func executeAll() { for closure in closures { closure() } } - + public func clear() { closures.removeAll() } - + public func count() -> Int64 { - return Int64(closures.count) + Int64(closures.count) } } @@ -74,4 +74,3 @@ public func multipleEscapingClosures( onFailure(-1) } } - diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift index b7a02d787..5b2ea2cf1 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MultiplePublicTypes.swift @@ -12,15 +12,15 @@ // //===----------------------------------------------------------------------===// -// This file exists to exercise the swiftpm plugin generating separate output Java files +// This file exists to exercise the swiftpm plugin generating separate output Java files // for the public types; because Java public types must be in a file with the same name as the type. -public struct PublicTypeOne { +public struct PublicTypeOne { public init() {} public func test() {} } -public struct PublicTypeTwo { +public struct PublicTypeTwo { public init() {} public func test() {} -} \ No newline at end of file +} diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftClass.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftClass.swift index 46bed5229..099aa5ca0 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftClass.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftClass.swift @@ -22,7 +22,7 @@ public class MySwiftClass { public let constant: Int64 = 100 public var mutable: Int64 = 0 public var product: Int64 { - return x * y + x * y } public var throwingVariable: Int64 { get throws { @@ -31,7 +31,7 @@ public class MySwiftClass { } public var mutableDividedByTwo: Int64 { get { - return mutable / 2 + mutable / 2 } set { mutable = newValue * 2 @@ -40,7 +40,7 @@ public class MySwiftClass { public let warm: Bool = false public var getAsync: Int64 { get async { - return 42 + 42 } } @@ -69,11 +69,11 @@ public class MySwiftClass { } public func sum() -> Int64 { - return x + y + x + y } public func xMultiplied(by z: Int64) -> Int64 { - return x * z; + x * z } enum MySwiftClassError: Error { @@ -85,15 +85,15 @@ public class MySwiftClass { } public func sumX(with other: MySwiftClass) -> Int64 { - return self.x + other.x + self.x + other.x } public func copy() -> MySwiftClass { - return MySwiftClass(x: self.x, y: self.y) + MySwiftClass(x: self.x, y: self.y) } public func addXWithJavaLong(_ other: JavaLong) -> Int64 { - return self.x + other.longValue() + self.x + other.longValue() } } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift index 975748eaa..260c2649d 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftLibrary.swift @@ -18,11 +18,11 @@ // No annotations are necessary on the Swift side to perform the export. #if os(Linux) - import Glibc +import Glibc #elseif os(Android) - import Android +import Android #else - import Darwin.C +import Darwin.C #endif public var globalVariable: Int64 = 0 @@ -35,16 +35,16 @@ public func globalTakeInt(i: Int64) { p("i:\(i)") } -public func globalEchoInt(i: Int64) -> Int64{ +public func globalEchoInt(i: Int64) -> Int64 { i } public func globalMakeInt() -> Int64 { - return 42 + 42 } public func globalWriteString(string: String) -> Int64 { - return Int64(string.count) + Int64(string.count) } public func globalTakeIntInt(i: Int64, j: Int64) { @@ -57,11 +57,11 @@ public func echoUnsignedInt(i: UInt32, j: UInt64) -> UInt64 { } public func returnUnsignedByte(b: UInt8) -> UInt8 { - return b + b } public func returnLargestUnsignedByte() -> UInt8 { - return UInt8.max + UInt8.max } // ==== Internal helpers @@ -72,10 +72,10 @@ func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: Stri } #if os(Linux) - // FIXME: why do we need this workaround? - @_silgen_name("_objc_autoreleaseReturnValue") - public func _objc_autoreleaseReturnValue(a: Any) {} +// FIXME: why do we need this workaround? +@_silgen_name("_objc_autoreleaseReturnValue") +public func _objc_autoreleaseReturnValue(a: Any) {} - @_silgen_name("objc_autoreleaseReturnValue") - public func objc_autoreleaseReturnValue(a: Any) {} +@_silgen_name("objc_autoreleaseReturnValue") +public func objc_autoreleaseReturnValue(a: Any) {} #endif diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift index 660265a92..4c7ce1bc3 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/MySwiftStruct.swift @@ -26,12 +26,12 @@ public struct MySwiftStruct { } public init?(doInit: Bool) { - if doInit { - self.init(cap: 10, len: 10) - } else { - return nil - } + if doInit { + self.init(cap: 10, len: 10) + } else { + return nil } + } public func getCapacity() -> Int64 { self.cap @@ -44,25 +44,25 @@ public struct MySwiftStruct { } public func getSubscriptValue() -> Int64 { - return self.subscriptValue + self.subscriptValue } public func getSubscriptArrayValue(index: Int64) -> Int64 { - return self.subscriptArray[Int(index)] + self.subscriptArray[Int(index)] } public subscript() -> Int64 { - get { return subscriptValue } + get { subscriptValue } set { subscriptValue = newValue } } public subscript(index: Int64) -> Int64 { - get { return subscriptArray[Int(index)] } + get { subscriptArray[Int(index)] } set { subscriptArray[Int(index)] = newValue } } // operator functions are ignored. - public static func ==(lhs: MySwiftStruct, rhs: MySwiftStruct) -> Bool { - return false + public static func == (lhs: MySwiftStruct, rhs: MySwiftStruct) -> Bool { + false } } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift index fb2b49248..252b938aa 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/NestedTypes.swift @@ -16,7 +16,7 @@ import SwiftJava public class A { public init() {} - + public class B { public init() {} @@ -44,4 +44,4 @@ public enum NestedEnum { public struct OneStruct { public init() {} } -} \ No newline at end of file +} diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ObjectWithInts.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ObjectWithInts.swift index f77dc24ba..002dfcac4 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ObjectWithInts.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ObjectWithInts.swift @@ -22,6 +22,6 @@ public final class ObjectWithInts { } public func callMe(arg: UInt) -> UInt { - return arg + arg } } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Optionals.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Optionals.swift index ca1d74586..113ecc969 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Optionals.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Optionals.swift @@ -14,47 +14,47 @@ import SwiftJava -public func optionalBool(input: Optional) -> Bool? { - return input +public func optionalBool(input: Bool?) -> Bool? { + input } -public func optionalByte(input: Optional) -> Int8? { - return input +public func optionalByte(input: Int8?) -> Int8? { + input } -public func optionalChar(input: Optional) -> UInt16? { - return input +public func optionalChar(input: UInt16?) -> UInt16? { + input } -public func optionalShort(input: Optional) -> Int16? { - return input +public func optionalShort(input: Int16?) -> Int16? { + input } -public func optionalInt(input: Optional) -> Int32? { - return input +public func optionalInt(input: Int32?) -> Int32? { + input } -public func optionalLong(input: Optional) -> Int64? { - return input +public func optionalLong(input: Int64?) -> Int64? { + input } -public func optionalFloat(input: Optional) -> Float? { - return input +public func optionalFloat(input: Float?) -> Float? { + input } -public func optionalDouble(input: Optional) -> Double? { - return input +public func optionalDouble(input: Double?) -> Double? { + input } -public func optionalString(input: Optional) -> String? { - return input +public func optionalString(input: String?) -> String? { + input } -public func optionalClass(input: Optional) -> MySwiftClass? { - return input +public func optionalClass(input: MySwiftClass?) -> MySwiftClass? { + input } -public func optionalJavaKitLong(input: Optional) -> Int64? { +public func optionalJavaKitLong(input: JavaLong?) -> Int64? { if let input { return input.longValue() } else { @@ -67,13 +67,13 @@ public func optionalThrowing() throws -> Int64? { } public func multipleOptionals( - input1: Optional, - input2: Optional, - input3: Optional, - input4: Optional, - input5: Optional, - input6: Optional, - input7: Optional + input1: Int8?, + input2: Int16?, + input3: Int32?, + input4: Int64?, + input5: String?, + input6: MySwiftClass?, + input7: Bool? ) -> Int64? { - return 1 + 1 } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolA.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolA.swift index 6e19596f9..4d337e087 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolA.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolA.swift @@ -21,5 +21,5 @@ public protocol ProtocolA { } public func takeProtocol(_ proto1: any ProtocolA, _ proto2: some ProtocolA) -> Int64 { - return proto1.constantA + proto2.constantA + proto1.constantA + proto2.constantA } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolB.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolB.swift index 70d075c25..6f20cf0fc 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolB.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/ProtocolB.swift @@ -17,13 +17,13 @@ public protocol ProtocolB { } public func takeCombinedProtocol(_ proto: some ProtocolA & ProtocolB) -> Int64 { - return proto.constantA + proto.constantB + proto.constantA + proto.constantB } public func takeGenericProtocol(_ proto1: First, _ proto2: Second) -> Int64 { - return proto1.constantA + proto2.constantB + proto1.constantA + proto2.constantB } public func takeCombinedGenericProtocol(_ proto: T) -> Int64 { - return proto.constantA + proto.constantB + proto.constantA + proto.constantB } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Storage.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Storage.swift index 488a78cc1..ad89b0398 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Storage.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Storage.swift @@ -28,9 +28,9 @@ public protocol Storage { } public func saveWithStorage(_ item: StorageItem, s: any Storage) { - s.save(item); + s.save(item) } public func loadWithStorage(s: any Storage) -> StorageItem { - return s.load(); + s.load() } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Throw.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Throw.swift index 3a6a56c74..f3696828f 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Throw.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Throw.swift @@ -15,5 +15,5 @@ import SwiftJava public func throwString(input: String) throws -> String { - return input + input } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/UUID.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/UUID.swift index 0c1613d5e..29769f3a0 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/UUID.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/UUID.swift @@ -12,17 +12,18 @@ // //===----------------------------------------------------------------------===// +import SwiftJava + #if canImport(FoundationEssentials) import FoundationEssentials #else import Foundation #endif -import SwiftJava public func echoUUID(_ uuid: UUID) -> UUID { - return uuid + uuid } public func makeUUID() -> UUID { - return UUID() + UUID() } diff --git a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Vehicle.swift b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Vehicle.swift index 9d9155add..16ae2447a 100644 --- a/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Vehicle.swift +++ b/Samples/SwiftJavaExtractJNISampleApp/Sources/MySwiftLibrary/Vehicle.swift @@ -21,11 +21,11 @@ public enum Vehicle { public init?(name: String) { switch name { - case "bicycle": self = .bicycle - case "car": self = .car("Unknown", trailer: nil) - case "motorbike": self = .motorbike("Unknown", horsePower: 0, helmets: nil) - case "boat": self = .boat(passengers: nil, length: nil) - default: return nil + case "bicycle": self = .bicycle + case "car": self = .car("Unknown", trailer: nil) + case "motorbike": self = .motorbike("Unknown", horsePower: 0, helmets: nil) + case "boat": self = .boat(passengers: nil, length: nil) + default: return nil } } @@ -41,23 +41,23 @@ public enum Vehicle { public func isFasterThan(other: Vehicle) -> Bool { switch (self, other) { - case (.bicycle, .bicycle), (.bicycle, .car), (.bicycle, .motorbike), (.bicycle, .transformer): false - case (.car, .bicycle): true - case (.car, .motorbike), (.car, .transformer), (.car, .car): false - case (.motorbike, .bicycle), (.motorbike, .car): true - case (.motorbike, .motorbike), (.motorbike, .transformer): false - case (.transformer, .bicycle), (.transformer, .car), (.transformer, .motorbike): true - case (.transformer, .transformer): false - default: false + case (.bicycle, .bicycle), (.bicycle, .car), (.bicycle, .motorbike), (.bicycle, .transformer): false + case (.car, .bicycle): true + case (.car, .motorbike), (.car, .transformer), (.car, .car): false + case (.motorbike, .bicycle), (.motorbike, .car): true + case (.motorbike, .motorbike), (.motorbike, .transformer): false + case (.transformer, .bicycle), (.transformer, .car), (.transformer, .motorbike): true + case (.transformer, .transformer): false + default: false } } public mutating func upgrade() { switch self { - case .bicycle: self = .car("Unknown", trailer: nil) - case .car: self = .motorbike("Unknown", horsePower: 0, helmets: nil) - case .motorbike: self = .transformer(front: .car("BMW", trailer: nil), back: self) - case .transformer, .boat: break + case .bicycle: self = .car("Unknown", trailer: nil) + case .car: self = .motorbike("Unknown", horsePower: 0, helmets: nil) + case .motorbike: self = .transformer(front: .car("BMW", trailer: nil), back: self) + case .transformer, .boat: break } } } diff --git a/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift b/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift index 4a9ae1eb1..518266e34 100644 --- a/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift +++ b/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift @@ -39,12 +39,12 @@ public func globalTakeIntInt(i: Int, j: Int) { p("i:\(i), j:\(j)") } -public func globalCallMeRunnable(run: () -> ()) { +public func globalCallMeRunnable(run: () -> Void) { run() } public func globalReceiveRawBuffer(buf: UnsafeRawBufferPointer) -> Int { - return buf.count + buf.count } public class MySwiftClass { @@ -76,15 +76,15 @@ public class MySwiftClass { } public func echoIntMethod(i: Int) -> Int { - return i + i } public func makeIntMethod() -> Int { - return 12 + 12 } public func makeRandomIntMethod() -> Int { - return Int.random(in: 1..<256) + Int.random(in: 1..<256) } } @@ -93,10 +93,10 @@ public func _getTypeByMangledNameInEnvironment( _ name: UnsafePointer, _ nameLength: UInt, genericEnvironment: UnsafeRawPointer?, - genericArguments: UnsafeRawPointer?) + genericArguments: UnsafeRawPointer? +) -> Any.Type? - // ==== Internal helpers func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: String = #function) { diff --git a/Sources/JExtractSwiftLib/CTypes/CTag.swift b/Sources/JExtractSwiftLib/CTypes/CTag.swift index 3e26d2db4..3a6b2a23d 100644 --- a/Sources/JExtractSwiftLib/CTypes/CTag.swift +++ b/Sources/JExtractSwiftLib/CTypes/CTag.swift @@ -20,10 +20,9 @@ public enum CTag { public var name: String { switch self { - case .struct(let cStruct): return cStruct.name - case .enum(let cEnum): return cEnum.name - case .union(let cUnion): return cUnion.name + case .struct(let cStruct): return cStruct.name + case .enum(let cEnum): return cEnum.name + case .union(let cUnion): return cUnion.name } } } - diff --git a/Sources/JExtractSwiftLib/CTypes/CType.swift b/Sources/JExtractSwiftLib/CTypes/CType.swift index 4cd683a6b..3e4e0648f 100644 --- a/Sources/JExtractSwiftLib/CTypes/CType.swift +++ b/Sources/JExtractSwiftLib/CTypes/CType.swift @@ -94,7 +94,7 @@ extension CType: CustomStringConvertible { result: &result ) - case .function(resultType: let resultType, parameters: _, variadic: _): + case .function(let resultType, parameters: _, variadic: _): let previousHasEmptyPlaceholder = hasEmptyPlaceholder hasEmptyPlaceholder = false defer { @@ -208,7 +208,7 @@ extension CType: CustomStringConvertible { switch self { case .floating, .integral, .tag, .void: break - case .function(resultType: let resultType, parameters: let parameters, variadic: let variadic): + case .function(let resultType, let parameters, let variadic): if !hasEmptyPlaceholder { result += ")" } @@ -281,7 +281,7 @@ extension CType: CustomStringConvertible { switch self { case .floating, .integral, .tag, .void: true case .function, .pointer: false - case .qualified(const: _, volatile: _, type: let type): type.canPrefixQualifiers + case .qualified(const: _, volatile: _, let type): type.canPrefixQualifiers } } } @@ -301,7 +301,7 @@ extension CType { extension CType { var isVoid: Bool { - return switch self { + switch self { case .void: true default: false } diff --git a/Sources/JExtractSwiftLib/CodePrinter.swift b/Sources/JExtractSwiftLib/CodePrinter.swift index ebbe83db9..a5b339d65 100644 --- a/Sources/JExtractSwiftLib/CodePrinter.swift +++ b/Sources/JExtractSwiftLib/CodePrinter.swift @@ -42,7 +42,7 @@ public struct CodePrinter { /// If true, next print() should starts with indentation. var atNewline = true - public static func toString(_ block: (inout CodePrinter) throws -> ()) rethrows -> String { + public static func toString(_ block: (inout CodePrinter) throws -> Void) rethrows -> String { var printer = CodePrinter() try block(&printer) return printer.finalize() @@ -79,7 +79,7 @@ public struct CodePrinter { function: String = #function, file: String = #fileID, line: UInt = #line, - body: (inout CodePrinter) throws -> () + body: (inout CodePrinter) throws -> Void ) rethrows { print("#if \(header)") indent() @@ -94,7 +94,7 @@ public struct CodePrinter { function: String = #function, file: String = #fileID, line: UInt = #line, - body: (inout CodePrinter) throws -> () + body: (inout CodePrinter) throws -> Void ) rethrows { print("\(header) {", .continue) if let parameters { @@ -236,7 +236,7 @@ public enum PrinterTerminator: String { } extension CodePrinter { - + /// - Returns: the output path of the generated file, if any (i.e. not in accumulate in memory mode) package mutating func writeContents( outputDirectory _outputDirectory: String, @@ -250,7 +250,9 @@ extension CodePrinter { let filename: String if _filename.contains(PATH_SEPARATOR) { let parts = _filename.split(separator: PATH_SEPARATOR) - outputDirectory = _outputDirectory.appending(PATH_SEPARATOR).appending(parts.dropLast().joined(separator: PATH_SEPARATOR)) + outputDirectory = _outputDirectory.appending(PATH_SEPARATOR).appending( + parts.dropLast().joined(separator: PATH_SEPARATOR) + ) filename = "\(parts.last!)" } else { outputDirectory = _outputDirectory @@ -282,7 +284,9 @@ extension CodePrinter { log.debug("Prepare target directory: '\(targetDirectory)' for file \(filename.bold)") do { try FileManager.default.createDirectory( - atPath: targetDirectory, withIntermediateDirectories: true) + atPath: targetDirectory, + withIntermediateDirectories: true + ) } catch { // log and throw since it can be confusing what the reason for failing the write was otherwise log.warning("Failed to create directory: \(targetDirectory)") @@ -295,7 +299,7 @@ extension CodePrinter { atomically: true, encoding: .utf8 ) - + return outputPath } diff --git a/Sources/JExtractSwiftLib/Convenience/Collection+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/Collection+Extensions.swift index fcb817d70..4286d9e16 100644 --- a/Sources/JExtractSwiftLib/Convenience/Collection+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/Collection+Extensions.swift @@ -12,9 +12,9 @@ // //===----------------------------------------------------------------------===// -public extension Dictionary { +extension Dictionary { /// Same values, corresponding to mapped keys. - func mapKeys( + public func mapKeys( _ transform: (Key) throws -> Transformed ) rethrows -> [Transformed: Value] { .init( @@ -41,11 +41,11 @@ extension Collection { } extension Collection where Element == Int { - var sum: Int { + var sum: Int { var s = 0 for i in self { s += i } return s } -} \ No newline at end of file +} diff --git a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift index 9f7a19cce..757e068de 100644 --- a/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/JavaType+Extensions.swift @@ -32,7 +32,7 @@ extension JavaType { } else { return "L\(nameWithInnerClasses);" } - case .array(let javaType): return "[\(javaType.jniTypeSignature)" + case .array(let javaType): return "[\(javaType.jniTypeSignature)" case .void: fatalError("There is no type signature for 'void'") } } @@ -104,7 +104,7 @@ extension JavaType { /// Returns whether this type returns `JavaValue` from SwiftJava var implementsJavaValue: Bool { - return switch self { + switch self { case .boolean, .byte, .char, .short, .int, .long, .float, .double, .void, .javaLangString: true default: diff --git a/Sources/JExtractSwiftLib/Convenience/String+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/String+Extensions.swift index 87578c142..f7d27a741 100644 --- a/Sources/JExtractSwiftLib/Convenience/String+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/String+Extensions.swift @@ -53,7 +53,7 @@ extension String { return "_2" } else if $0 == "[" { return "_3" - } else if $0.isASCII && ($0.isLetter || $0.isNumber) { + } else if $0.isASCII && ($0.isLetter || $0.isNumber) { return String($0) } else if let utf16 = $0.utf16.first { // Escape any non-alphanumeric to their UTF16 hex encoding diff --git a/Sources/JExtractSwiftLib/Convenience/SwiftSyntax+Extensions.swift b/Sources/JExtractSwiftLib/Convenience/SwiftSyntax+Extensions.swift index c9f87b6dd..ad0ef2efd 100644 --- a/Sources/JExtractSwiftLib/Convenience/SwiftSyntax+Extensions.swift +++ b/Sources/JExtractSwiftLib/Convenience/SwiftSyntax+Extensions.swift @@ -40,7 +40,7 @@ extension DeclModifierSyntax { var isAccessControl: Bool { switch self.name.tokenKind { case .keyword(.private), .keyword(.fileprivate), .keyword(.internal), .keyword(.package), - .keyword(.public), .keyword(.open): + .keyword(.public), .keyword(.open): return true default: return false @@ -78,7 +78,7 @@ extension DeclModifierSyntax { } var isInternal: Bool { - return switch self.name.tokenKind { + switch self.name.tokenKind { case .keyword(.private): false case .keyword(.fileprivate): false case .keyword(.internal): true @@ -136,7 +136,8 @@ extension AttributeListSyntax.Element { } let attrName = attr.attributeName.description switch attrName { - case "JavaClass", "JavaInterface", "JavaField", "JavaStaticField", "JavaMethod", "JavaStaticMethod", "JavaImplementation": + case "JavaClass", "JavaInterface", "JavaField", "JavaStaticField", "JavaMethod", "JavaStaticMethod", + "JavaImplementation": return true default: return false @@ -159,7 +160,7 @@ extension DeclSyntaxProtocol { /// Declaration name primarily for debugging. var nameForDebug: String { - return switch DeclSyntax(self).as(DeclSyntaxEnum.self) { + switch DeclSyntax(self).as(DeclSyntaxEnum.self) { case .accessorDecl(let node): node.accessorSpecifier.text case .actorDecl(let node): @@ -184,13 +185,13 @@ extension DeclSyntaxProtocol { case .extensionDecl(let node): node.extendedType.description case .functionDecl(let node): - node.name.text + "(" + node.signature.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" + node.name.text + "(" + node.signature.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" case .ifConfigDecl(_): "#if" case .importDecl(_): "import" case .initializerDecl(let node): - "init" + "(" + node.signature.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" + "init" + "(" + node.signature.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" case .macroDecl(let node): node.name.text case .macroExpansionDecl(let node): @@ -208,7 +209,7 @@ extension DeclSyntaxProtocol { case .structDecl(let node): node.name.text case .subscriptDecl(let node): - "subscript" + "(" + node.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" + "subscript" + "(" + node.parameterClause.parameters.map({ $0.firstName.text + ":" }).joined() + ")" case .typeAliasDecl(let node): node.name.text case .variableDecl(let node): @@ -234,7 +235,7 @@ extension DeclSyntaxProtocol { /// Signature part of the declaration. I.e. without body or member block. var signatureString: String { - return switch DeclSyntax(self.detached).as(DeclSyntaxEnum.self) { + switch DeclSyntax(self.detached).as(DeclSyntaxEnum.self) { case .functionDecl(let node): node.with(\.body, nil).triviaSanitizedDescription case .initializerDecl(let node): @@ -251,13 +252,16 @@ extension DeclSyntaxProtocol { node.with(\.accessorBlock, nil).triviaSanitizedDescription case .variableDecl(let node): node - .with(\.bindings, PatternBindingListSyntax( - node.bindings.map { - $0.detached - .with(\.accessorBlock, nil) - .with(\.initializer, nil) - } - )) + .with( + \.bindings, + PatternBindingListSyntax( + node.bindings.map { + $0.detached + .with(\.accessorBlock, nil) + .with(\.initializer, nil) + } + ) + ) .triviaSanitizedDescription case .enumCaseDecl(let node): node.triviaSanitizedDescription @@ -286,9 +290,8 @@ class TriviaSanitizingDescriptionVisitor: SyntaxVisitor { override func visit(_ node: TokenSyntax) -> SyntaxVisitorContinueKind { let tokenKind = node.tokenKind switch (prevTokenKind, tokenKind) { - case - // No whitespace after open parentheses. - (.leftAngle, _), (.leftParen, _), (.leftSquare, _), (.endOfFile, _), + case // No whitespace after open parentheses. + (.leftAngle, _), (.leftParen, _), (.leftSquare, _), (.endOfFile, _), // No whitespace before close parentheses. (_, .rightAngle), (_, .rightParen), (_, .rightSquare): break diff --git a/Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift b/Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift index 2cfc4d49a..f335f5638 100644 --- a/Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift +++ b/Sources/JExtractSwiftLib/FFM/CDeclLowering/CRepresentation.swift @@ -32,7 +32,9 @@ extension CType { switch knownType { case .unsafePointer where nominalType.genericArguments?.count == 1: - self = .pointer(.qualified(const: true, volatile: false, type: try CType(cdeclType: nominalType.genericArguments![0]))) + self = .pointer( + .qualified(const: true, volatile: false, type: try CType(cdeclType: nominalType.genericArguments![0])) + ) return case .unsafeMutablePointer where nominalType.genericArguments?.count == 1: self = .pointer(try CType(cdeclType: nominalType.genericArguments![0])) @@ -121,16 +123,18 @@ extension SwiftKnownTypeDeclKind { case .float: .floating(.float) case .double: .floating(.double) case .unsafeMutableRawPointer: .pointer(.void) - case .unsafeRawPointer: .pointer( - .qualified(const: true, volatile: false, type: .void) - ) - case .array: + case .unsafeRawPointer: + .pointer( + .qualified(const: true, volatile: false, type: .void) + ) + case .array: .pointer(.qualified(const: false, volatile: false, type: .void)) case .void: .void - case .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, - .unsafeBufferPointer, .unsafeMutableBufferPointer, .string, .foundationData, .foundationDataProtocol, - .essentialsData, .essentialsDataProtocol, .optional, .foundationDate, .essentialsDate, .foundationUUID, .essentialsUUID: - nil + case .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, + .unsafeBufferPointer, .unsafeMutableBufferPointer, .string, .foundationData, .foundationDataProtocol, + .essentialsData, .essentialsDataProtocol, .optional, .foundationDate, .essentialsDate, .foundationUUID, + .essentialsUUID: + nil } } } diff --git a/Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift b/Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift index 8e09c0b0c..32757a790 100644 --- a/Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift +++ b/Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift @@ -93,22 +93,23 @@ struct CdeclLowering { _ signature: SwiftFunctionSignature ) throws -> LoweredFunctionSignature { // Lower the self parameter. - let loweredSelf: LoweredParameter? = switch signature.selfParameter { - case .instance(let selfParameter): - try lowerParameter( - selfParameter.type, - convention: selfParameter.convention, - parameterName: selfParameter.parameterName ?? "self", - genericParameters: signature.genericParameters, - genericRequirements: signature.genericRequirements - ) - case nil, .initializer(_), .staticMethod(_): - nil - } + let loweredSelf: LoweredParameter? = + switch signature.selfParameter { + case .instance(let selfParameter): + try lowerParameter( + selfParameter.type, + convention: selfParameter.convention, + parameterName: selfParameter.parameterName ?? "self", + genericParameters: signature.genericParameters, + genericRequirements: signature.genericRequirements + ) + case nil, .initializer(_), .staticMethod(_): + nil + } // Lower all of the parameters. let loweredParameters = try signature.parameters.enumerated().map { (index, param) in - return try lowerParameter( + try lowerParameter( param.type, convention: param.convention, parameterName: param.parameterName ?? "_\(index)", @@ -208,24 +209,30 @@ struct CdeclLowering { return LoweredParameter( cdeclParameters: [ SwiftParameter( - convention: .byValue, parameterName: "\(parameterName)_pointer", + convention: .byValue, + parameterName: "\(parameterName)_pointer", type: isMutable ? knownTypes.unsafeMutableRawPointer : knownTypes.unsafeRawPointer ), SwiftParameter( - convention: .byValue, parameterName: "\(parameterName)_count", + convention: .byValue, + parameterName: "\(parameterName)_count", type: knownTypes.int ), - ], conversion: .initialize( + ], + conversion: .initialize( type, arguments: [ LabeledArgument( label: "start", - argument: .typedPointer(.explodedComponent(.placeholder, component: "pointer"), swiftType: genericArgs[0]) + argument: .typedPointer( + .explodedComponent(.placeholder, component: "pointer"), + swiftType: genericArgs[0] + ) ), LabeledArgument( label: "count", argument: .explodedComponent(.placeholder, component: "count") - ) + ), ] ) ) @@ -241,9 +248,10 @@ struct CdeclLowering { type: .optional(isMutable ? knownTypes.unsafeMutableRawPointer : knownTypes.unsafeRawPointer) ), SwiftParameter( - convention: .byValue, parameterName: "\(parameterName)_count", + convention: .byValue, + parameterName: "\(parameterName)_count", type: knownTypes.int - ) + ), ], conversion: .initialize( type, @@ -255,15 +263,22 @@ struct CdeclLowering { LabeledArgument( label: "count", argument: .explodedComponent(.placeholder, component: "count") - ) + ), ] - )) + ) + ) case .optional: guard let genericArgs = nominal.genericArguments, genericArgs.count == 1 else { throw LoweringError.unhandledType(type) } - return try lowerOptionalParameter(genericArgs[0], convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + return try lowerOptionalParameter( + genericArgs[0], + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) case .string: // 'String' is passed in by C string. i.e. 'UnsafePointer' ('const uint8_t *') @@ -276,9 +291,12 @@ struct CdeclLowering { type: knownTypes.unsafePointer(knownTypes.int8) ) ], - conversion: .initialize(type, arguments: [ - LabeledArgument(label: "cString", argument: .placeholder) - ]) + conversion: .initialize( + type, + arguments: [ + LabeledArgument(label: "cString", argument: .placeholder) + ] + ) ) } @@ -299,14 +317,20 @@ struct CdeclLowering { convention: .byValue, parameterName: parameterName, type: isMutable ? knownTypes.unsafeMutableRawPointer : knownTypes.unsafeRawPointer - ), + ) ], conversion: .pointee(.typedPointer(.placeholder, swiftType: type)) ) case .tuple(let tuple): if tuple.count == 1 { - return try lowerParameter(tuple[0], convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + return try lowerParameter( + tuple[0], + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) } if convention == .inout { throw LoweringError.inoutNotSupported(type) @@ -316,7 +340,13 @@ struct CdeclLowering { for (idx, element) in tuple.enumerated() { // FIXME: Use tuple element label. let cdeclName = "\(parameterName)_\(idx)" - let lowered = try lowerParameter(element, convention: convention, parameterName: cdeclName, genericParameters: genericParameters, genericRequirements: genericRequirements) + let lowered = try lowerParameter( + element, + convention: convention, + parameterName: cdeclName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) parameters.append(contentsOf: lowered.cdeclParameters) conversions.append(lowered.conversion) @@ -337,13 +367,29 @@ struct CdeclLowering { ) case .opaque, .existential, .genericParameter: - if let concreteTy = type.representativeConcreteTypeIn(knownTypes: knownTypes, genericParameters: genericParameters, genericRequirements: genericRequirements) { - return try lowerParameter(concreteTy, convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + if let concreteTy = type.representativeConcreteTypeIn( + knownTypes: knownTypes, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) { + return try lowerParameter( + concreteTy, + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) } throw LoweringError.unhandledType(type) case .optional(let wrapped): - return try lowerOptionalParameter(wrapped, convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + return try lowerOptionalParameter( + wrapped, + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) case .composite: throw LoweringError.unhandledType(type) @@ -362,7 +408,7 @@ struct CdeclLowering { type: knownTypes.int ), ] - + let bufferPointerInit = ConversionStep.initialize( knownTypes.unsafeRawBufferPointer, arguments: [ @@ -376,12 +422,12 @@ struct CdeclLowering { ), ] ) - + let arrayInit = ConversionStep.initialize( type, arguments: [LabeledArgument(argument: bufferPointerInit)] ) - + return LoweredParameter( cdeclParameters: cdeclParameters, conversion: arrayInit @@ -407,7 +453,11 @@ struct CdeclLowering { if let _ = try? CType(cdeclType: wrappedType) { return LoweredParameter( cdeclParameters: [ - SwiftParameter(convention: .byValue, parameterName: parameterName, type: .optional(knownTypes.unsafePointer(wrappedType))) + SwiftParameter( + convention: .byValue, + parameterName: parameterName, + type: .optional(knownTypes.unsafePointer(wrappedType)) + ) ], conversion: .pointee(.optionalChain(.placeholder)) ) @@ -440,20 +490,40 @@ struct CdeclLowering { // Lower arbitrary nominal to `UnsafeRawPointer?` return LoweredParameter( cdeclParameters: [ - SwiftParameter(convention: .byValue, parameterName: parameterName, type: .optional(knownTypes.unsafeRawPointer)) + SwiftParameter( + convention: .byValue, + parameterName: parameterName, + type: .optional(knownTypes.unsafeRawPointer) + ) ], conversion: .pointee(.typedPointer(.optionalChain(.placeholder), swiftType: wrappedType)) ) case .existential, .opaque, .genericParameter: - if let concreteTy = wrappedType.representativeConcreteTypeIn(knownTypes: knownTypes, genericParameters: genericParameters, genericRequirements: genericRequirements) { - return try lowerOptionalParameter(concreteTy, convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + if let concreteTy = wrappedType.representativeConcreteTypeIn( + knownTypes: knownTypes, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) { + return try lowerOptionalParameter( + concreteTy, + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) } throw LoweringError.unhandledType(.optional(wrappedType)) - + case .tuple(let tuple): if tuple.count == 1 { - return try lowerOptionalParameter(tuple[0], convention: convention, parameterName: parameterName, genericParameters: genericParameters, genericRequirements: genericRequirements) + return try lowerOptionalParameter( + tuple[0], + convention: convention, + parameterName: parameterName, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) } throw LoweringError.unhandledType(.optional(wrappedType)) @@ -497,7 +567,8 @@ struct CdeclLowering { return ( type: .function(SwiftFunctionType(convention: .c, parameters: parameters, resultType: resultType)), - conversion: isCompatibleWithC ? .placeholder : .closureLowering(parameters: parameterConversions, result: resultConversion) + conversion: isCompatibleWithC + ? .placeholder : .closureLowering(parameters: parameterConversions, result: resultConversion) ) } @@ -515,12 +586,12 @@ struct CdeclLowering { convention: .byValue, parameterName: parameterName, type: type - ), + ) ], conversion: .placeholder ) } - + switch type { case .nominal(let nominal): if let knownType = nominal.nominalTypeDecl.knownTypeKind { @@ -543,7 +614,7 @@ struct CdeclLowering { ], conversion: .tuplify([ .member(.placeholder, member: "baseAddress"), - .member(.placeholder, member: "count") + .member(.placeholder, member: "count"), ]) ) @@ -595,7 +666,7 @@ struct CdeclLowering { // return it. if let cType = try? CType(cdeclType: type) { _ = cType - return LoweredResult(cdeclResultType: type, cdeclOutParameters: [], conversion: .placeholder); + return LoweredResult(cdeclResultType: type, cdeclOutParameters: [], conversion: .placeholder) } switch type { @@ -627,7 +698,7 @@ struct CdeclLowering { return try lowerResult( .tuple([ isMutable ? knownTypes.unsafeMutableRawPointer : knownTypes.unsafeRawPointer, - knownTypes.int + knownTypes.int, ]), outParameterName: outParameterName ) @@ -638,16 +709,19 @@ struct CdeclLowering { return LoweredResult( cdeclResultType: .void, cdeclOutParameters: makeBufferIndirectReturnParameters(outParameterName, isMutable: isMutable), - conversion: .aggregate([ - .populatePointer( - name: "\(outParameterName)_pointer", - to: .member(.placeholder, member: "baseAddress") - ), - .populatePointer( - name: "\(outParameterName)_count", - to: .member(.placeholder, member: "count") - ) - ], name: outParameterName) + conversion: .aggregate( + [ + .populatePointer( + name: "\(outParameterName)_pointer", + to: .member(.placeholder, member: "baseAddress") + ), + .populatePointer( + name: "\(outParameterName)_count", + to: .member(.placeholder, member: "count") + ), + ], + name: outParameterName + ) ) case .void: @@ -700,10 +774,12 @@ struct CdeclLowering { type: knownTypes.unsafeMutablePointer(lowered.cdeclResultType) ) parameters.append(parameter) - conversions.append(.populatePointer( - name: parameterName, - to: lowered.conversion - )) + conversions.append( + .populatePointer( + name: parameterName, + to: lowered.conversion + ) + ) } else { // If the element returns void, it should already be a no-result conversion. parameters.append(contentsOf: lowered.cdeclOutParameters) @@ -716,7 +792,7 @@ struct CdeclLowering { cdeclOutParameters: parameters, conversion: .tupleExplode(conversions, name: outParameterName) ) - + case .array(let wrapped) where wrapped == knownTypes.uint8: let resultName = "_result" @@ -728,24 +804,32 @@ struct CdeclLowering { parameterName: "\(outParameterName)_initialize", type: knownTypes.functionInitializeByteBuffer ) - ], - conversion: .aggregate([ - .method(base: resultName, methodName: "withUnsafeBufferPointer", arguments: [ - .init(argument: - .closureLowering( - parameters: [.placeholder], - result: .method( - base: "\(outParameterName)_initialize", - methodName: nil, // just `(...)` apply the closure - arguments: [ - .init(label: nil, argument: .member(.constant("_0"), member: "baseAddress!")), - .init(label: nil, argument: .member(.constant("_0"), member: "count")), - ] + ], + conversion: .aggregate( + [ + .method( + base: resultName, + methodName: "withUnsafeBufferPointer", + arguments: [ + .init( + argument: + .closureLowering( + parameters: [.placeholder], + result: .method( + base: "\(outParameterName)_initialize", + methodName: nil, // just `(...)` apply the closure + arguments: [ + .init(label: nil, argument: .member(.constant("_0"), member: "baseAddress!")), + .init(label: nil, argument: .member(.constant("_0"), member: "count")), + ] + ) + ) ) - ) + ] ) - ]) - ], name: resultName) + ], + name: resultName + ) ) case .genericParameter, .function, .optional, .existential, .opaque, .composite, .array: @@ -762,7 +846,7 @@ struct CdeclLowering { _ cdeclSignature: SwiftFunctionSignature, cName: String ) -> CFunction { - return try! CFunction(cdeclSignature: cdeclSignature, cName: cName) + try! CFunction(cdeclSignature: cdeclSignature, cName: cName) } } @@ -886,15 +970,16 @@ extension LoweredFunctionSignature { } // Build callee expression. - let callee: ExprSyntax = if let selfExpr { - switch apiKind { + let callee: ExprSyntax = + if let selfExpr { + switch apiKind { // Don't bother to create explicit ${Self}.init expression. case .initializer, .subscriptGetter, .subscriptSetter: selfExpr default: ExprSyntax(MemberAccessExprSyntax(base: selfExpr, name: .identifier(swiftAPIName))) + } + } else { + ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(swiftAPIName))) } - } else { - ExprSyntax(DeclReferenceExprSyntax(baseName: .identifier(swiftAPIName))) - } // Build the result. let resultExpr: ExprSyntax diff --git a/Sources/JExtractSwiftLib/FFM/ConversionStep.swift b/Sources/JExtractSwiftLib/FFM/ConversionStep.swift index a295676d5..03541539c 100644 --- a/Sources/JExtractSwiftLib/FFM/ConversionStep.swift +++ b/Sources/JExtractSwiftLib/FFM/ConversionStep.swift @@ -21,7 +21,7 @@ import SwiftSyntaxBuilder enum ConversionStep: Equatable { /// The value being lowered. case placeholder - + case constant(String) /// A reference to a component in a value that has been exploded, such as @@ -75,13 +75,13 @@ enum ConversionStep: Equatable { var placeholderCount: Int { switch self { case .explodedComponent(let inner, component: _), - .pointee(let inner), - .typedPointer(let inner, swiftType: _), - .unsafeCastPointer(let inner, swiftType: _), - .populatePointer(name: _, assumingType: _, to: let inner), - .member(let inner, member: _), .optionalChain(let inner): + .pointee(let inner), + .typedPointer(let inner, swiftType: _), + .unsafeCastPointer(let inner, swiftType: _), + .populatePointer(name: _, assumingType: _, to: let inner), + .member(let inner, member: _), .optionalChain(let inner): inner.placeholderCount - case .initialize(_, arguments: let arguments): + case .initialize(_, let arguments): arguments.reduce(0) { $0 + $1.argument.placeholderCount } case .method(_, _, let arguments): arguments.reduce(0) { $0 + $1.argument.placeholderCount } @@ -111,10 +111,10 @@ enum ConversionStep: Equatable { case .constant(let name): return "\(raw: name)" - case .explodedComponent(let step, component: let component): + case .explodedComponent(let step, let component): return step.asExprSyntax(placeholder: "\(placeholder)_\(component)", bodyItems: &bodyItems) - case .unsafeCastPointer(let step, swiftType: let swiftType): + case .unsafeCastPointer(let step, let swiftType): let untypedExpr = step.asExprSyntax(placeholder: placeholder, bodyItems: &bodyItems) return "unsafeBitCast(\(untypedExpr), to: \(swiftType.metatypeReferenceExprSyntax))" @@ -126,7 +126,7 @@ enum ConversionStep: Equatable { let untypedExpr = step.asExprSyntax(placeholder: placeholder, bodyItems: &bodyItems) return "\(untypedExpr).pointee" - case .initialize(let type, arguments: let arguments): + case .initialize(let type, let arguments): let renderedArguments: [String] = arguments.map { labeledArgument in let argExpr = labeledArgument.argument.asExprSyntax(placeholder: placeholder, bodyItems: &bodyItems) return LabeledExprSyntax(label: labeledArgument.label, expression: argExpr!).description @@ -136,7 +136,7 @@ enum ConversionStep: Equatable { // of splatting out text. let renderedArgumentList = renderedArguments.joined(separator: ", ") return "\(raw: type.description)(\(raw: renderedArgumentList))" - + case .tuplify(let elements): let renderedElements: [String] = elements.enumerated().map { (index, element) in element.asExprSyntax(placeholder: "\(placeholder)_\(index)", bodyItems: &bodyItems)!.description @@ -149,11 +149,12 @@ enum ConversionStep: Equatable { case .populatePointer(name: let pointer, assumingType: let type, to: let step): let inner = step.asExprSyntax(placeholder: placeholder, bodyItems: &bodyItems) - let casting = if let type { - ".assumingMemoryBound(to: \(type.metatypeReferenceExprSyntax))" - } else { - "" - } + let casting = + if let type { + ".assumingMemoryBound(to: \(type.metatypeReferenceExprSyntax))" + } else { + "" + } return "\(raw: pointer)\(raw: casting).initialize(to: \(inner))" case .tupleExplode(let steps, let name): @@ -176,7 +177,7 @@ enum ConversionStep: Equatable { return "\(inner).\(raw: member)" case .method(let base, let methodName, let arguments): - // TODO: this is duplicated, try to dedupe it a bit + // TODO: this is duplicated, try to dedupe it a bit let renderedArguments: [String] = arguments.map { labeledArgument in let argExpr = labeledArgument.argument.asExprSyntax(placeholder: placeholder, bodyItems: &bodyItems) return LabeledExprSyntax(label: labeledArgument.label, expression: argExpr!).description @@ -267,4 +268,4 @@ struct LabeledArgument { var argument: Element } -extension LabeledArgument: Equatable where Element: Equatable { } +extension LabeledArgument: Equatable where Element: Equatable {} diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+FoundationData.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+FoundationData.swift index 36c129caa..b3fa1b30b 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+FoundationData.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+FoundationData.swift @@ -13,9 +13,10 @@ //===----------------------------------------------------------------------===// import JavaTypes +import SwiftJavaConfigurationShared import SwiftSyntax import SwiftSyntaxBuilder -import SwiftJavaConfigurationShared + import struct Foundation.URL extension FFMSwift2JavaGenerator { @@ -53,7 +54,7 @@ extension FFMSwift2JavaGenerator { parameters: [ CParameter(name: "self", type: .qualified(const: true, volatile: false, type: .pointer(.void))), CParameter(name: "destination", type: .pointer(.void)), - CParameter(name: "count", type: .integral(.ptrdiff_t)) + CParameter(name: "count", type: .integral(.ptrdiff_t)), ], isVariadic: false ) diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift index b7630dee8..17d5440a0 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaBindingsPrinting.swift @@ -126,7 +126,7 @@ extension FFMSwift2JavaGenerator { if param.type.javaType.parameterAnnotations.isEmpty { "" } else { - param.type.javaType.parameterAnnotations.map({$0.render()}).joined(separator: " ") + " " + param.type.javaType.parameterAnnotations.map({ $0.render() }).joined(separator: " ") + " " } params.append("\(annotationsStr)\(param.type.javaType) \(name)") args.append(name) @@ -167,8 +167,8 @@ extension FFMSwift2JavaGenerator { continue } } - } - + } + func printUpcallParameterDescriptorClasses( _ printer: inout CodePrinter, _ outCallback: OutCallback @@ -192,7 +192,7 @@ extension FFMSwift2JavaGenerator { /// } /// } /// ``` - /// + /// /// If a `functionBody` is provided, a `Function$Impl` class will be emitted as well. func printFunctionPointerParameterDescriptorClass( _ printer: inout CodePrinter, @@ -203,10 +203,10 @@ extension FFMSwift2JavaGenerator { let cResultType: CType let cParameterTypes: [CType] if case .pointer(.function(let _cResultType, let _cParameterTypes, variadic: false)) = cType { - cResultType = _cResultType + cResultType = _cResultType cParameterTypes = _cParameterTypes } else if case .function(let _cResultType, let _cParameterTypes, variadic: false) = cType { - cResultType = _cResultType + cResultType = _cResultType cParameterTypes = _cParameterTypes } else { fatalError("must be a C function (pointer) type; name=\(name), cType=\(cType)") @@ -215,7 +215,7 @@ extension FFMSwift2JavaGenerator { let cParams = cParameterTypes.enumerated().map { i, ty in CParameter(name: "_\(i)", type: ty) } - let paramDecls = cParams.map({"\($0.type.javaType) \($0.name!)"}) + let paramDecls = cParams.map({ "\($0.type.javaType) \($0.name!)" }) printer.printBraceBlock( """ @@ -235,7 +235,7 @@ extension FFMSwift2JavaGenerator { } """ ) - + if let impl { printer.print( """ @@ -247,7 +247,7 @@ extension FFMSwift2JavaGenerator { } """ ) - } + } printFunctionDescriptorDefinition(&printer, cResultType, cParams) printer.print( @@ -319,7 +319,7 @@ extension FFMSwift2JavaGenerator { """ ) - let cdeclParams = functionType.cdeclType.parameters.map( { "\($0.parameterName!)" }) + let cdeclParams = functionType.cdeclType.parameters.map({ "\($0.parameterName!)" }) printer.printBraceBlock( """ @@ -391,7 +391,7 @@ extension FFMSwift2JavaGenerator { \(annotationsStr)\(modifiers) \(returnTy) \(methodName)(\(paramDecls.joined(separator: ", "))) """ ) { printer in - if case .instance(_) = decl.functionSignature.selfParameter { + if case .instance(_) = decl.functionSignature.selfParameter { // Make sure the object has not been destroyed. printer.print("$ensureAlive();") } @@ -412,7 +412,7 @@ extension FFMSwift2JavaGenerator { if translatedSignature.requiresTemporaryArena { printer.print("try(var arena$ = Arena.ofConfined()) {") - printer.indent(); + printer.indent() } //=== Part 2: prepare all arguments. @@ -439,14 +439,16 @@ extension FFMSwift2JavaGenerator { } let memoryLayout = renderMemoryLayoutValue(for: type) - let arena = if let className = type.className, - analysis.importedTypes[className] != nil { - // Use passed-in 'SwiftArena' for 'SwiftValue'. - "swiftArena$" - } else { - // Otherwise use the temporary 'Arena'. - "arena$" - } + let arena = + if let className = type.className, + analysis.importedTypes[className] != nil + { + // Use passed-in 'SwiftArena' for 'SwiftValue'. + "swiftArena$" + } else { + // Otherwise use the temporary 'Arena'. + "arena$" + } // FIXME: use trailing$ convention let varName = outParameter.name.isEmpty ? "_result" : "_result_" + outParameter.name @@ -458,7 +460,7 @@ extension FFMSwift2JavaGenerator { } let thunkName = thunkNameRegistry.functionThunkName(decl: decl) - + if let outCallback = translatedSignature.result.outCallback { let funcName = outCallback.name assert(funcName.first == "$", "OutCallback names must start with $") @@ -480,7 +482,7 @@ extension FFMSwift2JavaGenerator { } else { let placeholder: String let placeholderForDowncall: String? - + if let outCallback = translatedSignature.result.outCallback { placeholder = "\(outCallback.name)" // the result will be read out from the _result_initialize java class placeholderForDowncall = "\(downCall)" @@ -493,7 +495,11 @@ extension FFMSwift2JavaGenerator { placeholderForDowncall = nil placeholder = "_result" } - let result = translatedSignature.result.conversion.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) + let result = translatedSignature.result.conversion.render( + &printer, + placeholder, + placeholderForDowncall: placeholderForDowncall + ) if translatedSignature.result.javaResultType != .void { switch translatedSignature.result.conversion { @@ -546,11 +552,11 @@ extension FFMSwift2JavaGenerator.JavaConversionStep { case .call(let inner, let base, _, _): return inner.requiresSwiftArena || (base?.requiresSwiftArena == true) - case .cast(let inner, _), - .construct(let inner, _), - .method(let inner, _, _, _), - .property(let inner, _), - .swiftValueSelfSegment(let inner): + case .cast(let inner, _), + .construct(let inner, _), + .method(let inner, _, _, _), + .property(let inner, _), + .swiftValueSelfSegment(let inner): return inner.requiresSwiftArena case .commaSeparated(let list, _): @@ -573,11 +579,11 @@ extension FFMSwift2JavaGenerator.JavaConversionStep { return true case .introduceVariable(_, let value): return value.requiresTemporaryArena - case .cast(let inner, _), - .construct(let inner, _), - .constructSwiftValue(let inner, _), - .swiftValueSelfSegment(let inner), - .wrapMemoryAddressUnsafe(let inner, _): + case .cast(let inner, _), + .construct(let inner, _), + .constructSwiftValue(let inner, _), + .swiftValueSelfSegment(let inner), + .wrapMemoryAddressUnsafe(let inner, _): return inner.requiresSwiftArena case .call(let inner, let base, _, let withArena): return withArena || (base?.requiresTemporaryArena == true) || inner.requiresTemporaryArena @@ -620,24 +626,24 @@ extension FFMSwift2JavaGenerator.JavaConversionStep { case .swiftValueSelfSegment: return "\(placeholder).$memorySegment()" - + case .javaNew(let value): return "new \(value.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall))" case .initializeResultWithUpcall(let steps, _): // TODO: could we use the printing to introduce the upcall handle instead? - return steps.map { step in + return steps.map { step in var printer = CodePrinter() var out = "" out += step.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) out += printer.contents - return out + return out }.joined(separator: ";\n") case .call(let inner, let base, let function, let withArena): let inner = inner.render(&printer, placeholder) let arenaArg = withArena ? ", arena$" : "" - let baseStr : String = + let baseStr: String = if let base { base.render(&printer, placeholder) + "." } else { @@ -667,7 +673,7 @@ extension FFMSwift2JavaGenerator.JavaConversionStep { case .construct(let inner, let javaType): let inner = inner.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) return "new \(javaType)(\(inner))" - + case .introduceVariable(let name, let value): let value = value.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) return "var \(name) = \(value);" @@ -677,8 +683,8 @@ extension FFMSwift2JavaGenerator.JavaConversionStep { return "(\(javaType)) \(inner)" case .commaSeparated(let list, let separator): - return list.map({ - $0.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) + return list.map({ + $0.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall) }).joined(separator: separator) case .constant(let value): diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift index e8a28d064..cf32a4305 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift @@ -27,7 +27,8 @@ extension FFMSwift2JavaGenerator { do { let translation = JavaTranslation( config: self.config, - knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable)) + knownTypes: SwiftKnownTypes(symbolTable: lookupContext.symbolTable) + ) translated = try translation.translate(decl) } catch { self.log.info("Failed to translate: '\(decl.swiftDecl.qualifiedNameForDebug)'; \(error)") @@ -73,14 +74,14 @@ extension FFMSwift2JavaGenerator { /// Similar to out parameters, but instead of parameters we "fill in" in native, /// we create an upcall handle before the downcall and pass it to the downcall. /// Swift then invokes the upcall in order to populate some data in Java (our callback). - /// + /// /// After the call is made, we may need to further extact the result from the called-back-into /// Java function class, for example: - /// + /// /// var _result_initialize = new $result_initialize.Function(); /// downCall($result_initialize.toUpcallHandle(_result_initialize, arena)) /// return _result_initialize.result - /// + /// var outCallback: OutCallback? /// Describes how to construct the Java result from the foreign function return @@ -88,7 +89,6 @@ extension FFMSwift2JavaGenerator { var conversion: JavaConversionStep } - /// Translated Java API representing a Swift API. /// /// Since this holds the lowered signature, and the original `SwiftFunctionSignature` @@ -156,11 +156,12 @@ extension FFMSwift2JavaGenerator { let loweredSignature = try lowering.lowerFunctionSignature(decl.functionSignature) // Name. - let javaName = switch decl.apiKind { - case .getter, .subscriptGetter: decl.javaGetterName - case .setter, .subscriptSetter: decl.javaSetterName - case .function, .initializer, .enumCase: decl.name - } + let javaName = + switch decl.apiKind { + case .getter, .subscriptGetter: decl.javaGetterName + case .setter, .subscriptSetter: decl.javaSetterName + case .function, .initializer, .enumCase: decl.name + } // Signature. let translatedSignature = try translate(loweredFunctionSignature: loweredSignature, methodName: javaName) @@ -171,7 +172,7 @@ extension FFMSwift2JavaGenerator { switch param.type { case .function(let funcTy): let paramName = param.parameterName ?? "_\(idx)" - guard case .function( let cdeclTy) = loweredSignature.parameters[idx].cdeclParameters[0].type else { + guard case .function(let cdeclTy) = loweredSignature.parameters[idx].cdeclParameters[0].type else { preconditionFailure("closure parameter wasn't lowered to a function type; \(funcTy)") } let translatedClosure = try translateFunctionType(name: paramName, swiftType: funcTy, cdeclType: cdeclTy) @@ -345,7 +346,8 @@ extension FFMSwift2JavaGenerator { JavaParameter( name: parameterName, type: javaType, - annotations: parameterAnnotations) + annotations: parameterAnnotations + ) ], conversion: .placeholder ) @@ -382,11 +384,11 @@ extension FFMSwift2JavaGenerator { case .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer: return TranslatedParameter( javaParameters: [ - JavaParameter(name: parameterName, type: .javaForeignMemorySegment), + JavaParameter(name: parameterName, type: .javaForeignMemorySegment) ], conversion: .commaSeparated([ .placeholder, - .method(.placeholder, methodName: "byteSize", arguments: [], withArena: false) + .method(.placeholder, methodName: "byteSize", arguments: [], withArena: false), ]) ) @@ -408,7 +410,8 @@ extension FFMSwift2JavaGenerator { return TranslatedParameter( javaParameters: [ JavaParameter( - name: parameterName, type: .javaLangString + name: parameterName, + type: .javaLangString ) ], conversion: .call(.placeholder, function: "SwiftRuntime.toCString", withArena: true) @@ -430,7 +433,8 @@ extension FFMSwift2JavaGenerator { return TranslatedParameter( javaParameters: [ JavaParameter( - name: parameterName, type: try translate(swiftType: swiftType) + name: parameterName, + type: try translate(swiftType: swiftType) ) ], conversion: .swiftValueSelfSegment(.placeholder) @@ -444,13 +448,19 @@ extension FFMSwift2JavaGenerator { return TranslatedParameter( javaParameters: [ JavaParameter( - name: parameterName, type: JavaType.class(package: nil, name: "\(methodName).\(parameterName)")) + name: parameterName, + type: JavaType.class(package: nil, name: "\(methodName).\(parameterName)") + ) ], conversion: .call(.placeholder, function: "\(methodName).$toUpcallStub", withArena: true) ) case .existential, .opaque, .genericParameter: - if let concreteTy = swiftType.representativeConcreteTypeIn(knownTypes: knownTypes, genericParameters: genericParameters, genericRequirements: genericRequirements) { + if let concreteTy = swiftType.representativeConcreteTypeIn( + knownTypes: knownTypes, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) { return try translateParameter( type: concreteTy, convention: convention, @@ -482,18 +492,18 @@ extension FFMSwift2JavaGenerator { case .array(let wrapped) where wrapped == knownTypes.uint8: return TranslatedParameter( javaParameters: [ - JavaParameter(name: parameterName, type: .array(.byte), annotations: parameterAnnotations), + JavaParameter(name: parameterName, type: .array(.byte), annotations: parameterAnnotations) ], - conversion: + conversion: .commaSeparated([ .call( - .commaSeparated([.constant("ValueLayout.JAVA_BYTE"), .placeholder]), + .commaSeparated([.constant("ValueLayout.JAVA_BYTE"), .placeholder]), base: .temporaryArena, - function: "allocateFrom", + function: "allocateFrom", withArena: false // this would pass the arena as last argument, but instead we make a call on the arena - ), - .property(.placeholder, propertyName: "length"), - ]) + ), + .property(.placeholder, propertyName: "length"), + ]) ) case .array: @@ -514,18 +524,19 @@ extension FFMSwift2JavaGenerator { // If there is a 1:1 mapping between this Swift type and a C type, that can // be expressed as a Java primitive type. if let cType = try? CType(cdeclType: swiftType) { - let (translatedClass, lowerFunc) = switch cType.javaType { - case .int: ("OptionalInt", "toOptionalSegmentInt") - case .long: ("OptionalLong", "toOptionalSegmentLong") - case .double: ("OptionalDouble", "toOptionalSegmentDouble") - case .boolean: ("Optional", "toOptionalSegmentBoolean") - case .byte: ("Optional", "toOptionalSegmentByte") - case .char: ("Optional", "toOptionalSegmentCharacter") - case .short: ("Optional", "toOptionalSegmentShort") - case .float: ("Optional", "toOptionalSegmentFloat") - default: - throw JavaTranslationError.unhandledType(.optional(swiftType)) - } + let (translatedClass, lowerFunc) = + switch cType.javaType { + case .int: ("OptionalInt", "toOptionalSegmentInt") + case .long: ("OptionalLong", "toOptionalSegmentLong") + case .double: ("OptionalDouble", "toOptionalSegmentDouble") + case .boolean: ("Optional", "toOptionalSegmentBoolean") + case .byte: ("Optional", "toOptionalSegmentByte") + case .char: ("Optional", "toOptionalSegmentCharacter") + case .short: ("Optional", "toOptionalSegmentShort") + case .float: ("Optional", "toOptionalSegmentFloat") + default: + throw JavaTranslationError.unhandledType(.optional(swiftType)) + } return TranslatedParameter( javaParameters: [ JavaParameter(name: parameterName, type: JavaType(className: translatedClass)) @@ -555,7 +566,11 @@ extension FFMSwift2JavaGenerator { conversion: .call(.placeholder, function: "SwiftRuntime.toOptionalSegmentInstance", withArena: false) ) case .existential, .opaque, .genericParameter: - if let concreteTy = swiftType.representativeConcreteTypeIn(knownTypes: knownTypes, genericParameters: genericParameters, genericRequirements: genericRequirements) { + if let concreteTy = swiftType.representativeConcreteTypeIn( + knownTypes: knownTypes, + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) { return try translateOptionalParameter( wrappedType: concreteTy, convention: convention, @@ -632,7 +647,7 @@ extension FFMSwift2JavaGenerator { .readMemorySegment(.explodedName(component: "pointer"), as: .javaForeignMemorySegment), methodName: "reinterpret", arguments: [ - .readMemorySegment(.explodedName(component: "count"), as: .long), + .readMemorySegment(.explodedName(component: "count"), as: .long) ], withArena: false ) @@ -676,42 +691,52 @@ extension FFMSwift2JavaGenerator { case .array(let wrapped) where wrapped == knownTypes.uint8: return TranslatedResult( - javaResultType: - .array(.byte), - annotations: [.unsigned], - outParameters: [], // no out parameters, but we do an "out" callback - outCallback: OutCallback( - name: "$_result_initialize", - members: [ - "byte[] result = null" - ], + javaResultType: + .array(.byte), + annotations: [.unsigned], + outParameters: [], // no out parameters, but we do an "out" callback + outCallback: OutCallback( + name: "$_result_initialize", + members: [ + "byte[] result = null" + ], + parameters: [ + JavaParameter(name: "pointer", type: .javaForeignMemorySegment), + JavaParameter(name: "count", type: .long), + ], + cFunc: CFunction( + resultType: .void, + name: "apply", parameters: [ - JavaParameter(name: "pointer", type: .javaForeignMemorySegment), - JavaParameter(name: "count", type: .long), + CParameter(type: .pointer(.void)), + CParameter(type: .integral(.size_t)), ], - cFunc: CFunction( - resultType: .void, - name: "apply", - parameters: [ - CParameter(type: .pointer(.void)), - CParameter(type: .integral(.size_t)), - ], - isVariadic: false), - body: "this.result = _0.reinterpret(_1).toArray(ValueLayout.JAVA_BYTE); // copy native Swift array to Java heap array" + isVariadic: false ), - conversion: .initializeResultWithUpcall([ + body: + "this.result = _0.reinterpret(_1).toArray(ValueLayout.JAVA_BYTE); // copy native Swift array to Java heap array" + ), + conversion: .initializeResultWithUpcall( + [ .introduceVariable( - name: "_result_initialize", - initializeWith: .javaNew(.commaSeparated([ - // We need to refer to the nested class that is created for this function. - // The class that contains all the related functional interfaces is called the same - // as the downcall function, so we use the thunk name to find this class/ - .placeholderForSwiftThunkName, .constant("$_result_initialize.Function$Impl()") - ], separator: "."))), + name: "_result_initialize", + initializeWith: .javaNew( + .commaSeparated( + [ + // We need to refer to the nested class that is created for this function. + // The class that contains all the related functional interfaces is called the same + // as the downcall function, so we use the thunk name to find this class/ + .placeholderForSwiftThunkName, .constant("$_result_initialize.Function$Impl()"), + ], + separator: "." + ) + ) + ), // .constant("var = new \(.placeholderForDowncallThunkName).."), .placeholderForDowncall, // perform the downcall here ], - extractResult: .property(.constant("_result_initialize"), propertyName: "result")) + extractResult: .property(.constant("_result_initialize"), propertyName: "result") + ) ) case .genericParameter, .optional, .function, .existential, .opaque, .composite, .array: @@ -734,19 +759,19 @@ extension FFMSwift2JavaGenerator { enum JavaConversionStep { /// The input case placeholder - + /// The "downcall", e.g. `swiftjava_SwiftModule_returnArray.call(...)`. /// This can be used in combination with aggregate conversion steps to prepare a setup and processing of the downcall. case placeholderForDowncall - + /// Placeholder for Swift thunk name, e.g. "swiftjava_SwiftModule_returnArray". - /// - /// This is derived from the placeholderForDowncall substitution - could be done more cleanly, + /// + /// This is derived from the placeholderForDowncall substitution - could be done more cleanly, /// however this has the benefit of not needing to pass the name substituion separately. case placeholderForSwiftThunkName /// The temporary `arena$` that is necessary to complete the conversion steps. - /// + /// /// This is distinct from just a constant 'arena$' string, since it forces the creation of a temporary arena. case temporaryArena @@ -757,8 +782,8 @@ extension FFMSwift2JavaGenerator { case constant(String) /// The result of the function will be initialized with a callback to Java (an upcall). - /// - /// The `extractResult` is used for the actual `return ...` statement, because we need to extract + /// + /// The `extractResult` is used for the actual `return ...` statement, because we need to extract /// the return value from the called back into class, e.g. `return _result_initialize.result`. indirect case initializeResultWithUpcall([JavaConversionStep], extractResult: JavaConversionStep) @@ -766,13 +791,13 @@ extension FFMSwift2JavaGenerator { indirect case swiftValueSelfSegment(JavaConversionStep) /// Call specified function using the placeholder as arguments. - /// + /// /// The 'base' is if the call should be performed as 'base.function', /// otherwise the function is assumed to be a free function. - /// + /// /// If `withArena` is true, `arena$` argument is added. indirect case call(JavaConversionStep, base: JavaConversionStep?, function: String, withArena: Bool) - + static func call(_ step: JavaConversionStep, function: String, withArena: Bool) -> Self { .call(step, base: nil, function: function, withArena: withArena) } @@ -781,7 +806,7 @@ extension FFMSwift2JavaGenerator { /// Apply a method on the placeholder. /// If `withArena` is true, `arena$` argument is added. indirect case method(JavaConversionStep, methodName: String, arguments: [JavaConversionStep] = [], withArena: Bool) - + /// Fetch a property from the placeholder. /// Similar to 'method', however for a property i.e. without adding the '()' after the name indirect case property(JavaConversionStep, propertyName: String) @@ -791,7 +816,7 @@ extension FFMSwift2JavaGenerator { /// Construct the type using the placeholder as arguments. indirect case construct(JavaConversionStep, JavaType) - + /// Call the `MyType.wrapMemoryAddressUnsafe` in order to wrap a memory address using the Java binding type indirect case wrapMemoryAddressUnsafe(JavaConversionStep, JavaType) @@ -800,9 +825,9 @@ extension FFMSwift2JavaGenerator { /// Casting the placeholder to the certain type. indirect case cast(JavaConversionStep, JavaType) - + /// Prefix the conversion step with a java `new`. - /// + /// /// This is useful if constructing the value is complex and we use /// a combination of separated values and constants to do so; Generally prefer using `construct` /// if you only want to construct a "wrapper" for the current `.placeholder`. @@ -815,12 +840,11 @@ extension FFMSwift2JavaGenerator { indirect case readMemorySegment(JavaConversionStep, as: JavaType) var isPlaceholder: Bool { - return if case .placeholder = self { true } else { false } + if case .placeholder = self { true } else { false } } } } - extension FFMSwift2JavaGenerator.TranslatedFunctionSignature { /// Whether or not if the down-calling requires temporary "Arena" which is /// only used during the down-calling. @@ -840,7 +864,7 @@ extension FFMSwift2JavaGenerator.TranslatedFunctionSignature { /// Whether if the down-calling requires "SwiftArena" or not, which should be /// passed-in by the API caller. This is needed if the API returns a `SwiftValue` var requiresSwiftArena: Bool { - return self.result.conversion.requiresSwiftArena + self.result.conversion.requiresSwiftArena } } @@ -879,7 +903,7 @@ extension CType { case .tag(_): fatalError("unsupported") - case .integral(.signed(bits: _)), .integral(.unsigned(bits: _)): + case .integral(.signed(bits: _)), .integral(.unsigned(bits: _)): fatalError("unreachable") } } @@ -912,7 +936,7 @@ extension CType { case .tag(_): fatalError("unsupported") - case .void, .integral(.signed(bits: _)), .integral(.unsigned(bits: _)): + case .void, .integral(.signed(bits: _)), .integral(.unsigned(bits: _)): fatalError("unreachable") } } diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift index ee76e3519..9dbc38321 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+SwiftThunkPrinting.swift @@ -26,9 +26,11 @@ extension FFMSwift2JavaGenerator { guard pendingFileCount > 0 else { return // no need to write any empty files, yay } - - log.info("[swift-java] Write empty [\(self.expectedOutputSwiftFileNames.count)] 'expected' files in: \(swiftOutputDirectory)/") - + + log.info( + "[swift-java] Write empty [\(self.expectedOutputSwiftFileNames.count)] 'expected' files in: \(swiftOutputDirectory)/" + ) + for expectedFileName in self.expectedOutputSwiftFileNames { log.info("Write SwiftPM-'expected' empty file: \(expectedFileName.bold)") @@ -37,7 +39,8 @@ extension FFMSwift2JavaGenerator { _ = try printer.writeContents( outputDirectory: self.swiftOutputDirectory, javaPackagePath: nil, - filename: expectedFileName) + filename: expectedFileName + ) } } @@ -52,7 +55,8 @@ extension FFMSwift2JavaGenerator { if let outputFile = try printer.writeContents( outputDirectory: self.swiftOutputDirectory, javaPackagePath: nil, - filename: moduleFilename) { + filename: moduleFilename + ) { log.info("Generated: \(moduleFilenameBase.bold).swift (at \(outputFile.absoluteString))") self.expectedOutputSwiftFileNames.remove(moduleFilename) } @@ -63,7 +67,10 @@ extension FFMSwift2JavaGenerator { // === All types // We have to write all types to their corresponding output file that matches the file they were declared in, // because otherwise SwiftPM plugins will not pick up files apropriately -- we expect 1 output +SwiftJava.swift file for every input. - for group: (key: String, value: [Dictionary.Element]) in Dictionary(grouping: self.analysis.importedTypes, by: { $0.value.sourceFilePath }) { + for group: (key: String, value: [Dictionary.Element]) in Dictionary( + grouping: self.analysis.importedTypes, + by: { $0.value.sourceFilePath } + ) { log.warning("Writing types in file group: \(group.key): \(group.value.map(\.key))") let importedTypesForThisFile = group.value @@ -82,7 +89,7 @@ extension FFMSwift2JavaGenerator { } catch { log.warning("Failed to print to Swift thunks for type'\(ty.qualifiedName)' to '\(filename)', error: \(error)") } - + } log.warning("Write Swift thunks file: \(filename.bold)") @@ -90,7 +97,8 @@ extension FFMSwift2JavaGenerator { if let outputFile = try printer.writeContents( outputDirectory: self.swiftOutputDirectory, javaPackagePath: nil, - filename: filename) { + filename: filename + ) { log.info("Done writing Swift thunks to: \(outputFile.absoluteString)") self.expectedOutputSwiftFileNames.remove(filename) } @@ -109,7 +117,8 @@ extension FFMSwift2JavaGenerator { import SwiftRuntimeFunctions - """) + """ + ) self.lookupContext.symbolTable.printImportedModules(&printer) @@ -205,7 +214,8 @@ struct SwiftThunkTranslator { func renderSwiftTypeAccessor(_ nominal: ImportedNominalType) -> DeclSyntax { let funcName = SwiftKitPrinting.Names.getType( module: st.swiftModuleName, - nominal: nominal) + nominal: nominal + ) return """ diff --git a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator.swift b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator.swift index e9936f697..ffc317fee 100644 --- a/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator.swift +++ b/Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator.swift @@ -13,9 +13,10 @@ //===----------------------------------------------------------------------===// import JavaTypes +import SwiftJavaConfigurationShared import SwiftSyntax import SwiftSyntaxBuilder -import SwiftJavaConfigurationShared + import struct Foundation.URL package class FFMSwift2JavaGenerator: Swift2JavaGenerator { @@ -39,7 +40,7 @@ package class FFMSwift2JavaGenerator: Swift2JavaGenerator { /// Because we need to write empty files for SwiftPM, keep track which files we didn't write yet, /// and write an empty file for those. - /// + /// /// Since Swift files in SwiftPM builds needs to be unique, we use this fact to flatten paths into plain names here. /// For uniqueness checking "did we write this file already", just checking the name should be sufficient. var expectedOutputSwiftFileNames: Set @@ -63,15 +64,17 @@ package class FFMSwift2JavaGenerator: Swift2JavaGenerator { // If we are forced to write empty files, construct the expected outputs. // It is sufficient to use file names only, since SwiftPM requires names to be unique within a module anyway. if translator.config.writeEmptyFiles ?? false { - self.expectedOutputSwiftFileNames = Set(translator.inputs.compactMap { (input) -> String? in - guard let fileName = input.path.split(separator: PATH_SEPARATOR).last else { - return nil - } - guard fileName.hasSuffix(".swift") else { - return nil + self.expectedOutputSwiftFileNames = Set( + translator.inputs.compactMap { (input) -> String? in + guard let fileName = input.path.split(separator: PATH_SEPARATOR).last else { + return nil + } + guard fileName.hasSuffix(".swift") else { + return nil + } + return String(fileName.replacing(".swift", with: "+SwiftJava.swift")) } - return String(fileName.replacing(".swift", with: "+SwiftJava.swift")) - }) + ) self.expectedOutputSwiftFileNames.insert("\(translator.swiftModuleName)Module+SwiftJava.swift") self.expectedOutputSwiftFileNames.insert("Foundation+SwiftJava.swift") } else { @@ -96,7 +99,7 @@ package class FFMSwift2JavaGenerator: Swift2JavaGenerator { extension FFMSwift2JavaGenerator { /// Default set Java imports for every generated file - static let defaultJavaImports: Array = [ + static let defaultJavaImports: [String] = [ "org.swift.swiftkit.core.*", "org.swift.swiftkit.core.util.*", "org.swift.swiftkit.ffm.*", @@ -115,7 +118,6 @@ extension FFMSwift2JavaGenerator { // ==== --------------------------------------------------------------------------------------------------------------- // MARK: File writing - extension FFMSwift2JavaGenerator { package func writeExportedJavaSources() throws { var printer = CodePrinter() @@ -146,8 +148,8 @@ extension FFMSwift2JavaGenerator { if let outputFile = try printer.writeContents( outputDirectory: javaOutputDirectory, javaPackagePath: javaPackagePath, - filename: filename) - { + filename: filename + ) { log.info("Generated: \((self.swiftModuleName + ".java").bold) (at \(outputFile.absoluteString))") } } @@ -286,7 +288,9 @@ extension FFMSwift2JavaGenerator { } func printNominal( - _ printer: inout CodePrinter, _ decl: ImportedNominalType, body: (inout CodePrinter) -> Void + _ printer: inout CodePrinter, + _ decl: ImportedNominalType, + body: (inout CodePrinter) -> Void ) { let parentProtocol: String if decl.swiftNominal.isReferenceType { @@ -298,7 +302,9 @@ extension FFMSwift2JavaGenerator { if decl.swiftNominal.isSendable { printer.print("@ThreadSafe // Sendable") } - printer.printBraceBlock("public final class \(decl.swiftNominal.name) extends FFMSwiftInstance implements \(parentProtocol)") { + printer.printBraceBlock( + "public final class \(decl.swiftNominal.name) extends FFMSwiftInstance implements \(parentProtocol)" + ) { printer in // Constants printClassConstants(printer: &printer) @@ -406,7 +412,8 @@ extension FFMSwift2JavaGenerator { } func printToStringMethod( - _ printer: inout CodePrinter, _ decl: ImportedNominalType + _ printer: inout CodePrinter, + _ decl: ImportedNominalType ) { printer.print( """ @@ -418,7 +425,8 @@ extension FFMSwift2JavaGenerator { + ")@" + $memorySegment(); } - """) + """ + ) } /// Print special helper methods for known types like Foundation.Data @@ -436,4 +444,3 @@ extension FFMSwift2JavaGenerator { } } - diff --git a/Sources/JExtractSwiftLib/FFM/ForeignValueLayouts.swift b/Sources/JExtractSwiftLib/FFM/ForeignValueLayouts.swift index 329efaad3..a06d7f25f 100644 --- a/Sources/JExtractSwiftLib/FFM/ForeignValueLayouts.swift +++ b/Sources/JExtractSwiftLib/FFM/ForeignValueLayouts.swift @@ -36,13 +36,13 @@ public struct ForeignValueLayout: CustomStringConvertible, Equatable { public init?(javaType: JavaType) { switch javaType { case .boolean: self = .SwiftBool - case .byte: self = .SwiftInt8 - case .char: self = .SwiftUInt16 - case .short: self = .SwiftInt16 - case .int: self = .SwiftInt32 - case .long: self = .SwiftInt64 - case .float: self = .SwiftFloat - case .double: self = .SwiftDouble + case .byte: self = .SwiftInt8 + case .char: self = .SwiftUInt16 + case .short: self = .SwiftInt16 + case .int: self = .SwiftInt32 + case .long: self = .SwiftInt64 + case .float: self = .SwiftFloat + case .double: self = .SwiftDouble case .javaForeignMemorySegment: self = .SwiftPointer case .array, .class, .void: return nil } diff --git a/Sources/JExtractSwiftLib/ImportedDecls.swift b/Sources/JExtractSwiftLib/ImportedDecls.swift index aa4014d21..7bb2f041c 100644 --- a/Sources/JExtractSwiftLib/ImportedDecls.swift +++ b/Sources/JExtractSwiftLib/ImportedDecls.swift @@ -47,14 +47,15 @@ package final class ImportedNominalType: ImportedDecl { init(swiftNominal: SwiftNominalTypeDeclaration, lookupContext: SwiftTypeLookupContext) throws { self.swiftNominal = swiftNominal - self.inheritedTypes = swiftNominal.inheritanceTypes?.compactMap { - try? SwiftType($0.type, lookupContext: lookupContext) - } ?? [] + self.inheritedTypes = + swiftNominal.inheritanceTypes?.compactMap { + try? SwiftType($0.type, lookupContext: lookupContext) + } ?? [] self.parent = swiftNominal.parent } var swiftType: SwiftType { - return .nominal(.init(nominalTypeDecl: swiftNominal)) + .nominal(.init(nominalTypeDecl: swiftNominal)) } var qualifiedName: String { @@ -108,7 +109,7 @@ extension ImportedEnumCase: Hashable { hasher.combine(ObjectIdentifier(self)) } public static func == (lhs: ImportedEnumCase, rhs: ImportedEnumCase) -> Bool { - return lhs === rhs + lhs === rhs } } @@ -148,8 +149,8 @@ public final class ImportedFunc: ImportedDecl, CustomStringConvertible { /// these would be exported here. var additionalJavaImports: Set { var imports: Set = [] -// imports += self.functionSignature.parameters.flatMap { $0.additionalJavaImports } -// imports += self.functionSignature.result.additionalJavaImports + // imports += self.functionSignature.parameters.flatMap { $0.additionalJavaImports } + // imports += self.functionSignature.result.additionalJavaImports return imports } @@ -176,20 +177,22 @@ public final class ImportedFunc: ImportedDecl, CustomStringConvertible { /// A display name to use to refer to the Swift declaration with its /// enclosing type, if there is one. public var displayName: String { - let prefix = switch self.apiKind { - case .getter: "getter:" - case .setter: "setter:" - case .enumCase: "case:" - case .function, .initializer: "" - case .subscriptGetter: "subscriptGetter:" - case .subscriptSetter: "subscriptSetter:" - } - - let context = if let parentType { - "\(parentType)." - } else { - "" - } + let prefix = + switch self.apiKind { + case .getter: "getter:" + case .setter: "setter:" + case .enumCase: "case:" + case .function, .initializer: "" + case .subscriptGetter: "subscriptGetter:" + case .subscriptSetter: "subscriptSetter:" + } + + let context = + if let parentType { + "\(parentType)." + } else { + "" + } return prefix + context + self.name } @@ -233,7 +236,7 @@ extension ImportedFunc: Hashable { hasher.combine(ObjectIdentifier(self)) } public static func == (lhs: ImportedFunc, rhs: ImportedFunc) -> Bool { - return lhs === rhs + lhs === rhs } } @@ -270,6 +273,6 @@ extension ImportedNominalType: Hashable { hasher.combine(ObjectIdentifier(self)) } public static func == (lhs: ImportedNominalType, rhs: ImportedNominalType) -> Bool { - return lhs === rhs + lhs === rhs } } diff --git a/Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift b/Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift index 568332c0f..f4c4882c6 100644 --- a/Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift +++ b/Sources/JExtractSwiftLib/JNI/JNIJavaTypeTranslator.swift @@ -32,7 +32,7 @@ enum JNIJavaTypeTranslator { case .int64: return .long case .uint64: return .long - + case .int, .uint: return .long case .float: return .float @@ -42,20 +42,23 @@ enum JNIJavaTypeTranslator { case .string: return .javaLangString case .unsafeRawPointer, .unsafeMutableRawPointer, - .unsafePointer, .unsafeMutablePointer, - .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, - .unsafeBufferPointer, .unsafeMutableBufferPointer, - .optional, - .foundationData, .foundationDataProtocol, - .essentialsData, .essentialsDataProtocol, - .array, - .foundationDate, .essentialsDate, - .foundationUUID, .essentialsUUID: + .unsafePointer, .unsafeMutablePointer, + .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, + .unsafeBufferPointer, .unsafeMutableBufferPointer, + .optional, + .foundationData, .foundationDataProtocol, + .essentialsData, .essentialsDataProtocol, + .array, + .foundationDate, .essentialsDate, + .foundationUUID, .essentialsUUID: return nil } } - static func indirectConversionStepSwiftType(for knownKind: SwiftKnownTypeDeclKind, from knownTypes: SwiftKnownTypes) -> SwiftType? { + static func indirectConversionStepSwiftType( + for knownKind: SwiftKnownTypeDeclKind, + from knownTypes: SwiftKnownTypes + ) -> SwiftType? { switch knownKind { case .int: knownTypes.int64 case .uint: knownTypes.uint64 @@ -66,17 +69,20 @@ enum JNIJavaTypeTranslator { .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, .unsafeBufferPointer, .unsafeMutableBufferPointer, - .optional, - .foundationData, .foundationDataProtocol, + .optional, + .foundationData, .foundationDataProtocol, .essentialsData, .essentialsDataProtocol, - .array, - .foundationDate, .essentialsDate, + .array, + .foundationDate, .essentialsDate, .foundationUUID, .essentialsUUID: nil } } - static func checkStep(for knownKind: SwiftKnownTypeDeclKind, from knownTypes: SwiftKnownTypes) -> JNISwift2JavaGenerator.NativeSwiftConversionCheck? { + static func checkStep( + for knownKind: SwiftKnownTypeDeclKind, + from knownTypes: SwiftKnownTypes + ) -> JNISwift2JavaGenerator.NativeSwiftConversionCheck? { switch knownKind { case .int: .check32BitIntOverflow(typeWithMinAndMax: knownTypes.int32) case .uint: .check32BitIntOverflow(typeWithMinAndMax: knownTypes.uint32) @@ -87,11 +93,11 @@ enum JNIJavaTypeTranslator { .unsafePointer, .unsafeMutablePointer, .unsafeRawBufferPointer, .unsafeMutableRawBufferPointer, .unsafeBufferPointer, .unsafeMutableBufferPointer, - .optional, - .foundationData, .foundationDataProtocol, + .optional, + .foundationData, .foundationDataProtocol, .essentialsData, .essentialsDataProtocol, - .array, - .foundationDate, .essentialsDate, + .array, + .foundationDate, .essentialsDate, .foundationUUID, .essentialsUUID: nil } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift index 9420a4a0d..5f9022806 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+InterfaceWrapperGeneration.swift @@ -95,8 +95,9 @@ extension JNISwift2JavaGenerator { struct JavaInterfaceProtocolWrapperGenerator { func generate(for type: ImportedNominalType) throws -> JavaInterfaceSwiftWrapper { if !type.initializers.isEmpty - || type.methods.contains(where: \.isStatic) - || type.variables.contains(where: \.isStatic) { + || type.methods.contains(where: \.isStatic) + || type.variables.contains(where: \.isStatic) + { throw JavaTranslationError.protocolStaticRequirementsNotSupported } @@ -154,7 +155,6 @@ extension JNISwift2JavaGenerator { ) } - private func translate(function: ImportedFunc) throws -> JavaInterfaceSwiftWrapper.Function { let parameters = try function.functionSignature.parameters.map { try self.translateParameter($0) @@ -171,8 +171,11 @@ extension JNISwift2JavaGenerator { ) } - private func translateVariable(getter: ImportedFunc, setter: ImportedFunc?) throws -> JavaInterfaceSwiftWrapper.Variable { - return try JavaInterfaceSwiftWrapper.Variable( + private func translateVariable( + getter: ImportedFunc, + setter: ImportedFunc? + ) throws -> JavaInterfaceSwiftWrapper.Variable { + try JavaInterfaceSwiftWrapper.Variable( swiftDecl: getter.swiftDecl, // they should be the same getter: translate(function: getter), setter: setter.map { try self.translate(function: $0) } @@ -300,8 +303,9 @@ extension JNISwift2JavaGenerator { } } - let inner: UpcallConversionStep = !allowNilForObjects ? - .unwrapOptional(.placeholder, message: "Upcall to \(methodName) unexpectedly returned nil") + let inner: UpcallConversionStep = + !allowNilForObjects + ? .unwrapOptional(.placeholder, message: "Upcall to \(methodName) unexpectedly returned nil") : .placeholder // We assume this is then a JExtracted Swift class @@ -355,100 +359,100 @@ extension JNISwift2JavaGenerator { } } - /// Describes how to convert values from and to wrap-java types - enum UpcallConversionStep { - case placeholder - - case constant(String) +/// Describes how to convert values from and to wrap-java types +enum UpcallConversionStep { + case placeholder - indirect case toJavaWrapper( - UpcallConversionStep, - name: String, - nominalType: SwiftNominalType - ) + case constant(String) - indirect case toSwiftClass( - UpcallConversionStep, - name: String, - nominalType: SwiftNominalType - ) + indirect case toJavaWrapper( + UpcallConversionStep, + name: String, + nominalType: SwiftNominalType + ) - indirect case unwrapOptional( - UpcallConversionStep, - message: String - ) + indirect case toSwiftClass( + UpcallConversionStep, + name: String, + nominalType: SwiftNominalType + ) - indirect case toJavaOptional(UpcallConversionStep) + indirect case unwrapOptional( + UpcallConversionStep, + message: String + ) - indirect case fromJavaOptional(UpcallConversionStep) + indirect case toJavaOptional(UpcallConversionStep) - indirect case map(UpcallConversionStep, body: UpcallConversionStep) + indirect case fromJavaOptional(UpcallConversionStep) - /// Returns the conversion string applied to the placeholder. - func render(_ printer: inout CodePrinter, _ placeholder: String) -> String { - switch self { - case .placeholder: - return placeholder + indirect case map(UpcallConversionStep, body: UpcallConversionStep) - case .constant(let constant): - return constant - - case .toJavaWrapper(let inner, let name, let nominalType): - let inner = inner.render(&printer, placeholder) - printer.print( - """ - let \(name)Class = try! JavaClass<\(nominalType.nominalTypeDecl.generatedJavaClassMacroName)>(environment: JavaVirtualMachine.shared().environment()) - let \(name)Pointer = UnsafeMutablePointer<\(nominalType.nominalTypeDecl.qualifiedName)>.allocate(capacity: 1) - \(name)Pointer.initialize(to: \(inner)) - """ - ) + /// Returns the conversion string applied to the placeholder. + func render(_ printer: inout CodePrinter, _ placeholder: String) -> String { + switch self { + case .placeholder: + return placeholder + + case .constant(let constant): + return constant + + case .toJavaWrapper(let inner, let name, let nominalType): + let inner = inner.render(&printer, placeholder) + printer.print( + """ + let \(name)Class = try! JavaClass<\(nominalType.nominalTypeDecl.generatedJavaClassMacroName)>(environment: JavaVirtualMachine.shared().environment()) + let \(name)Pointer = UnsafeMutablePointer<\(nominalType.nominalTypeDecl.qualifiedName)>.allocate(capacity: 1) + \(name)Pointer.initialize(to: \(inner)) + """ + ) - return "\(name)Class.wrapMemoryAddressUnsafe(Int64(Int(bitPattern: \(name)Pointer)))" + return "\(name)Class.wrapMemoryAddressUnsafe(Int64(Int(bitPattern: \(name)Pointer)))" - case .toSwiftClass(let inner, let name, let nominalType): - let inner = inner.render(&printer, placeholder) + case .toSwiftClass(let inner, let name, let nominalType): + let inner = inner.render(&printer, placeholder) - // The wrap-java methods will return null - printer.print( - """ - let \(name)MemoryAddress$ = \(inner).as(JavaJNISwiftInstance.self)!.memoryAddress() - let \(name)Pointer = UnsafeMutablePointer<\(nominalType.nominalTypeDecl.qualifiedName)>(bitPattern: Int(\(name)MemoryAddress$))! - """ - ) + // The wrap-java methods will return null + printer.print( + """ + let \(name)MemoryAddress$ = \(inner).as(JavaJNISwiftInstance.self)!.memoryAddress() + let \(name)Pointer = UnsafeMutablePointer<\(nominalType.nominalTypeDecl.qualifiedName)>(bitPattern: Int(\(name)MemoryAddress$))! + """ + ) - return "\(name)Pointer.pointee" + return "\(name)Pointer.pointee" - case .unwrapOptional(let inner, let message): - let inner = inner.render(&printer, placeholder) + case .unwrapOptional(let inner, let message): + let inner = inner.render(&printer, placeholder) - printer.print( - """ - guard let unwrapped$ = \(inner) else { - fatalError("\(message)") - } - """ - ) + printer.print( + """ + guard let unwrapped$ = \(inner) else { + fatalError("\(message)") + } + """ + ) - return "unwrapped$" + return "unwrapped$" - case .toJavaOptional(let inner): - let inner = inner.render(&printer, placeholder) - return "\(inner).toJavaOptional()" + case .toJavaOptional(let inner): + let inner = inner.render(&printer, placeholder) + return "\(inner).toJavaOptional()" - case .fromJavaOptional(let inner): - let inner = inner.render(&printer, placeholder) - return "Optional(javaOptional: \(inner))" + case .fromJavaOptional(let inner): + let inner = inner.render(&printer, placeholder) + return "Optional(javaOptional: \(inner))" - case .map(let inner, let body): - let inner = inner.render(&printer, placeholder) - var printer = CodePrinter() - printer.printBraceBlock("\(inner).map") { printer in - let body = body.render(&printer, "$0") - printer.print("return \(body)") - } - return printer.finalize() + case .map(let inner, let body): + let inner = inner.render(&printer, placeholder) + var printer = CodePrinter() + printer.printBraceBlock("\(inner).map") { printer in + let body = body.render(&printer, "$0") + printer.print("return \(body)") } + return printer.finalize() } + } } extension SwiftType { @@ -464,7 +468,8 @@ extension SwiftType { return false } switch knownType { - case .bool, .int, .uint, .int8, .uint8, .int16, .uint16, .int32, .uint32, .int64, .uint64, .float, .double, .string, .void: + case .bool, .int, .uint, .int8, .uint8, .int16, .uint16, .int32, .uint32, .int64, .uint64, .float, .double, + .string, .void: return true default: return false diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift index 2a9eb57ce..ffc5fffdb 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaBindingsPrinting.swift @@ -20,14 +20,14 @@ import OrderedCollections extension JNISwift2JavaGenerator { /// Default set Java imports for every generated file - static let defaultJavaImports: Array = [ + static let defaultJavaImports: [String] = [ "org.swift.swiftkit.core.*", "org.swift.swiftkit.core.util.*", "java.util.*", "java.util.concurrent.atomic.AtomicBoolean", // NonNull, Unsigned and friends - "org.swift.swiftkit.core.annotations.*" + "org.swift.swiftkit.core.annotations.*", ] } @@ -86,8 +86,6 @@ extension JNISwift2JavaGenerator { } } - - private func printModule(_ printer: inout CodePrinter) { printHeader(&printer) printPackage(&printer) @@ -97,7 +95,7 @@ extension JNISwift2JavaGenerator { printer.print( """ static final String LIB_NAME = "\(swiftModuleName)"; - + static { System.loadLibrary(SwiftLibraries.LIB_NAME_SWIFT_JAVA); System.loadLibrary(LIB_NAME); @@ -173,7 +171,7 @@ extension JNISwift2JavaGenerator { printer.print( """ static final String LIB_NAME = "\(swiftModuleName)"; - + @SuppressWarnings("unused") private static final boolean INITIALIZED_LIBS = initializeLibs(); static boolean initializeLibs() { @@ -221,7 +219,7 @@ extension JNISwift2JavaGenerator { public static \(decl.swiftNominal.name) wrapMemoryAddressUnsafe(long selfPointer, SwiftArena swiftArena) { return new \(decl.swiftNominal.name)(selfPointer, swiftArena); } - + public static \(decl.swiftNominal.name) wrapMemoryAddressUnsafe(long selfPointer) { return new \(decl.swiftNominal.name)(selfPointer, SwiftMemoryManagement.DEFAULT_SWIFT_JAVA_AUTO_ARENA); } @@ -232,14 +230,14 @@ extension JNISwift2JavaGenerator { """ /** Pointer to the "self". */ private final long selfPointer; - + /** Used to track additional state of the underlying object, e.g. if it was explicitly destroyed. */ private final AtomicBoolean $state$destroyed = new AtomicBoolean(false); - + public long $memoryAddress() { return this.selfPointer; } - + @Override public AtomicBoolean $statusDestroyedFlag() { return $state$destroyed; @@ -345,7 +343,9 @@ extension JNISwift2JavaGenerator { } private func printNominal( - _ printer: inout CodePrinter, _ decl: ImportedNominalType, body: (inout CodePrinter) -> Void + _ printer: inout CodePrinter, + _ decl: ImportedNominalType, + body: (inout CodePrinter) -> Void ) { if decl.swiftNominal.isSendable { printer.print("@ThreadSafe // Sendable") @@ -361,7 +361,9 @@ extension JNISwift2JavaGenerator { .filter { $0.kind == .protocol } .map(\.name) let implementsClause = implements.joined(separator: ", ") - printer.printBraceBlock("\(modifiers.joined(separator: " ")) class \(decl.swiftNominal.name) implements \(implementsClause)") { printer in + printer.printBraceBlock( + "\(modifiers.joined(separator: " ")) class \(decl.swiftNominal.name) implements \(implementsClause)" + ) { printer in body(&printer) } } @@ -412,7 +414,9 @@ extension JNISwift2JavaGenerator { continue } let arenaArgument = translatedCase.requiresSwiftArena ? "swiftArena$" : "" - printer.print("case \(enumCase.name.uppercased()): return this.getAs\(enumCase.name.firstCharacterUppercased)(\(arenaArgument)).orElseThrow();") + printer.print( + "case \(enumCase.name.uppercased()): return this.getAs\(enumCase.name.firstCharacterUppercased)(\(arenaArgument)).orElseThrow();" + ) } } printer.print(#"throw new RuntimeException("Unknown discriminator value " + discriminator);"#) @@ -438,8 +442,11 @@ extension JNISwift2JavaGenerator { let caseName = enumCase.name.firstCharacterUppercased // Print record - printer.printBraceBlock("public record \(caseName)(\(members.joined(separator: ", "))) implements Case") { printer in - let nativeParameters = zip(translatedCase.translatedValues, translatedCase.parameterConversions).flatMap { value, conversion in + printer.printBraceBlock("public record \(caseName)(\(members.joined(separator: ", "))) implements Case") { + printer in + let nativeParameters = zip(translatedCase.translatedValues, translatedCase.parameterConversions).flatMap { + value, + conversion in ["\(conversion.native.javaType) \(value.parameter.name)"] } @@ -499,12 +506,12 @@ extension JNISwift2JavaGenerator { let apiParams = functionType.parameters.map({ $0.parameter.renderParameter() }) printer.print( - """ - @FunctionalInterface - public interface \(functionType.name) { - \(functionType.result.javaType) apply(\(apiParams.joined(separator: ", "))); - } - """ + """ + @FunctionalInterface + public interface \(functionType.name) { + \(functionType.result.javaType) apply(\(apiParams.joined(separator: ", "))); + } + """ ) } @@ -535,14 +542,16 @@ extension JNISwift2JavaGenerator { var parameters = translatedDecl.translatedFunctionSignature.parameters.map { $0.parameter.renderParameter() } let throwsClause = translatedDecl.throwsClause() - let generics = translatedDecl.translatedFunctionSignature.parameters.reduce(into: [(String, [JavaType])]()) { generics, parameter in + let generics = translatedDecl.translatedFunctionSignature.parameters.reduce(into: [(String, [JavaType])]()) { + generics, + parameter in guard case .generic(let name, let extends) = parameter.parameter.type else { return } generics.append((name, extends)) } - .map { "\($0) extends \($1.compactMap(\.className).joined(separator: " & "))" } - .joined(separator: ", ") + .map { "\($0) extends \($1.compactMap(\.className).joined(separator: " & "))" } + .joined(separator: ", ") if !generics.isEmpty { modifiers.append("<" + generics + ">") @@ -557,7 +566,8 @@ extension JNISwift2JavaGenerator { // If we have enabled javaCallbacks we must emit default // arena methods for protocols, as this is what // Swift will call into, when you call a interface from Swift. - let shouldGenerateGlobalArenaVariation = config.effectiveMemoryManagementMode.requiresGlobalArena && translatedSignature.requiresSwiftArena + let shouldGenerateGlobalArenaVariation = + config.effectiveMemoryManagementMode.requiresGlobalArena && translatedSignature.requiresSwiftArena let isParentProtocol = importedFunc?.parentType?.asNominalType?.isProtocol ?? false if shouldGenerateGlobalArenaVariation { @@ -575,7 +585,9 @@ extension JNISwift2JavaGenerator { modifiers.insert("default", at: 1) } - printer.printBraceBlock("\(annotationsStr)\(modifiers.joined(separator: " ")) \(resultType) \(translatedDecl.name)(\(parametersStr))\(throwsClause)") { printer in + printer.printBraceBlock( + "\(annotationsStr)\(modifiers.joined(separator: " ")) \(resultType) \(translatedDecl.name)(\(parametersStr))\(throwsClause)" + ) { printer in let globalArenaName = "SwiftMemoryManagement.DEFAULT_SWIFT_JAVA_AUTO_ARENA" let arguments = translatedDecl.translatedFunctionSignature.parameters.map(\.parameter.name) + [globalArenaName] let call = "\(translatedDecl.name)(\(arguments.joined(separator: ", ")))" @@ -598,7 +610,8 @@ extension JNISwift2JavaGenerator { in: &printer ) } - let signature = "\(annotationsStr)\(modifiers.joined(separator: " ")) \(resultType) \(translatedDecl.name)(\(parameters.joined(separator: ", ")))\(throwsClause)" + let signature = + "\(annotationsStr)\(modifiers.joined(separator: " ")) \(resultType) \(translatedDecl.name)(\(parameters.joined(separator: ", ")))\(throwsClause)" if skipMethodBody { printer.print("\(signature);") } else { @@ -620,7 +633,7 @@ extension JNISwift2JavaGenerator { parameters += nativeSignature.result.outParameters let renderedParameters = parameters.map { javaParameter in - "\(javaParameter.type) \(javaParameter.name)" + "\(javaParameter.type) \(javaParameter.name)" }.joined(separator: ", ") printer.print("private static native \(resultType) \(translatedDecl.nativeFunctionName)(\(renderedParameters));") @@ -647,14 +660,17 @@ extension JNISwift2JavaGenerator { // Indirect return receivers for outParameter in translatedFunctionSignature.resultType.outParameters { - printer.print("\(outParameter.type) \(outParameter.name) = \(outParameter.allocation.render(type: outParameter.type));") + printer.print( + "\(outParameter.type) \(outParameter.name) = \(outParameter.allocation.render(type: outParameter.type));" + ) arguments.append(outParameter.name) } //=== Part 3: Downcall. // TODO: If we always generate a native method and a "public" method, we can actually choose our own thunk names // using the registry? - let downcall = "\(translatedDecl.parentName).\(translatedDecl.nativeFunctionName)(\(arguments.joined(separator: ", ")))" + let downcall = + "\(translatedDecl.parentName).\(translatedDecl.nativeFunctionName)(\(arguments.joined(separator: ", ")))" //=== Part 4: Convert the return value. if translatedFunctionSignature.resultType.javaType.isVoid { diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift index a436ab198..436956d2b 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+JavaTranslation.swift @@ -105,7 +105,10 @@ extension JNISwift2JavaGenerator { let resultName = parameter.name ?? "arg\(idx)" let result = SwiftResult(convention: .direct, type: parameter.type) var translatedResult = try self.translate(swiftResult: result, resultName: resultName) - translatedResult.conversion = .replacingPlaceholder(translatedResult.conversion, placeholder: "$nativeParameters.\(resultName)") + translatedResult.conversion = .replacingPlaceholder( + translatedResult.conversion, + placeholder: "$nativeParameters.\(resultName)" + ) let nativeResult = try nativeTranslation.translate(swiftResult: result, resultName: resultName) return (translated: translatedResult, native: nativeResult) } @@ -115,12 +118,16 @@ extension JNISwift2JavaGenerator { let nativeParametersType = JavaType.class(package: nil, name: "\(caseName)._NativeParameters") let getAsCaseName = "getAs\(caseName)" // If the case has no parameters, we can skip the native call. - let constructRecordConversion = JavaNativeConversionStep.method(.constant("Optional"), function: "of", arguments: [ - .constructJavaClass( - .commaSeparated(conversions.map(\.translated.conversion)), - .class(package: nil,name: caseName) - ) - ]) + let constructRecordConversion = JavaNativeConversionStep.method( + .constant("Optional"), + function: "of", + arguments: [ + .constructJavaClass( + .commaSeparated(conversions.map(\.translated.conversion)), + .class(package: nil, name: caseName) + ) + ] + ) var exceptions: [JavaExceptionType] = [] if enumCase.parameters.contains(where: \.type.isArchDependingInteger) { @@ -140,8 +147,11 @@ extension JNISwift2JavaGenerator { parameter: JavaParameter(name: "self", type: .long), conversion: .aggregate( [ - .ifStatement(.constant("getDiscriminator() != Discriminator.\(caseName.uppercased())"), thenExp: .constant("return Optional.empty();")), - .valueMemoryAddress(.placeholder) + .ifStatement( + .constant("getDiscriminator() != Discriminator.\(caseName.uppercased())"), + thenExp: .constant("return Optional.empty();") + ), + .valueMemoryAddress(.placeholder), ] ) ), @@ -149,7 +159,9 @@ extension JNISwift2JavaGenerator { resultType: TranslatedResult( javaType: .class(package: nil, name: "Optional<\(caseName)>"), outParameters: conversions.flatMap(\.translated.outParameters), - conversion: enumCase.parameters.isEmpty ? constructRecordConversion : .aggregate(variable: ("$nativeParameters", nativeParametersType), [constructRecordConversion]) + conversion: enumCase.parameters.isEmpty + ? constructRecordConversion + : .aggregate(variable: ("$nativeParameters", nativeParametersType), [constructRecordConversion]) ), exceptions: exceptions ), @@ -192,11 +204,12 @@ extension JNISwift2JavaGenerator { let parentName = decl.parentType?.asNominalType?.nominalTypeDecl.qualifiedName ?? swiftModuleName // Name. - let javaName = switch decl.apiKind { - case .getter, .subscriptGetter: decl.javaGetterName - case .setter, .subscriptSetter: decl.javaSetterName - case .function, .initializer, .enumCase: decl.name - } + let javaName = + switch decl.apiKind { + case .getter, .subscriptGetter: decl.javaGetterName + case .setter, .subscriptSetter: decl.javaSetterName + case .function, .initializer, .enumCase: decl.name + } // Swift -> Java var translatedFunctionSignature = try translate( @@ -292,7 +305,7 @@ extension JNISwift2JavaGenerator { parentName: String ) throws -> TranslatedFunctionSignature { let parameters = try translateParameters( - functionSignature.parameters.map { ($0.parameterName, $0.type )}, + functionSignature.parameters.map { ($0.parameterName, $0.type) }, methodName: methodName, parentName: parentName, genericParameters: functionSignature.genericParameters, @@ -484,7 +497,10 @@ extension JNISwift2JavaGenerator { ) case .genericParameter(let generic): - if let concreteTy = swiftType.typeIn(genericParameters: genericParameters, genericRequirements: genericRequirements) { + if let concreteTy = swiftType.typeIn( + genericParameters: genericParameters, + genericRequirements: genericRequirements + ) { return try translateProtocolParameter( protocolType: concreteTy, parameterName: parameterName, @@ -542,12 +558,22 @@ extension JNISwift2JavaGenerator { javaType: translatedFutureType, annotations: result.annotations, outParameters: result.outParameters + [futureOutParameter], - conversion: .aggregate(variable: nil, [ - .print(.placeholder), // Make the downcall - .method(.constant("future$"), function: "thenApply", arguments: [ - .lambda(args: ["futureResult$"], body: .replacingPlaceholder(result.conversion, placeholder: "futureResult$")) - ]) - ]) + conversion: .aggregate( + variable: nil, + [ + .print(.placeholder), // Make the downcall + .method( + .constant("future$"), + function: "thenApply", + arguments: [ + .lambda( + args: ["futureResult$"], + body: .replacingPlaceholder(result.conversion, placeholder: "futureResult$") + ) + ] + ), + ] + ) ) // Update native function @@ -569,10 +595,18 @@ extension JNISwift2JavaGenerator { ) throws -> TranslatedParameter { switch protocolType { case .nominal: - return try translateProtocolParameter(protocolTypes: [protocolType], parameterName: parameterName, javaGenericName: javaGenericName) + return try translateProtocolParameter( + protocolTypes: [protocolType], + parameterName: parameterName, + javaGenericName: javaGenericName + ) case .composite(let types): - return try translateProtocolParameter(protocolTypes: types, parameterName: parameterName, javaGenericName: javaGenericName) + return try translateProtocolParameter( + protocolTypes: types, + parameterName: parameterName, + javaGenericName: javaGenericName + ) default: throw JavaTranslationError.unsupportedSwiftType(protocolType) @@ -621,7 +655,8 @@ extension JNISwift2JavaGenerator { throw JavaTranslationError.unsupportedSwiftType(swiftType) } - guard let translatedClass = javaType.optionalType, let placeholderValue = javaType.optionalPlaceholderValue else { + guard let translatedClass = javaType.optionalType, let placeholderValue = javaType.optionalPlaceholderValue + else { throw JavaTranslationError.unsupportedSwiftType(swiftType) } @@ -633,7 +668,7 @@ extension JNISwift2JavaGenerator { ), conversion: .commaSeparated([ .isOptionalPresent, - .method(.placeholder, function: "orElse", arguments: [.constant(placeholderValue)]) + .method(.placeholder, function: "orElse", arguments: [.constant(placeholderValue)]), ]) ) } @@ -994,7 +1029,7 @@ extension JNISwift2JavaGenerator { /// Function signature of the native function that will be implemented by Swift let nativeFunctionSignature: NativeFunctionSignature - + /// Annotations to include on the Java function declaration var annotations: [JavaAnnotation] { self.translatedFunctionSignature.annotations @@ -1005,7 +1040,9 @@ extension JNISwift2JavaGenerator { return isThrowing && !isAsync ? " throws Exception" : "" } - let signatureExceptions = translatedFunctionSignature.exceptions.compactMap(\.type.className).joined(separator: ", ") + let signatureExceptions = translatedFunctionSignature.exceptions.compactMap(\.type.className).joined( + separator: ", " + ) return " throws \(signatureExceptions)\(isThrowing ? ", Exception" : "")" } } @@ -1023,7 +1060,7 @@ extension JNISwift2JavaGenerator { } var requiresSwiftArena: Bool { - return self.resultType.conversion.requiresSwiftArena + self.resultType.conversion.requiresSwiftArena } } @@ -1115,9 +1152,20 @@ extension JNISwift2JavaGenerator { case isOptionalPresent - indirect case combinedValueToOptional(JavaNativeConversionStep, JavaType, resultName: String, valueType: JavaType, valueSizeInBytes: Int, optionalType: String) + indirect case combinedValueToOptional( + JavaNativeConversionStep, + JavaType, + resultName: String, + valueType: JavaType, + valueSizeInBytes: Int, + optionalType: String + ) - indirect case ternary(JavaNativeConversionStep, thenExp: JavaNativeConversionStep, elseExp: JavaNativeConversionStep) + indirect case ternary( + JavaNativeConversionStep, + thenExp: JavaNativeConversionStep, + elseExp: JavaNativeConversionStep + ) indirect case equals(JavaNativeConversionStep, JavaNativeConversionStep) @@ -1148,7 +1196,11 @@ extension JNISwift2JavaGenerator { /// Perform multiple conversions using the same input. case aggregate(variable: (name: String, type: JavaType)? = nil, [JavaNativeConversionStep]) - indirect case ifStatement(JavaNativeConversionStep, thenExp: JavaNativeConversionStep, elseExp: JavaNativeConversionStep? = nil) + indirect case ifStatement( + JavaNativeConversionStep, + thenExp: JavaNativeConversionStep, + elseExp: JavaNativeConversionStep? = nil + ) /// Access a member of the value indirect case replacingPlaceholder(JavaNativeConversionStep, placeholder: String) @@ -1181,7 +1233,7 @@ extension JNISwift2JavaGenerator { return "\(placeholder)_\(component)" case .commaSeparated(let list): - return list.map({ $0.render(&printer, placeholder)}).joined(separator: ", ") + return list.map({ $0.render(&printer, placeholder) }).joined(separator: ", ") case .valueMemoryAddress: return "\(placeholder).$memoryAddress()" @@ -1193,7 +1245,7 @@ extension JNISwift2JavaGenerator { case .constructSwiftValue(let inner, let javaType): let inner = inner.render(&printer, placeholder) return "new \(javaType.className!)(\(inner), swiftArena$)" - + case .wrapMemoryAddressUnsafe(let inner, let javaType): let inner = inner.render(&printer, placeholder) return "\(javaType.className!).wrapMemoryAddressUnsafe(\(inner), swiftArena$)" @@ -1206,7 +1258,6 @@ extension JNISwift2JavaGenerator { let inner = inner.render(&printer, placeholder) return "\(function)(\(inner))" - case .isOptionalPresent: return "(byte) (\(placeholder).isPresent() ? 1 : 0)" @@ -1216,7 +1267,14 @@ extension JNISwift2JavaGenerator { let argsStr = args.joined(separator: ", ") return "\(inner).\(methodName)(\(argsStr))" - case .combinedValueToOptional(let combined, let combinedType, let resultName, let valueType, let valueSizeInBytes, let optionalType): + case .combinedValueToOptional( + let combined, + let combinedType, + let resultName, + let valueType, + let valueSizeInBytes, + let optionalType + ): let combined = combined.render(&printer, placeholder) printer.print( """ @@ -1228,7 +1286,9 @@ extension JNISwift2JavaGenerator { if valueType == .boolean { printer.print("boolean \(resultName)_value$ = ((byte) (\(resultName)_combined$ >> 8)) != 0;") } else { - printer.print("\(valueType) \(resultName)_value$ = (\(valueType)) (\(resultName)_combined$ >> \(valueSizeInBytes * 8));") + printer.print( + "\(valueType) \(resultName)_value$ = (\(valueType)) (\(resultName)_combined$ >> \(valueSizeInBytes * 8));" + ) } return "\(resultName)_discriminator$ == 1 ? \(optionalType).of(\(resultName)_value$) : \(optionalType).empty()" @@ -1364,7 +1424,11 @@ extension JNISwift2JavaGenerator { enum JavaTranslationError: Error { case unsupportedSwiftType(SwiftType, fileID: String, line: Int) - static func unsupportedSwiftType(_ type: SwiftType, _fileID: String = #fileID, _line: Int = #line) -> JavaTranslationError { + static func unsupportedSwiftType( + _ type: SwiftType, + _fileID: String = #fileID, + _line: Int = #line + ) -> JavaTranslationError { .unsupportedSwiftType(type, fileID: _fileID, line: _line) } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift index cd8b5a25a..5bbeff4ea 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+NativeTranslation.swift @@ -16,7 +16,7 @@ import JavaTypes import SwiftJavaConfigurationShared extension JNISwift2JavaGenerator { - + struct NativeJavaTranslation { let config: Configuration let javaPackage: String @@ -46,19 +46,20 @@ extension JNISwift2JavaGenerator { } // Lower the self parameter. - let nativeSelf: NativeParameter? = switch functionSignature.selfParameter { - case .instance(let selfParameter): - try translateParameter( - type: selfParameter.type, - parameterName: selfParameter.parameterName ?? "self", - methodName: methodName, - parentName: parentName, - genericParameters: functionSignature.genericParameters, - genericRequirements: functionSignature.genericRequirements - ) - case nil, .initializer(_), .staticMethod(_): - nil - } + let nativeSelf: NativeParameter? = + switch functionSignature.selfParameter { + case .instance(let selfParameter): + try translateParameter( + type: selfParameter.type, + parameterName: selfParameter.parameterName ?? "self", + methodName: methodName, + parentName: parentName, + genericParameters: functionSignature.genericParameters, + genericRequirements: functionSignature.genericRequirements + ) + case nil, .initializer(_), .staticMethod(_): + nil + } let result = try translate(swiftResult: functionSignature.result) @@ -131,18 +132,24 @@ extension JNISwift2JavaGenerator { default: guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(type) } - let indirectStepType = JNIJavaTypeTranslator.indirectConversionStepSwiftType(for: knownType, from: knownTypes) + let indirectStepType = JNIJavaTypeTranslator.indirectConversionStepSwiftType( + for: knownType, + from: knownTypes + ) let indirectCheck = JNIJavaTypeTranslator.checkStep(for: knownType, from: knownTypes) return NativeParameter( parameters: [ JavaParameter(name: parameterName, type: javaType) ], - conversion: indirectStepType != nil ? .labelessAssignmentOfVariable(.placeholder, swiftType: type) : .initFromJNI(.placeholder, swiftType: type), + conversion: indirectStepType != nil + ? .labelessAssignmentOfVariable(.placeholder, swiftType: type) + : .initFromJNI(.placeholder, swiftType: type), indirectConversion: indirectStepType.flatMap { .initFromJNI(.placeholder, swiftType: $0) }, conversionCheck: indirectCheck ) @@ -163,7 +170,8 @@ extension JNISwift2JavaGenerator { .unwrapOptional( .placeholder, name: parameterName, - fatalErrorMessage: "\(parameterName) was null in call to \\(#function), but Swift requires non-optional!" + fatalErrorMessage: + "\(parameterName) was null in call to \\(#function), but Swift requires non-optional!" ), wrapperName: nominalTypeName ), @@ -207,7 +215,10 @@ extension JNISwift2JavaGenerator { return NativeParameter( parameters: [ - JavaParameter(name: parameterName, type: .class(package: javaPackage, name: "\(parentName).\(methodName).\(parameterName)")) + JavaParameter( + name: parameterName, + type: .class(package: javaPackage, name: "\(parentName).\(methodName).\(parameterName)") + ) ], conversion: .escapingClosureLowering( syntheticFunction: syntheticFunction, @@ -233,7 +244,10 @@ extension JNISwift2JavaGenerator { return NativeParameter( parameters: [ - JavaParameter(name: parameterName, type: .class(package: javaPackage, name: "\(parentName).\(methodName).\(parameterName)")) + JavaParameter( + name: parameterName, + type: .class(package: javaPackage, name: "\(parentName).\(methodName).\(parameterName)") + ) ], conversion: .closureLowering( parameters: parameters, @@ -288,7 +302,12 @@ extension JNISwift2JavaGenerator { ) throws -> NativeParameter { switch protocolType { case .nominal(let nominalType): - return try translateProtocolParameter(protocolTypes: [nominalType], methodName: methodName, parameterName: parameterName, parentName: parentName) + return try translateProtocolParameter( + protocolTypes: [nominalType], + methodName: methodName, + parameterName: parameterName, + parentName: parentName + ) case .composite(let types): let protocolTypes = try types.map { @@ -298,7 +317,12 @@ extension JNISwift2JavaGenerator { return nominalTypeName } - return try translateProtocolParameter(protocolTypes: protocolTypes, methodName: methodName, parameterName: parameterName, parentName: parentName) + return try translateProtocolParameter( + protocolTypes: protocolTypes, + methodName: methodName, + parameterName: parameterName, + parentName: parentName + ) default: throw JavaTranslationError.unsupportedSwiftType(protocolType) @@ -349,14 +373,15 @@ extension JNISwift2JavaGenerator { if let knownType = nominalType.nominalTypeDecl.knownTypeKind { guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(swiftType) } return NativeParameter( parameters: [ JavaParameter(name: discriminatorName, type: .byte), - JavaParameter(name: valueName, type: javaType) + JavaParameter(name: valueName, type: javaType), ], conversion: .optionalLowering( .initFromJNI(.placeholder, swiftType: swiftType), @@ -414,7 +439,8 @@ extension JNISwift2JavaGenerator { case .nominal(let nominalType): if let knownType = nominalType.nominalTypeDecl.knownTypeKind { guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(swiftType) } @@ -495,7 +521,8 @@ extension JNISwift2JavaGenerator { } guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(type) } @@ -530,7 +557,8 @@ extension JNISwift2JavaGenerator { case .nominal(let nominal): if let knownType = nominal.nominalTypeDecl.knownTypeKind { guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(type) } @@ -585,7 +613,9 @@ extension JNISwift2JavaGenerator { ) default: - guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), javaType.implementsJavaValue else { + guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(swiftResult.type) } @@ -633,7 +663,8 @@ extension JNISwift2JavaGenerator { case .nominal(let nominalType): if let knownType = nominalType.nominalTypeDecl.knownTypeKind { guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(.array(elementType)) } @@ -652,18 +683,21 @@ extension JNISwift2JavaGenerator { return NativeResult( javaType: .array(.long), conversion: - .getJNIValue( - .method( - .placeholder, - function: "map", - arguments: [ - (nil, .closure( + .getJNIValue( + .method( + .placeholder, + function: "map", + arguments: [ + ( + nil, + .closure( args: ["object$"], body: .allocateSwiftValue(.constant("object$"), name: "object$", swiftType: elementType) - )) - ] - ) - ), + ) + ) + ] + ) + ), outParameters: [] ) @@ -680,13 +714,14 @@ extension JNISwift2JavaGenerator { case .nominal(let nominalType): if let knownType = nominalType.nominalTypeDecl.knownTypeKind { guard let javaType = JNIJavaTypeTranslator.translate(knownType: knownType, config: self.config), - javaType.implementsJavaValue else { + javaType.implementsJavaValue + else { throw JavaTranslationError.unsupportedSwiftType(elementType) } return NativeParameter( parameters: [ - JavaParameter(name: parameterName, type: .array(javaType)), + JavaParameter(name: parameterName, type: .array(javaType)) ], conversion: .initFromJNI(.placeholder, swiftType: .array(elementType)), indirectConversion: nil, @@ -705,14 +740,20 @@ extension JNISwift2JavaGenerator { .initFromJNI(.placeholder, swiftType: .array(self.knownTypes.int64)), function: "map", arguments: [ - (nil, .closure( - args: ["pointer$"], - body: .pointee(.extractSwiftValue( - .constant("pointer$"), - swiftType: elementType, - allowNil: false, - convertLongFromJNI: false - )))) + ( + nil, + .closure( + args: ["pointer$"], + body: .pointee( + .extractSwiftValue( + .constant("pointer$"), + swiftType: elementType, + allowNil: false, + convertLongFromJNI: false + ) + ) + ) + ) ] ), indirectConversion: nil, @@ -803,7 +844,7 @@ extension JNISwift2JavaGenerator { indirect case pointee(NativeSwiftConversionStep) indirect case closureLowering(parameters: [NativeParameter], result: NativeResult) - + /// Escaping closure lowering using the protocol infrastructure. /// This uses UpcallConversionStep for full support of optionals, arrays, custom types, etc. indirect case escapingClosureLowering( @@ -817,11 +858,26 @@ extension JNISwift2JavaGenerator { indirect case optionalChain(NativeSwiftConversionStep) - indirect case optionalRaisingWidenIntegerType(NativeSwiftConversionStep, resultName: String, valueType: JavaType, combinedSwiftType: SwiftKnownTypeDeclKind, valueSizeInBytes: Int) + indirect case optionalRaisingWidenIntegerType( + NativeSwiftConversionStep, + resultName: String, + valueType: JavaType, + combinedSwiftType: SwiftKnownTypeDeclKind, + valueSizeInBytes: Int + ) - indirect case optionalRaisingIndirectReturn(NativeSwiftConversionStep, returnType: JavaType, discriminatorParameterName: String, placeholderValue: NativeSwiftConversionStep) + indirect case optionalRaisingIndirectReturn( + NativeSwiftConversionStep, + returnType: JavaType, + discriminatorParameterName: String, + placeholderValue: NativeSwiftConversionStep + ) - indirect case method(NativeSwiftConversionStep, function: String, arguments: [(String?, NativeSwiftConversionStep)] = []) + indirect case method( + NativeSwiftConversionStep, + function: String, + arguments: [(String?, NativeSwiftConversionStep)] = [] + ) indirect case member(NativeSwiftConversionStep, member: String) @@ -885,7 +941,7 @@ extension JNISwift2JavaGenerator { let compositeProtocolName = "(\(protocolNames.joined(separator: " & ")))" printer.print("let \(variableName): \(compositeProtocolName)") - func printStandardJExtractBlock(_ printer: inout CodePrinter) { + func printStandardJExtractBlock(_ printer: inout CodePrinter) { let pointerVariableName = "\(inner)pointer$" let typeMetadataVariableName = "\(inner)typeMetadata$" printer.print( @@ -915,7 +971,8 @@ extension JNISwift2JavaGenerator { printer.printBraceBlock("else") { printer in let arguments = protocolTypes.map { protocolType in let nominalTypeDecl = protocolType.nominalTypeDecl - return "\(nominalTypeDecl.javaInterfaceVariableName): \(nominalTypeDecl.javaInterfaceName)(javaThis: \(inner)!, environment: environment)" + return + "\(nominalTypeDecl.javaInterfaceVariableName): \(nominalTypeDecl.javaInterfaceName)(javaThis: \(inner)!, environment: environment)" } printer.print("\(variableName) = \(swiftWrapperClassName)(\(arguments.joined(separator: ", ")))") } @@ -923,7 +980,6 @@ extension JNISwift2JavaGenerator { printStandardJExtractBlock(&printer) } - return variableName case .extractSwiftProtocolValue(let inner, let typeMetadataVariableName, let protocolNames): @@ -1021,14 +1077,15 @@ extension JNISwift2JavaGenerator { } printer.print( - """ - let class$ = environment.interface.GetObjectClass(environment, \(placeholder)) - let methodID$ = environment.interface.GetMethodID(environment, class$, "apply", "\(methodSignature.mangledName)")! - let arguments$: [jvalue] = [\(arguments.joined(separator: ", "))] - """ + """ + let class$ = environment.interface.GetObjectClass(environment, \(placeholder)) + let methodID$ = environment.interface.GetMethodID(environment, class$, "apply", "\(methodSignature.mangledName)")! + let arguments$: [jvalue] = [\(arguments.joined(separator: ", "))] + """ ) - let upcall = "environment.interface.\(nativeResult.javaType.jniCallMethodAName)(environment, \(placeholder), methodID$, arguments$)" + let upcall = + "environment.interface.\(nativeResult.javaType.jniCallMethodAName)(environment, \(placeholder), methodID$, arguments$)" let result = nativeResult.conversion.render(&printer, upcall) if nativeResult.javaType.isVoid { @@ -1041,7 +1098,7 @@ extension JNISwift2JavaGenerator { printer.print("}") return printer.finalize() - + case .escapingClosureLowering(let syntheticFunction, let closureName): var printer = CodePrinter() @@ -1071,7 +1128,8 @@ extension JNISwift2JavaGenerator { // Note: async is part of the closure TYPE, not the closure literal syntax. // For closures without parameters, we can omit "in" entirely. - let closureHeader = fn.parameters.isEmpty + let closureHeader = + fn.parameters.isEmpty ? "{" : "{ \(closureParameters) in" @@ -1095,7 +1153,7 @@ extension JNISwift2JavaGenerator { }() """ ) - + return printer.finalize() case .initializeSwiftJavaWrapper(let inner, let wrapperName): @@ -1110,7 +1168,13 @@ extension JNISwift2JavaGenerator { let inner = inner.render(&printer, placeholder) return "\(inner)?" - case .optionalRaisingWidenIntegerType(let inner, let resultName, let valueType, let combinedSwiftType, let valueSizeInBytes): + case .optionalRaisingWidenIntegerType( + let inner, + let resultName, + let valueType, + let combinedSwiftType, + let valueSizeInBytes + ): let inner = inner.render(&printer, placeholder) let value = valueType == .boolean ? "$0 ? 1 : 0" : "$0" let combinedSwiftTypeName = combinedSwiftType.moduleAndName.name @@ -1123,7 +1187,12 @@ extension JNISwift2JavaGenerator { ) return "\(resultName)_value$" - case .optionalRaisingIndirectReturn(let inner, let returnType, let discriminatorParameterName, let placeholderValue): + case .optionalRaisingIndirectReturn( + let inner, + let returnType, + let discriminatorParameterName, + let placeholderValue + ): printer.print("let result$: \(returnType.jniTypeName)") printer.printBraceBlock("if let innerResult$ = \(placeholder)") { printer in let inner = inner.render(&printer, "innerResult$") @@ -1196,7 +1265,9 @@ extension JNISwift2JavaGenerator { // Global ref all indirect returns for outParameter in nativeFunctionSignature.result.outParameters { - printer.print("let \(outParameter.name) = environment.interface.NewGlobalRef(environment, \(outParameter.name))") + printer.print( + "let \(outParameter.name) = environment.interface.NewGlobalRef(environment, \(outParameter.name))" + ) globalRefs.append(outParameter.name) } @@ -1214,14 +1285,14 @@ extension JNISwift2JavaGenerator { func printDo(printer: inout CodePrinter) { // Make sure try/await are printed when necessary and avoid duplicate, or wrong-order, keywords (which would cause warnings) - let placeholderWithoutTry = + let placeholderWithoutTry = if placeholder.hasPrefix("try ") { String(placeholder.dropFirst("try ".count)) } else { placeholder } - let tryAwaitString: String = + let tryAwaitString: String = if isThrowing { "try await" } else { @@ -1230,20 +1301,26 @@ extension JNISwift2JavaGenerator { if swiftFunctionResultType.isVoid { printer.print("\(tryAwaitString) \(placeholderWithoutTry)") printer.print("environment = try! JavaVirtualMachine.shared().environment()") - printer.print("_ = environment.interface.CallBooleanMethodA(environment, globalFuture, \(completeMethodID), [jvalue(l: nil)])") + printer.print( + "_ = environment.interface.CallBooleanMethodA(environment, globalFuture, \(completeMethodID), [jvalue(l: nil)])" + ) } else { printer.print("let swiftResult$ = \(tryAwaitString) \(placeholderWithoutTry)") printer.print("environment = try! JavaVirtualMachine.shared().environment()") let inner = nativeFunctionSignature.result.conversion.render(&printer, "swiftResult$") let result: String if nativeFunctionSignature.result.javaType.requiresBoxing { - printer.print("let boxedResult$ = SwiftJavaRuntimeSupport._JNIBoxedConversions.box(\(inner), in: environment)") + printer.print( + "let boxedResult$ = SwiftJavaRuntimeSupport._JNIBoxedConversions.box(\(inner), in: environment)" + ) result = "boxedResult$" } else { result = inner } - printer.print("_ = environment.interface.CallBooleanMethodA(environment, globalFuture, \(completeMethodID), [jvalue(l: \(result))])") + printer.print( + "_ = environment.interface.CallBooleanMethodA(environment, globalFuture, \(completeMethodID), [jvalue(l: \(result))])" + ) } } @@ -1262,11 +1339,11 @@ extension JNISwift2JavaGenerator { printer.printBraceBlock("catch") { printer in // We might not be on the same thread after the suspension, so we need to attach the thread again. printer.print( - """ - let catchEnvironment = try! JavaVirtualMachine.shared().environment() - let exception = catchEnvironment.interface.NewObjectA(catchEnvironment, _JNIMethodIDCache.Exception.class, _JNIMethodIDCache.Exception.constructWithMessage, [String(describing: error).getJValue(in: catchEnvironment)]) - _ = catchEnvironment.interface.CallBooleanMethodA(catchEnvironment, globalFuture, \(completeExceptionallyMethodID), [jvalue(l: exception)]) - """ + """ + let catchEnvironment = try! JavaVirtualMachine.shared().environment() + let exception = catchEnvironment.interface.NewObjectA(catchEnvironment, _JNIMethodIDCache.Exception.class, _JNIMethodIDCache.Exception.constructWithMessage, [String(describing: error).getJValue(in: catchEnvironment)]) + _ = catchEnvironment.interface.CallBooleanMethodA(catchEnvironment, globalFuture, \(completeExceptionallyMethodID), [jvalue(l: exception)]) + """ ) } } else { @@ -1275,7 +1352,7 @@ extension JNISwift2JavaGenerator { } printer.print("var task: Task? = nil") - printer.printHashIfBlock("swift(>=6.2)") { printer in + printer.printHashIfBlock("swift(>=6.2)") { printer in printer.printBraceBlock("if #available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, *)") { printer in printer.printBraceBlock("task = Task.immediate") { printer in // Immediate runs on the caller thread, so we don't need to attach the environment again. @@ -1329,8 +1406,8 @@ extension JNISwift2JavaGenerator { // Returns the check string func render(_ printer: inout CodePrinter, _ placeholder: String) -> String { switch self { - case .check32BitIntOverflow(let minMaxSource): - return "\(placeholder) >= \(minMaxSource).min && \(placeholder) <= \(minMaxSource).max" + case .check32BitIntOverflow(let minMaxSource): + return "\(placeholder) >= \(minMaxSource).min && \(placeholder) <= \(minMaxSource).max" } } } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift index e5f217358..c12080ee7 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator+SwiftThunkPrinting.swift @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// import JavaTypes + #if canImport(FoundationEssentials) import FoundationEssentials #else @@ -31,7 +32,9 @@ extension JNISwift2JavaGenerator { return // no need to write any empty files, yay } - logger.info("Write empty [\(self.expectedOutputSwiftFileNames.count)] 'expected' files in: \(swiftOutputDirectory)/") + logger.info( + "Write empty [\(self.expectedOutputSwiftFileNames.count)] 'expected' files in: \(swiftOutputDirectory)/" + ) for expectedFileName in self.expectedOutputSwiftFileNames { logger.info("Write SwiftPM-'expected' empty file: \(expectedFileName.bold)") @@ -41,7 +44,8 @@ extension JNISwift2JavaGenerator { _ = try printer.writeContents( outputDirectory: self.swiftOutputDirectory, javaPackagePath: nil, - filename: expectedFileName) + filename: expectedFileName + ) } } @@ -66,7 +70,10 @@ extension JNISwift2JavaGenerator { // === All types // We have to write all types to their corresponding output file that matches the file they were declared in, // because otherwise SwiftPM plugins will not pick up files apropriately -- we expect 1 output +SwiftJava.swift file for every input. - for group: (key: String, value: [Dictionary.Element]) in Dictionary(grouping: self.analysis.importedTypes, by: { $0.value.sourceFilePath }) { + for group: (key: String, value: [Dictionary.Element]) in Dictionary( + grouping: self.analysis.importedTypes, + by: { $0.value.sourceFilePath } + ) { logger.warning("Writing types in file group: \(group.key): \(group.value.map(\.key))") let importedTypesForThisFile = group.value @@ -83,9 +90,11 @@ extension JNISwift2JavaGenerator { do { try printNominalTypeThunks(&printer, ty) } catch { - logger.warning("Failed to print to Swift thunks for type'\(ty.qualifiedName)' to '\(filename)', error: \(error)") + logger.warning( + "Failed to print to Swift thunks for type'\(ty.qualifiedName)' to '\(filename)', error: \(error)" + ) } - + } logger.warning("Write Swift thunks file: \(filename.bold)") @@ -93,7 +102,8 @@ extension JNISwift2JavaGenerator { if let outputFile = try printer.writeContents( outputDirectory: self.swiftOutputDirectory, javaPackagePath: nil, - filename: filename) { + filename: filename + ) { logger.info("Done writing Swift thunks to: \(outputFile.absoluteString)") self.expectedOutputSwiftFileNames.remove(filename) } @@ -110,7 +120,9 @@ extension JNISwift2JavaGenerator { printer.printBraceBlock("enum \(JNICaching.cacheName(for: type))") { printer in for enumCase in type.cases { guard let translatedCase = translatedEnumCase(for: enumCase) else { continue } - printer.print("static let \(JNICaching.cacheMemberName(for: enumCase)) = \(renderEnumCaseCacheInit(translatedCase))") + printer.print( + "static let \(JNICaching.cacheMemberName(for: enumCase)) = \(renderEnumCaseCacheInit(translatedCase))" + ) } } } @@ -121,7 +133,9 @@ extension JNISwift2JavaGenerator { _ translatedWrapper: JavaInterfaceSwiftWrapper ) throws { printer.printBraceBlock("protocol \(translatedWrapper.wrapperName): \(translatedWrapper.swiftName)") { printer in - printer.print("var \(translatedWrapper.javaInterfaceVariableName): \(translatedWrapper.javaInterfaceName) { get }") + printer.print( + "var \(translatedWrapper.javaInterfaceVariableName): \(translatedWrapper.javaInterfaceName) { get }" + ) } printer.println() try printer.printBraceBlock("extension \(translatedWrapper.wrapperName)") { printer in @@ -131,10 +145,10 @@ extension JNISwift2JavaGenerator { } // FIXME: Add support for protocol variables https://github.com/swiftlang/swift-java/issues/457 -// for variable in translatedWrapper.variables { -// printerInterfaceWrapperVariable(&printer, variable, inside: translatedWrapper) -// printer.println() -// } + // for variable in translatedWrapper.variables { + // printerInterfaceWrapperVariable(&printer, variable, inside: translatedWrapper) + // printer.println() + // } } } @@ -143,7 +157,11 @@ extension JNISwift2JavaGenerator { _ function: JavaInterfaceSwiftWrapper.Function, inside wrapper: JavaInterfaceSwiftWrapper ) throws { - guard let protocolMethod = wrapper.importedType.methods.first(where: { $0.functionSignature == function.originalFunctionSignature }) else { + guard + let protocolMethod = wrapper.importedType.methods.first(where: { + $0.functionSignature == function.originalFunctionSignature + }) + else { fatalError("Failed to find protocol method") } guard let translatedDecl = self.translatedDecl(for: protocolMethod) else { @@ -166,7 +184,8 @@ extension JNISwift2JavaGenerator { } let tryClause = function.originalFunctionSignature.isThrowing ? "try " : "" - let javaUpcall = "\(tryClause)\(wrapper.javaInterfaceVariableName).\(function.swiftFunctionName)(\(upcallArguments.joined(separator: ", ")))" + let javaUpcall = + "\(tryClause)\(wrapper.javaInterfaceVariableName).\(function.swiftFunctionName)(\(upcallArguments.joined(separator: ", ")))" let resultType = function.originalFunctionSignature.result.type let result = function.resultConversion.render(&printer, javaUpcall) @@ -348,19 +367,22 @@ extension JNISwift2JavaGenerator { } private func renderEnumCaseCacheInit(_ enumCase: TranslatedEnumCase) -> String { - let nativeParametersClassName = "\(enumCase.enumName)$\(enumCase.name)$_NativeParameters" - let methodSignature = MethodSignature(resultType: .void, parameterTypes: enumCase.parameterConversions.map(\.native.javaType)) + let nativeParametersClassName = "\(enumCase.enumName)$\(enumCase.name)$_NativeParameters" + let methodSignature = MethodSignature( + resultType: .void, + parameterTypes: enumCase.parameterConversions.map(\.native.javaType) + ) - return renderJNICacheInit(className: nativeParametersClassName, methods: [("", methodSignature)]) + return renderJNICacheInit(className: nativeParametersClassName, methods: [("", methodSignature)]) } private func renderJNICacheInit(className: String, methods: [(String, MethodSignature)]) -> String { - let fullClassName = "\(javaPackagePath)/\(className)" - let methods = methods.map { name, signature in - #".init(name: "\#(name)", signature: "\#(signature.mangledName)")"# - }.joined(separator: ",\n") + let fullClassName = "\(javaPackagePath)/\(className)" + let methods = methods.map { name, signature in + #".init(name: "\#(name)", signature: "\#(signature.mangledName)")"# + }.joined(separator: ",\n") - return #"_JNIMethodIDCache(className: "\#(fullClassName)", methods: [\#(methods)])"# + return #"_JNIMethodIDCache(className: "\#(fullClassName)", methods: [\#(methods)])"# } private func printEnumGetAsCaseThunk( @@ -371,12 +393,18 @@ extension JNISwift2JavaGenerator { &printer, enumCase.getAsCaseFunction ) { printer in - let selfPointer = enumCase.getAsCaseFunction.nativeFunctionSignature.selfParameter!.conversion.render(&printer, "self") + let selfPointer = enumCase.getAsCaseFunction.nativeFunctionSignature.selfParameter!.conversion.render( + &printer, + "self" + ) let caseNames = enumCase.original.parameters.enumerated().map { idx, parameter in parameter.name ?? "_\(idx)" } let caseNamesWithLet = caseNames.map { "let \($0)" } - let methodSignature = MethodSignature(resultType: .void, parameterTypes: enumCase.parameterConversions.map(\.native.javaType)) + let methodSignature = MethodSignature( + resultType: .void, + parameterTypes: enumCase.parameterConversions.map(\.native.javaType) + ) printer.print( """ guard case .\(enumCase.original.name)(\(caseNamesWithLet.joined(separator: ", "))) = \(selfPointer).pointee else { @@ -421,7 +449,6 @@ extension JNISwift2JavaGenerator { } } - private func printSwiftFunctionHelperClasses( _ printer: inout CodePrinter, _ decl: ImportedFunc @@ -435,8 +462,8 @@ extension JNISwift2JavaGenerator { } switch parameter.type { - case .opaque(let protocolType), - .existential(let protocolType): + case .opaque(let protocolType), + .existential(let protocolType): return (parameter, protocolType) default: @@ -458,7 +485,7 @@ extension JNISwift2JavaGenerator { for (parameter, protocolTypes) in protocolParameters { let protocolWrappers: [JavaInterfaceSwiftWrapper] = protocolTypes.compactMap { protocolType in guard let importedType = self.asImportedNominalTypeDecl(protocolType), - let wrapper = self.interfaceProtocolWrappers[importedType] + let wrapper = self.interfaceProtocolWrappers[importedType] else { return nil } @@ -486,7 +513,7 @@ extension JNISwift2JavaGenerator { printer.printBraceBlock("final class \(swiftClassName): \(implementingProtocols)") { printer in let variables: [(String, String)] = protocolWrappers.map { wrapper in - return (wrapper.javaInterfaceVariableName, wrapper.javaInterfaceName) + (wrapper.javaInterfaceVariableName, wrapper.javaInterfaceName) } for (name, type) in variables { printer.print("let \(name): \(type)") @@ -504,12 +531,14 @@ extension JNISwift2JavaGenerator { } private func asImportedNominalTypeDecl(_ type: SwiftType) -> ImportedNominalType? { - self.analysis.importedTypes.first(where: ( { name, nominalType in + self.analysis.importedTypes.first( + where: ({ name, nominalType in nominalType.swiftType == type - })).map { - $0.value - } + }) + ).map { + $0.value } + } private func printFunctionDowncall( _ printer: inout CodePrinter, @@ -537,12 +566,15 @@ extension JNISwift2JavaGenerator { } switch parameter.conversionCheck { - case .check32BitIntOverflow: + case .check32BitIntOverflow: int32OverflowChecks.append( parameter.conversionCheck!.render( - &printer, JNISwift2JavaGenerator.indirectVariableName(for: javaParameterName))) - case nil: - break + &printer, + JNISwift2JavaGenerator.indirectVariableName(for: javaParameterName) + ) + ) + case nil: + break } } @@ -555,7 +587,7 @@ extension JNISwift2JavaGenerator { printer.print("#if _pointerBitWidth(_32)") for check in int32OverflowChecks { - printer.printBraceBlock("guard \(check) else") { printer in + printer.printBraceBlock("guard \(check) else") { printer in printer.print("environment.throwJavaException(javaException: .integerOverflow)") printer.print(dummyReturn(for: nativeSignature)) } @@ -564,17 +596,18 @@ extension JNISwift2JavaGenerator { } // Callee - let callee: String = switch decl.functionSignature.selfParameter { - case .instance(let swiftSelf): - nativeSignature.selfParameter!.conversion.render( - &printer, - swiftSelf.parameterName ?? "self" - ) - case .staticMethod(let selfType), .initializer(let selfType): - "\(selfType)" - case .none: - swiftModuleName - } + let callee: String = + switch decl.functionSignature.selfParameter { + case .instance(let swiftSelf): + nativeSignature.selfParameter!.conversion.render( + &printer, + swiftSelf.parameterName ?? "self" + ) + case .staticMethod(let selfType), .initializer(let selfType): + "\(selfType)" + case .none: + swiftModuleName + } // Build the result let result: String @@ -658,7 +691,7 @@ extension JNISwift2JavaGenerator { } private func dummyReturn(for nativeSignature: NativeFunctionSignature) -> String { - return if nativeSignature.result.javaType.isVoid { + if nativeSignature.result.javaType.isVoid { "return" } else if nativeSignature.result.javaType.isString { "return String.jniPlaceholderValue" @@ -720,7 +753,7 @@ extension JNISwift2JavaGenerator { let thunkParameters = [ "environment: UnsafeMutablePointer!", - "thisClass: jclass" + "thisClass: jclass", ] + translatedParameters let thunkReturnType = resultType != .void ? " -> \(resultType.jniTypeName)" : "" @@ -857,9 +890,9 @@ extension JNISwift2JavaGenerator { /// /// - Returns: name of the created "self" variable private func printSelfJLongToUnsafeMutablePointer( - _ printer: inout CodePrinter, - swiftParentName: String, - _ selfPointerParam: JavaParameter + _ printer: inout CodePrinter, + swiftParentName: String, + _ selfPointerParam: JavaParameter ) -> String { let newSelfParamName = "self$" printer.print( @@ -882,11 +915,12 @@ extension JNISwift2JavaGenerator { parameterName: String, parentName: String? ) -> String { - let parent = if let parentName { - "\(parentName)_" - } else { - "" - } + let parent = + if let parentName { + "\(parentName)_" + } else { + "" + } return "_\(parent)\(methodName)_\(parameterName)_Wrapper" } } diff --git a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift index b678e012a..507e1863a 100644 --- a/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift +++ b/Sources/JExtractSwiftLib/JNI/JNISwift2JavaGenerator.swift @@ -71,15 +71,17 @@ package class JNISwift2JavaGenerator: Swift2JavaGenerator { // If we are forced to write empty files, construct the expected outputs. // It is sufficient to use file names only, since SwiftPM requires names to be unique within a module anyway. if translator.config.writeEmptyFiles ?? false { - self.expectedOutputSwiftFileNames = Set(translator.inputs.compactMap { (input) -> String? in - guard let fileName = input.path.split(separator: PATH_SEPARATOR).last else { - return nil + self.expectedOutputSwiftFileNames = Set( + translator.inputs.compactMap { (input) -> String? in + guard let fileName = input.path.split(separator: PATH_SEPARATOR).last else { + return nil + } + guard fileName.hasSuffix(".swift") else { + return nil + } + return String(fileName.replacing(".swift", with: "+SwiftJava.swift")) } - guard fileName.hasSuffix(".swift") else { - return nil - } - return String(fileName.replacing(".swift", with: "+SwiftJava.swift")) - }) + ) self.expectedOutputSwiftFileNames.insert("\(translator.swiftModuleName)Module+SwiftJava.swift") self.expectedOutputSwiftFileNames.insert("Foundation+SwiftJava.swift") } else { diff --git a/Sources/JExtractSwiftLib/JavaParameter.swift b/Sources/JExtractSwiftLib/JavaParameter.swift index 34f3b254e..a0d92e91e 100644 --- a/Sources/JExtractSwiftLib/JavaParameter.swift +++ b/Sources/JExtractSwiftLib/JavaParameter.swift @@ -81,7 +81,7 @@ struct JavaParameter { return "\(type) \(name)" } - let annotationsStr = annotations.map({$0.render()}).joined(separator: "") + let annotationsStr = annotations.map({ $0.render() }).joined(separator: "") return "\(annotationsStr) \(type) \(name)" } } @@ -93,11 +93,10 @@ struct OutCallback { precondition("\(newValue)".starts(with: "$"), "OutCallback class names should stat with $") } } - var members: [String - ] + var members: [String] var parameters: [JavaParameter] // FIXME: compute this instead var cFunc: CFunction var body: String -} \ No newline at end of file +} diff --git a/Sources/JExtractSwiftLib/JavaTypes/JavaType+JDK.swift b/Sources/JExtractSwiftLib/JavaTypes/JavaType+JDK.swift index 82b58d496..33164c1c5 100644 --- a/Sources/JExtractSwiftLib/JavaTypes/JavaType+JDK.swift +++ b/Sources/JExtractSwiftLib/JavaTypes/JavaType+JDK.swift @@ -45,7 +45,6 @@ extension JavaType { .class(package: "java.lang", name: "Object") } - /// The description of the type java.util.concurrent.CompletableFuture static func completableFuture(_ T: JavaType) -> JavaType { .class(package: "java.util.concurrent", name: "CompletableFuture", typeParameters: [T.boxedType]) diff --git a/Sources/JExtractSwiftLib/Logger.swift b/Sources/JExtractSwiftLib/Logger.swift index 6ef046517..5c4267830 100644 --- a/Sources/JExtractSwiftLib/Logger.swift +++ b/Sources/JExtractSwiftLib/Logger.swift @@ -12,10 +12,10 @@ // //===----------------------------------------------------------------------===// -import Foundation -import SwiftSyntax import ArgumentParser +import Foundation import SwiftJavaConfigurationShared +import SwiftSyntax // Placeholder for some better logger, we could depend on swift-log public struct Logger { @@ -150,6 +150,6 @@ extension Logger.Level { extension Logger.Level: Comparable { public static func < (lhs: Logger.Level, rhs: Logger.Level) -> Bool { - return lhs.naturalIntegralValue < rhs.naturalIntegralValue + lhs.naturalIntegralValue < rhs.naturalIntegralValue } } diff --git a/Sources/JExtractSwiftLib/Swift2Java.swift b/Sources/JExtractSwiftLib/Swift2Java.swift index 30b6bd924..4a75f218e 100644 --- a/Sources/JExtractSwiftLib/Swift2Java.swift +++ b/Sources/JExtractSwiftLib/Swift2Java.swift @@ -13,11 +13,11 @@ //===----------------------------------------------------------------------===// import Foundation +import OrderedCollections +import SwiftJavaConfigurationShared +import SwiftJavaShared import SwiftSyntax import SwiftSyntaxBuilder -import SwiftJavaShared -import SwiftJavaConfigurationShared -import OrderedCollections public struct SwiftToJava { let config: Configuration @@ -38,7 +38,9 @@ public struct SwiftToJava { let log = translator.log if config.javaPackage == nil || config.javaPackage!.isEmpty { - translator.log.warning("Configured java package is '', consider specifying concrete package for generated sources.") + translator.log.warning( + "Configured java package is '', consider specifying concrete package for generated sources." + ) } guard let inputSwift = config.inputSwiftDirectory else { @@ -60,7 +62,7 @@ public struct SwiftToJava { guard let data = fileManager.contents(atPath: file.path) else { continue } - guard let text = String(data:data, encoding: .utf8) else { + guard let text = String(data: data, encoding: .utf8) else { continue } translator.add(filePath: file.path, text: text) @@ -110,10 +112,9 @@ public struct SwiftToJava { print("[swift-java] Imported Swift module '\(swiftModule)': " + "done.".green) } - + func canExtract(from file: URL) -> Bool { - guard file.lastPathComponent.hasSuffix(".swift") || - file.lastPathComponent.hasSuffix(".swiftinterface") else { + guard file.lastPathComponent.hasSuffix(".swift") || file.lastPathComponent.hasSuffix(".swiftinterface") else { return false } if file.lastPathComponent.hasSuffix("+SwiftJava.swift") { @@ -142,13 +143,13 @@ public func collectAllFiles(suffix: String, in inputPaths: [URL], log: Logger) - let fileManager = FileManager.default var allFiles: OrderedSet = [] allFiles.reserveCapacity(32) // rough guesstimate - + let resourceKeys: [URLResourceKey] = [ .isRegularFileKey, .isDirectoryKey, - .nameKey + .nameKey, ] - + for path in inputPaths { do { try collectFilesFromPath( @@ -163,8 +164,8 @@ public func collectAllFiles(suffix: String, in inputPaths: [URL], log: Logger) - log.trace("Failed to collect paths in: \(path), skipping.") } } - - return allFiles + + return allFiles } private func collectFilesFromPath( @@ -178,24 +179,32 @@ private func collectFilesFromPath( guard fileManager.fileExists(atPath: path.path) else { return } - + if path.isDirectory { let enumerator = fileManager.enumerator( at: path, includingPropertiesForKeys: resourceKeys, options: [.skipsHiddenFiles], errorHandler: { url, error in - return true - }) + true + } + ) guard let enumerator else { return } - + for case let fileURL as URL in enumerator { - try? collectFilesFromPath(fileURL, suffix: suffix, fileManager: fileManager, resourceKeys: resourceKeys, into: &allFiles, log: log) + try? collectFilesFromPath( + fileURL, + suffix: suffix, + fileManager: fileManager, + resourceKeys: resourceKeys, + into: &allFiles, + log: log + ) } - } - + } + guard path.isFileURL else { return } diff --git a/Sources/JExtractSwiftLib/Swift2JavaTranslator.swift b/Sources/JExtractSwiftLib/Swift2JavaTranslator.swift index 5698d3963..36fb47587 100644 --- a/Sources/JExtractSwiftLib/Swift2JavaTranslator.swift +++ b/Sources/JExtractSwiftLib/Swift2JavaTranslator.swift @@ -15,8 +15,8 @@ import Foundation import JavaTypes import SwiftBasicFormat -import SwiftParser import SwiftJavaConfigurationShared +import SwiftParser import SwiftSyntax /// Takes swift interfaces and translates them into Java used to access those. @@ -50,7 +50,7 @@ public final class Swift2JavaTranslator { var lookupContext: SwiftTypeLookupContext! = nil var symbolTable: SwiftSymbolTable! { - return lookupContext?.symbolTable + lookupContext?.symbolTable } public init( @@ -109,15 +109,27 @@ extension Swift2JavaTranslator { if let dataDecl = self.symbolTable[.foundationData] ?? self.symbolTable[.essentialsData] { let dataProtocolDecl = (self.symbolTable[.foundationDataProtocol] ?? self.symbolTable[.essentialsDataProtocol])! if self.isUsing(where: { $0 == dataDecl || $0 == dataProtocolDecl }) { - visitor.visit(nominalDecl: dataDecl.syntax!.asNominal!, in: nil, sourceFilePath: "Foundation/FAKE_FOUNDATION_DATA.swift") - visitor.visit(nominalDecl: dataProtocolDecl.syntax!.asNominal!, in: nil, sourceFilePath: "Foundation/FAKE_FOUNDATION_DATAPROTOCOL.swift") + visitor.visit( + nominalDecl: dataDecl.syntax!.asNominal!, + in: nil, + sourceFilePath: "Foundation/FAKE_FOUNDATION_DATA.swift" + ) + visitor.visit( + nominalDecl: dataProtocolDecl.syntax!.asNominal!, + in: nil, + sourceFilePath: "Foundation/FAKE_FOUNDATION_DATAPROTOCOL.swift" + ) } } // Foundation.Date if let dateDecl = self.symbolTable[.foundationDate] ?? self.symbolTable[.essentialsDate] { if self.isUsing(where: { $0 == dateDecl }) { - visitor.visit(nominalDecl: dateDecl.syntax!.asNominal!, in: nil, sourceFilePath: "Foundation/FAKE_FOUNDATION_DATE.swift") + visitor.visit( + nominalDecl: dateDecl.syntax!.asNominal!, + in: nil, + sourceFilePath: "Foundation/FAKE_FOUNDATION_DATE.swift" + ) } } } diff --git a/Sources/JExtractSwiftLib/Swift2JavaVisitor.swift b/Sources/JExtractSwiftLib/Swift2JavaVisitor.swift index efbaf39f2..ff6295bb1 100644 --- a/Sources/JExtractSwiftLib/Swift2JavaVisitor.swift +++ b/Sources/JExtractSwiftLib/Swift2JavaVisitor.swift @@ -53,9 +53,9 @@ final class Swift2JavaVisitor { case .extensionDecl(let node): self.visit(extensionDecl: node, in: parent, sourceFilePath: sourceFilePath) case .typeAliasDecl: - break // TODO: Implement; https://github.com/swiftlang/swift-java/issues/338 + break // TODO: Implement; https://github.com/swiftlang/swift-java/issues/338 case .associatedTypeDecl: - break // TODO: Implement associated types + break // TODO: Implement associated types case .initializerDecl(let node): self.visit(initializerDecl: node, in: parent) @@ -111,9 +111,10 @@ final class Swift2JavaVisitor { } // Add any conforming protocols in the extension - importedNominalType.inheritedTypes += node.inheritanceClause?.inheritedTypes.compactMap { - try? SwiftType($0.type, lookupContext: translator.lookupContext) - } ?? [] + importedNominalType.inheritedTypes += + node.inheritanceClause?.inheritedTypes.compactMap { + try? SwiftType($0.type, lookupContext: translator.lookupContext) + } ?? [] for memberItem in node.memberBlock.members { self.visit(decl: memberItem.decl, in: importedNominalType, sourceFilePath: sourceFilePath) @@ -237,14 +238,16 @@ final class Swift2JavaVisitor { from: DeclSyntax(node), in: typeContext, kind: .getter, - name: varName) + name: varName + ) } if supportedAccessors.contains(.set) { try importAccessor( from: DeclSyntax(node), in: typeContext, kind: .setter, - name: varName) + name: varName + ) } } catch { self.log.debug("Failed to import: \(node.qualifiedNameForDebug); \(error)") @@ -308,14 +311,16 @@ final class Swift2JavaVisitor { from: DeclSyntax(node), in: typeContext, kind: .subscriptGetter, - name: name) + name: name + ) } if accessors.contains(.set) { try importAccessor( from: DeclSyntax(node), in: typeContext, kind: .subscriptSetter, - name: name) + name: name + ) } } catch { self.log.debug("Failed to import: \(node.qualifiedNameForDebug); \(error)") @@ -336,13 +341,15 @@ final class Swift2JavaVisitor { varNode, isSet: kind == .setter, enclosingType: typeContext?.swiftType, - lookupContext: translator.lookupContext) + lookupContext: translator.lookupContext + ) case .subscriptDecl(let subscriptNode): signature = try SwiftFunctionSignature( subscriptNode, isSet: kind == .subscriptSetter, enclosingType: typeContext?.swiftType, - lookupContext: translator.lookupContext) + lookupContext: translator.lookupContext + ) default: log.warning("Not supported declaration type \(node.kind) while calling importAccessor!") return diff --git a/Sources/JExtractSwiftLib/SwiftDocumentationParsing.swift b/Sources/JExtractSwiftLib/SwiftDocumentationParsing.swift index f739a728d..dd85a675c 100644 --- a/Sources/JExtractSwiftLib/SwiftDocumentationParsing.swift +++ b/Sources/JExtractSwiftLib/SwiftDocumentationParsing.swift @@ -145,8 +145,9 @@ enum SwiftDocumentationParser { } private static func append(_ existing: inout String?, _ new: String) { - if existing == nil { existing = new } - else { + if existing == nil { + existing = new + } else { existing! += "\n" + new } } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/DependencyScanner.swift b/Sources/JExtractSwiftLib/SwiftTypes/DependencyScanner.swift index 79abe9812..a36475c7b 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/DependencyScanner.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/DependencyScanner.swift @@ -22,7 +22,9 @@ func importingModules(sourceFile: SourceFileSyntax) -> [ImportedSwiftModule] { guard let moduleName = importDecl.path.first?.name.text else { continue } - importingModuleNames.append(ImportedSwiftModule(name: moduleName, availableWithModuleName: nil, alternativeModuleNames: [])) + importingModuleNames.append( + ImportedSwiftModule(name: moduleName, availableWithModuleName: nil, alternativeModuleNames: []) + ) } else if let ifConfigDecl = item.item.as(IfConfigDeclSyntax.self) { importingModuleNames.append(contentsOf: modules(from: ifConfigDecl)) } @@ -31,58 +33,64 @@ func importingModules(sourceFile: SourceFileSyntax) -> [ImportedSwiftModule] { } private func modules(from ifConfigDecl: IfConfigDeclSyntax) -> [ImportedSwiftModule] { - guard + guard let firstClause = ifConfigDecl.clauses.first, - let calledExpression = firstClause.condition?.as(FunctionCallExprSyntax.self)?.calledExpression.as(DeclReferenceExprSyntax.self), - calledExpression.baseName.text == "canImport" else { - return [] - } + let calledExpression = firstClause.condition?.as(FunctionCallExprSyntax.self)?.calledExpression.as( + DeclReferenceExprSyntax.self + ), + calledExpression.baseName.text == "canImport" + else { + return [] + } - var modules: [ImportedSwiftModule] = [] - modules.reserveCapacity(ifConfigDecl.clauses.count) + var modules: [ImportedSwiftModule] = [] + modules.reserveCapacity(ifConfigDecl.clauses.count) - for (index, clause) in ifConfigDecl.clauses.enumerated() { - let importedModuleNames = clause.elements?.as(CodeBlockItemListSyntax.self)? - .compactMap { CodeBlockItemSyntax($0) } - .compactMap { $0.item.as(ImportDeclSyntax.self) } - .compactMap { $0.path.first?.name.text } ?? [] + for (index, clause) in ifConfigDecl.clauses.enumerated() { + let importedModuleNames = + clause.elements?.as(CodeBlockItemListSyntax.self)? + .compactMap { CodeBlockItemSyntax($0) } + .compactMap { $0.item.as(ImportDeclSyntax.self) } + .compactMap { $0.path.first?.name.text } ?? [] - let importModuleName: String? = if - let funcCallExpr = clause.condition?.as(FunctionCallExprSyntax.self), - let calledDeclReference = funcCallExpr.calledExpression.as(DeclReferenceExprSyntax.self), - calledDeclReference.baseName.text == "canImport", - let moduleNameSyntax = funcCallExpr.arguments.first?.expression.as(DeclReferenceExprSyntax.self) { - moduleNameSyntax.baseName.text - } else { - nil - } + let importModuleName: String? = + if let funcCallExpr = clause.condition?.as(FunctionCallExprSyntax.self), + let calledDeclReference = funcCallExpr.calledExpression.as(DeclReferenceExprSyntax.self), + calledDeclReference.baseName.text == "canImport", + let moduleNameSyntax = funcCallExpr.arguments.first?.expression.as(DeclReferenceExprSyntax.self) + { + moduleNameSyntax.baseName.text + } else { + nil + } - let clauseModules = importedModuleNames.map { - ImportedSwiftModule(name: $0, - availableWithModuleName: importModuleName, - alternativeModuleNames: []) - } - - // Assume single import from #else statement is fallback and use it as main source of symbols - if - clauseModules.count == 1 && - index == (ifConfigDecl.clauses.count - 1) && - clause.poundKeyword.tokenKind == .poundElse { - var fallbackModule: ImportedSwiftModule = clauseModules[0] - var moduleNames: [String] = [] - moduleNames.reserveCapacity(modules.count) + let clauseModules = importedModuleNames.map { + ImportedSwiftModule( + name: $0, + availableWithModuleName: importModuleName, + alternativeModuleNames: [] + ) + } - for i in 0.. var isMainSourceOfSymbols: Bool - init(name: String, availableWithModuleName: String? = nil, alternativeModuleNames: Set = [], isMainSourceOfSymbols: Bool = false) { + init( + name: String, + availableWithModuleName: String? = nil, + alternativeModuleNames: Set = [], + isMainSourceOfSymbols: Bool = false + ) { self.name = name self.availableWithModuleName = availableWithModuleName self.alternativeModuleNames = alternativeModuleNames self.isMainSourceOfSymbols = isMainSourceOfSymbols } - static func ==(lhs: Self, rhs: Self) -> Bool { + static func == (lhs: Self, rhs: Self) -> Bool { lhs.name == rhs.name } func hash(into hasher: inout Hasher) { hasher.combine(name) } -} \ No newline at end of file +} diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionSignature.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionSignature.swift index 804769e59..2dab3b960 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionSignature.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionSignature.swift @@ -203,7 +203,9 @@ extension SwiftFunctionSignature { guard parameterNode.specifier == nil else { throw SwiftFunctionTranslationError.genericParameterSpecifier(parameterNode) } - let param = try lookupContext.typeDeclaration(for: parameterNode, sourceFilePath: "FIXME_HAS_NO_PATH.swift") as! SwiftGenericParameterDeclaration + let param = + try lookupContext.typeDeclaration(for: parameterNode, sourceFilePath: "FIXME_HAS_NO_PATH.swift") + as! SwiftGenericParameterDeclaration params.append(param) if let inheritedNode = parameterNode.inheritedType { let inherited = try SwiftType(inheritedNode, lookupContext: lookupContext) @@ -232,7 +234,7 @@ extension SwiftFunctionSignature { requirement = .equals( try SwiftType(leftType, lookupContext: lookupContext), try SwiftType(rightType, lookupContext: lookupContext) - ) + ) case .layoutRequirement: throw SwiftFunctionTranslationError.layoutRequirement(requirementNode) } @@ -274,7 +276,8 @@ extension SwiftFunctionSignature { self.selfParameter = try Self.variableSelfParameter( for: DeclSyntax(varNode), enclosingType: enclosingType, - isSet: isSet) + isSet: isSet + ) guard let binding = varNode.bindings.first, varNode.bindings.count == 1 else { throw SwiftFunctionTranslationError.multipleBindings(varNode) @@ -323,13 +326,14 @@ extension SwiftFunctionSignature { self.selfParameter = try Self.variableSelfParameter( for: DeclSyntax(subscriptNode), enclosingType: enclosingType, - isSet: isSet) + isSet: isSet + ) let valueType: SwiftType = try SwiftType(subscriptNode.returnClause.type, lookupContext: lookupContext) var nodeParameters = try subscriptNode.parameterClause.parameters.map { param in try SwiftParameter(param, lookupContext: lookupContext) } - + var effectSpecifiers: [SwiftEffectSpecifier]? = nil switch subscriptNode.accessorBlock?.accessors { case .getter(let getter): @@ -442,21 +446,21 @@ extension AccessorBlockSyntax { /// Determine what operations (i.e. get and/or set) supported in this `AccessorBlockSyntax` func supportedAccessorKinds() -> SupportedAccessorKinds { switch self.accessors { - case .getter: - return [.get] - case .accessors(let accessors): - for accessor in accessors { - switch accessor.accessorSpecifier.tokenKind { - // Existence of any write accessor or observer implies this supports read/write. - case .keyword(.set), .keyword(._modify), .keyword(.unsafeMutableAddress), - .keyword(.willSet), .keyword(.didSet): - return [.get, .set] - default: // Ignore willSet/didSet and unknown accessors. - break - } + case .getter: + return [.get] + case .accessors(let accessors): + for accessor in accessors { + switch accessor.accessorSpecifier.tokenKind { + // Existence of any write accessor or observer implies this supports read/write. + case .keyword(.set), .keyword(._modify), .keyword(.unsafeMutableAddress), + .keyword(.willSet), .keyword(.didSet): + return [.get, .set] + default: // Ignore willSet/didSet and unknown accessors. + break } - return [.get] } + return [.get] + } } } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionType.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionType.swift index d1ed84080..628cbc7a1 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionType.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftFunctionType.swift @@ -29,12 +29,13 @@ struct SwiftFunctionType: Equatable { extension SwiftFunctionType: CustomStringConvertible { var description: String { let parameterString = parameters.map { $0.descriptionInType }.joined(separator: ", ") - let conventionPrefix = switch convention { - case .c: "@convention(c) " - case .swift: "" - } + let conventionPrefix = + switch convention { + case .c: "@convention(c) " + case .swift: "" + } let escapingPrefix = isEscaping ? "@escaping " : "" - return "\(escapingPrefix)\(conventionPrefix)(\(parameterString)) -> \(resultType.description)" + return "\(escapingPrefix)\(conventionPrefix)(\(parameterString)) -> \(resultType.description)" } } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownModules.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownModules.swift index 48fbe4138..78d9ab30c 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownModules.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownModules.swift @@ -21,11 +21,11 @@ enum SwiftKnownModule: String { case foundationEssentials = "FoundationEssentials" var name: String { - return self.rawValue + self.rawValue } var symbolTable: SwiftModuleSymbolTable { - return switch self { + switch self { case .swift: swiftSymbolTable case .foundation: foundationSymbolTable case .foundationEssentials: foundationEssentialsSymbolTable @@ -33,7 +33,7 @@ enum SwiftKnownModule: String { } var sourceFile: SourceFileSyntax { - return switch self { + switch self { case .swift: swiftSourceFile case .foundation: foundationEssentialsSourceFile case .foundationEssentials: foundationEssentialsSourceFile @@ -49,19 +49,21 @@ private var swiftSymbolTable: SwiftModuleSymbolTable { private var foundationEssentialsSymbolTable: SwiftModuleSymbolTable { var builder = SwiftParsedModuleSymbolTableBuilder( - moduleName: "FoundationEssentials", + moduleName: "FoundationEssentials", requiredAvailablityOfModuleWithName: "FoundationEssentials", alternativeModules: .init(isMainSourceOfSymbols: false, moduleNames: ["Foundation"]), - importedModules: ["Swift": swiftSymbolTable]) + importedModules: ["Swift": swiftSymbolTable] + ) builder.handle(sourceFile: foundationEssentialsSourceFile, sourceFilePath: "FakeFoundation.swift") return builder.finalize() } private var foundationSymbolTable: SwiftModuleSymbolTable { var builder = SwiftParsedModuleSymbolTableBuilder( - moduleName: "Foundation", + moduleName: "Foundation", alternativeModules: .init(isMainSourceOfSymbols: true, moduleNames: ["FoundationEssentials"]), - importedModules: ["Swift": swiftSymbolTable]) + importedModules: ["Swift": swiftSymbolTable] + ) builder.handle(sourceFile: foundationSourceFile, sourceFilePath: "Foundation.swift") return builder.finalize() } @@ -80,7 +82,7 @@ private let swiftSourceFile: SourceFileSyntax = """ public struct UInt64 {} public struct Float {} public struct Double {} - + public struct UnsafeRawPointer {} public struct UnsafeMutableRawPointer {} public struct UnsafeRawBufferPointer {} @@ -91,14 +93,14 @@ private let swiftSourceFile: SourceFileSyntax = """ public struct UnsafeBufferPointer {} public struct UnsafeMutableBufferPointer {} - + public struct Optional {} - + public struct Array {} - + // FIXME: Support 'typealias Void = ()' public struct Void {} - + public struct String { public init(cString: UnsafePointer) public func withCString(_ body: (UnsafePointer) -> Void) @@ -118,16 +120,16 @@ private let foundationEssentialsSourceFile: SourceFileSyntax = """ public struct Date { /// The interval between the date object and 00:00:00 UTC on 1 January 1970. public var timeIntervalSince1970: Double { get } - + /// Returns a `Date` initialized relative to 00:00:00 UTC on 1 January 1970 by a given number of seconds. public init(timeIntervalSince1970: Double) } - + public struct UUID {} """ private var foundationSourceFile: SourceFileSyntax { - // On platforms other than Darwin, imports such as FoundationEssentials, FoundationNetworking, etc. are used, + // On platforms other than Darwin, imports such as FoundationEssentials, FoundationNetworking, etc. are used, // so this file should be created by combining the files of the aforementioned modules. foundationEssentialsSourceFile } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypes.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypes.swift index 2152ddcaf..edf75f0f2 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypes.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypes.swift @@ -33,28 +33,39 @@ struct SwiftKnownTypes { var float: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.float])) } var double: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.double])) } var unsafeRawPointer: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.unsafeRawPointer])) } - var unsafeRawBufferPointer: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.unsafeRawBufferPointer])) } - var unsafeMutableRawPointer: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.unsafeMutableRawPointer])) } + var unsafeRawBufferPointer: SwiftType { + .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.unsafeRawBufferPointer])) + } + var unsafeMutableRawPointer: SwiftType { + .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.unsafeMutableRawPointer])) + } var string: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.string])) } - var foundationDataProtocol: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationDataProtocol])) } + var foundationDataProtocol: SwiftType { + .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationDataProtocol])) + } var foundationData: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationData])) } - var essentialsDataProtocol: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsDataProtocol])) } + var essentialsDataProtocol: SwiftType { + .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsDataProtocol])) + } var essentialsData: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsData])) } var foundationUUID: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.foundationUUID])) } - var essentialsUUID: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsUUID]))} + var essentialsUUID: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsUUID])) } /// `(UnsafeRawPointer, Long) -> ()` function type. - /// + /// /// Commonly used to initialize a buffer using the passed bytes and length. - var functionInitializeByteBuffer: SwiftType { - .function(SwiftFunctionType( - convention: .c, - parameters: [ - SwiftParameter(convention: .byValue, parameterName: nil, type: self.unsafeRawPointer), // array base pointer - SwiftParameter(convention: .byValue, parameterName: nil, type: self.int), // array length - ], - resultType: .void)) + var functionInitializeByteBuffer: SwiftType { + .function( + SwiftFunctionType( + convention: .c, + parameters: [ + SwiftParameter(convention: .byValue, parameterName: nil, type: self.unsafeRawPointer), // array base pointer + SwiftParameter(convention: .byValue, parameterName: nil, type: self.int), // array length + ], + resultType: .void + ) + ) } func unsafePointer(_ pointeeType: SwiftType) -> SwiftType { diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftNominalTypeDeclaration.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftNominalTypeDeclaration.swift index 0b8b5651a..4c6b8b0cd 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftNominalTypeDeclaration.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftNominalTypeDeclaration.swift @@ -16,7 +16,8 @@ import SwiftSyntax ///// A syntax node for a nominal type declaration. @_spi(Testing) -public typealias NominalTypeDeclSyntaxNode = any DeclGroupSyntax & NamedDeclSyntax & WithAttributesSyntax & WithModifiersSyntax +public typealias NominalTypeDeclSyntaxNode = any DeclGroupSyntax & NamedDeclSyntax & WithAttributesSyntax + & WithModifiersSyntax package class SwiftTypeDeclaration { @@ -39,7 +40,7 @@ package class SwiftTypeDeclaration { } } -/// A syntax node paired with a simple file path +/// A syntax node paired with a simple file path package struct SwiftJavaInputFile { let syntax: SourceFileSyntax /// Simple file path of the file from which the syntax node was parsed. @@ -173,7 +174,7 @@ package class SwiftGenericParameterDeclaration: SwiftTypeDeclaration { } extension SwiftTypeDeclaration: Equatable { - package static func ==(lhs: SwiftTypeDeclaration, rhs: SwiftTypeDeclaration) -> Bool { + package static func == (lhs: SwiftTypeDeclaration, rhs: SwiftTypeDeclaration) -> Bool { lhs === rhs } } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftParsedModuleSymbolTableBuilder.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftParsedModuleSymbolTableBuilder.swift index c55864102..895a0a1b8 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftParsedModuleSymbolTableBuilder.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftParsedModuleSymbolTableBuilder.swift @@ -27,17 +27,18 @@ struct SwiftParsedModuleSymbolTableBuilder { var unresolvedExtensions: [ExtensionDeclSyntax] init( - moduleName: String, - requiredAvailablityOfModuleWithName: String? = nil, - alternativeModules: SwiftModuleSymbolTable.AlternativeModuleNamesData? = nil, - importedModules: [String: SwiftModuleSymbolTable], + moduleName: String, + requiredAvailablityOfModuleWithName: String? = nil, + alternativeModules: SwiftModuleSymbolTable.AlternativeModuleNamesData? = nil, + importedModules: [String: SwiftModuleSymbolTable], log: Logger? = nil ) { self.log = log self.symbolTable = .init( - moduleName: moduleName, - requiredAvailablityOfModuleWithName: requiredAvailablityOfModuleWithName, - alternativeModules: alternativeModules) + moduleName: moduleName, + requiredAvailablityOfModuleWithName: requiredAvailablityOfModuleWithName, + alternativeModules: alternativeModules + ) self.importedModules = importedModules self.unresolvedExtensions = [] } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftResult.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftResult.swift index d4a19f6e7..b7aa7b568 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftResult.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftResult.swift @@ -26,6 +26,6 @@ enum SwiftResultConvention: Equatable { extension SwiftResult { static var void: Self { - return Self(convention: .direct, type: .void) + Self(convention: .direct, type: .void) } } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftSymbolTable.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftSymbolTable.swift index 166aeb6f2..151aac1af 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftSymbolTable.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftSymbolTable.swift @@ -43,7 +43,9 @@ package class SwiftSymbolTable { private var knownTypeToNominal: [SwiftKnownTypeDeclKind: SwiftNominalTypeDeclaration] = [:] private var prioritySortedImportedModules: [SwiftModuleSymbolTable] { - importedModules.values.sorted(by: { ($0.alternativeModules?.isMainSourceOfSymbols ?? false) && $0.moduleName < $1.moduleName }) + importedModules.values.sorted(by: { + ($0.alternativeModules?.isMainSourceOfSymbols ?? false) && $0.moduleName < $1.moduleName + }) } init(parsedModule: SwiftModuleSymbolTable, importedModules: [String: SwiftModuleSymbolTable]) { @@ -73,8 +75,7 @@ extension SwiftSymbolTable { // e.g Data from FoundationEssentials and Foundation collide and lead to different results due to random order of keys in Swift's Dictionary // guard module.isMainSourceOfSymbols || !importedModules.contains(where: { $0.value.isAlternative(for: String)}) else { continue } - if - importedModules[module.name] == nil, + if importedModules[module.name] == nil, let knownModule = SwiftKnownModule(rawValue: module.name) { importedModules[module.name] = knownModule.symbolTable @@ -83,7 +84,11 @@ extension SwiftSymbolTable { // FIXME: Support granular lookup context (file, type context). - var builder = SwiftParsedModuleSymbolTableBuilder(moduleName: moduleName, importedModules: importedModules, log: log) + var builder = SwiftParsedModuleSymbolTableBuilder( + moduleName: moduleName, + importedModules: importedModules, + log: log + ) // First, register top-level and nested nominal types to the symbol table. for sourceFile in inputFiles { builder.handle(sourceFile: sourceFile.syntax, sourceFilePath: sourceFile.path) @@ -108,7 +113,7 @@ extension SwiftSymbolTable: SwiftSymbolTableProtocol { return result } } - + // FIXME: Implement module qualified name lookups. E.g. 'Swift.String' return nil @@ -165,7 +170,10 @@ extension SwiftSymbolTable { } // Try to print only on main module from relation chain as it has every other module. - guard !mainSymbolSourceModules.isDisjoint(with: alternativeModules.moduleNames) || alternativeModules.isMainSourceOfSymbols else { + guard + !mainSymbolSourceModules.isDisjoint(with: alternativeModules.moduleNames) + || alternativeModules.isMainSourceOfSymbols + else { if !alternativeModules.isMainSourceOfSymbols { printer.print("import \(module)") } @@ -181,7 +189,7 @@ extension SwiftSymbolTable { } for (index, group) in importGroups.keys.sorted().enumerated() { - if index > 0 && importGroups.keys.count > 1 { + if index > 0 && importGroups.keys.count > 1 { printer.print("#elseif canImport(\(group))") } else { printer.print("#if canImport(\(group))") @@ -192,7 +200,7 @@ extension SwiftSymbolTable { } } - if (importGroups.keys.isEmpty) { + if importGroups.keys.isEmpty { printer.print("import \(module)") } else { printer.print("#else") diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftType+GenericTypes.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftType+GenericTypes.swift index 1a658513d..f6a8c5871 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftType+GenericTypes.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftType+GenericTypes.swift @@ -20,7 +20,7 @@ extension SwiftType { genericParameters: [SwiftGenericParameterDeclaration], genericRequirements: [SwiftGenericRequirement] ) -> SwiftType? { - return representativeConcreteType( + representativeConcreteType( self, knownTypes: knownTypes, genericParameters: genericParameters, diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftType.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftType.swift index d58817c14..bfa7d2721 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftType.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftType.swift @@ -44,7 +44,7 @@ enum SwiftType: Equatable { indirect case array(SwiftType) static var void: Self { - return .tuple([]) + .tuple([]) } var asNominalType: SwiftNominalType? { @@ -65,7 +65,8 @@ enum SwiftType: Equatable { case .tuple([]): return true case .nominal(let nominal): - return nominal.parent == nil && nominal.nominalTypeDecl.moduleName == "Swift" && nominal.nominalTypeDecl.name == "Void" + return nominal.parent == nil && nominal.nominalTypeDecl.moduleName == "Swift" + && nominal.nominalTypeDecl.name == "Void" default: return false } @@ -81,7 +82,7 @@ enum SwiftType: Equatable { default: break } - return false; + return false } /// Reference type @@ -112,12 +113,12 @@ enum SwiftType: Equatable { var isArchDependingInteger: Bool { switch self { - case .nominal(let nominal): - switch nominal.nominalTypeDecl.knownTypeKind { - case .int, .uint: true - default: false - } + case .nominal(let nominal): + switch nominal.nominalTypeDecl.knownTypeKind { + case .int, .uint: true default: false + } + default: false } } @@ -173,8 +174,8 @@ extension SwiftType: CustomStringConvertible { } struct SwiftNominalType: Equatable { - enum Parent: Equatable { - indirect case nominal(SwiftNominalType) + indirect enum Parent: Equatable { + case nominal(SwiftNominalType) } private var storedParent: Parent? @@ -186,7 +187,8 @@ struct SwiftNominalType: Equatable { nominalTypeDecl: SwiftNominalTypeDeclaration, genericArguments: [SwiftType]? = nil ) { - self.storedParent = parent.map { .nominal($0) } ?? nominalTypeDecl.parent.map { .nominal(SwiftNominalType(nominalTypeDecl: $0)) } + self.storedParent = + parent.map { .nominal($0) } ?? nominalTypeDecl.parent.map { .nominal(SwiftNominalType(nominalTypeDecl: $0)) } self.nominalTypeDecl = nominalTypeDecl self.genericArguments = genericArguments } @@ -234,15 +236,15 @@ extension SwiftType { init(_ type: TypeSyntax, lookupContext: SwiftTypeLookupContext) throws { switch type.as(TypeSyntaxEnum.self) { case .classRestrictionType, - .dictionaryType, .missingType, .namedOpaqueReturnType, - .packElementType, .packExpansionType, .suppressedType, .inlineArrayType: + .dictionaryType, .missingType, .namedOpaqueReturnType, + .packElementType, .packExpansionType, .suppressedType, .inlineArrayType: throw TypeTranslationError.unimplementedType(type) case .attributedType(let attributedType): // Recognize "@convention(c)", "@convention(swift)", and "@escaping" attributes on function types. // FIXME: This string matching is a horrible hack. let attrs = attributedType.attributes.trimmedDescription - + // Handle @escaping attribute if attrs.contains("@escaping") { let innerType = try SwiftType(attributedType.baseType, lookupContext: lookupContext) @@ -340,9 +342,11 @@ extension SwiftType { self = .optional(try SwiftType(optionalType.wrappedType, lookupContext: lookupContext)) case .tupleType(let tupleType): - self = try .tuple(tupleType.elements.map { element in - try SwiftType(element.type, lookupContext: lookupContext) - }) + self = try .tuple( + tupleType.elements.map { element in + try SwiftType(element.type, lookupContext: lookupContext) + } + ) case .someOrAnyType(let someOrAntType): if someOrAntType.someOrAnySpecifier.tokenKind == .keyword(.some) { @@ -385,7 +389,7 @@ extension SwiftType { typeDecl = try lookupContext.unqualifiedLookup(name: ident, from: name) } guard let typeDecl else { - throw TypeTranslationError.unknown(originalType) + throw TypeTranslationError.unknown(originalType) } if let nominalDecl = typeDecl as? SwiftNominalTypeDeclaration { @@ -408,10 +412,12 @@ extension SwiftType { parent: SwiftType?, symbolTable: SwiftSymbolTable ) { - guard let nominalTypeDecl = symbolTable.lookupType( - nominalDecl.name.text, - parent: parent?.asNominalTypeDeclaration - ) else { + guard + let nominalTypeDecl = symbolTable.lookupType( + nominalDecl.name.text, + parent: parent?.asNominalTypeDeclaration + ) + else { return nil } diff --git a/Sources/JExtractSwiftLib/SwiftTypes/SwiftTypeLookupContext.swift b/Sources/JExtractSwiftLib/SwiftTypes/SwiftTypeLookupContext.swift index 4489b4f65..f2f9eb771 100644 --- a/Sources/JExtractSwiftLib/SwiftTypes/SwiftTypeLookupContext.swift +++ b/Sources/JExtractSwiftLib/SwiftTypes/SwiftTypeLookupContext.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftSyntax @_spi(Experimental) import SwiftLexicalLookup +import SwiftSyntax /// Unqualified type lookup manager. /// All unqualified lookup should be done via this instance. This caches the @@ -94,7 +94,11 @@ class SwiftTypeLookupContext { let typeDecl: SwiftTypeDeclaration switch Syntax(node).as(SyntaxEnum.self) { case .genericParameter(let node): - typeDecl = SwiftGenericParameterDeclaration(sourceFilePath: sourceFilePath, moduleName: symbolTable.moduleName, node: node) + typeDecl = SwiftGenericParameterDeclaration( + sourceFilePath: sourceFilePath, + moduleName: symbolTable.moduleName, + node: node + ) case .classDecl(let node): typeDecl = try nominalTypeDeclaration(for: node, sourceFilePath: sourceFilePath) case .actorDecl(let node): @@ -110,7 +114,7 @@ class SwiftTypeLookupContext { // as the extentedType is just the identifier of the type. guard case .identifierType(let id) = Syntax(node.extendedType).as(SyntaxEnum.self), - let lookupResult = try unqualifiedLookup(name: Identifier(id.name)!, from: node) + let lookupResult = try unqualifiedLookup(name: Identifier(id.name)!, from: node) else { throw TypeLookupError.notType(Syntax(node)) } @@ -129,7 +133,10 @@ class SwiftTypeLookupContext { } /// Create a nominal type declaration instance for the specified syntax node. - private func nominalTypeDeclaration(for node: NominalTypeDeclSyntaxNode, sourceFilePath: String) throws -> SwiftNominalTypeDeclaration { + private func nominalTypeDeclaration( + for node: NominalTypeDeclSyntaxNode, + sourceFilePath: String + ) throws -> SwiftNominalTypeDeclaration { if let symbolTableDeclaration = self.symbolTable.lookupType( node.name.text, @@ -152,7 +159,9 @@ class SwiftTypeLookupContext { while let parentDecl = node.ancestorDecl { switch parentDecl.as(DeclSyntaxEnum.self) { case .structDecl, .classDecl, .actorDecl, .enumDecl, .protocolDecl: - return (try typeDeclaration(for: parentDecl, sourceFilePath: "FIXME_NO_SOURCE_FILE.swift") as! SwiftNominalTypeDeclaration) // FIXME: need to get the source file of the parent + return + (try typeDeclaration(for: parentDecl, sourceFilePath: "FIXME_NO_SOURCE_FILE.swift") + as! SwiftNominalTypeDeclaration) // FIXME: need to get the source file of the parent default: node = parentDecl continue diff --git a/Sources/JExtractSwiftLib/ThunkNameRegistry.swift b/Sources/JExtractSwiftLib/ThunkNameRegistry.swift index da2e95c1b..03e25aa54 100644 --- a/Sources/JExtractSwiftLib/ThunkNameRegistry.swift +++ b/Sources/JExtractSwiftLib/ThunkNameRegistry.swift @@ -24,7 +24,8 @@ package struct ThunkNameRegistry { package mutating func functionThunkName( decl: ImportedFunc, - file: String = #fileID, line: UInt = #line + file: String = #fileID, + line: UInt = #line ) -> String { if let existingName = self.registry[decl] { return existingName @@ -42,18 +43,19 @@ package struct ThunkNameRegistry { .joined() } - let name = if let parent = decl.parentType { - "swiftjava_\(decl.module)_\(parent)_\(decl.name)\(suffix)" - } else { - "swiftjava_\(decl.module)_\(decl.name)\(suffix)" - } + let name = + if let parent = decl.parentType { + "swiftjava_\(decl.module)_\(parent)_\(decl.name)\(suffix)" + } else { + "swiftjava_\(decl.module)_\(decl.name)\(suffix)" + } let emittedCount = self.duplicateNames[name, default: 0] defer { self.duplicateNames[name] = emittedCount + 1 } let deduplicatedName = if emittedCount == 0 { - name // first occurrence of a name we keep as-is + name // first occurrence of a name we keep as-is } else { "\(name)$\(emittedCount)" } diff --git a/Sources/JExtractSwiftLib/TranslatedDocumentation.swift b/Sources/JExtractSwiftLib/TranslatedDocumentation.swift index 85f7bddfc..aa721e619 100644 --- a/Sources/JExtractSwiftLib/TranslatedDocumentation.swift +++ b/Sources/JExtractSwiftLib/TranslatedDocumentation.swift @@ -104,6 +104,6 @@ enum TranslatedDocumentation { } printer.indentationText = oldIdentationText printer.print(" */") - + } } diff --git a/Sources/JavaKit/Helpers/_JNIMethodIDCache.swift b/Sources/JavaKit/Helpers/_JNIMethodIDCache.swift index a67d225f5..31c6a2c0e 100644 --- a/Sources/JavaKit/Helpers/_JNIMethodIDCache.swift +++ b/Sources/JavaKit/Helpers/_JNIMethodIDCache.swift @@ -48,7 +48,6 @@ public final class _JNIMethodIDCache: Sendable { } } - public subscript(_ method: Method) -> jmethodID? { methods[method] } diff --git a/Sources/JavaKitDependencyResolver/DependencyResolver.swift b/Sources/JavaKitDependencyResolver/DependencyResolver.swift index 2d339b151..b2e27ff11 100644 --- a/Sources/JavaKitDependencyResolver/DependencyResolver.swift +++ b/Sources/JavaKitDependencyResolver/DependencyResolver.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import CSwiftJavaJNI +import SwiftJava @JavaInterface("org.swift.jni.dependencies.DependencyResolver") public struct DependencyResolver { @@ -24,9 +24,10 @@ extension JavaClass { @JavaStaticMethod public func resolveDependenciesToClasspath( projectBaseDirectory: String, - dependencies: [String]) throws -> String + dependencies: [String] + ) throws -> String @JavaStaticMethod public func hasDependencyResolverDependenciesLoaded() -> Bool -} \ No newline at end of file +} diff --git a/Sources/JavaStdlib/JavaIO/generated/BufferedInputStream.swift b/Sources/JavaStdlib/JavaIO/generated/BufferedInputStream.swift index e5935075d..be77ac064 100644 --- a/Sources/JavaStdlib/JavaIO/generated/BufferedInputStream.swift +++ b/Sources/JavaStdlib/JavaIO/generated/BufferedInputStream.swift @@ -10,84 +10,84 @@ open class BufferedInputStream: InputStream { @JavaMethod @_nonoverride public convenience init(_ arg0: InputStream?, _ arg1: Int32, environment: JNIEnvironment? = nil) - /// Java method `reset`. - /// - /// ### Java method signature - /// ```java - /// public synchronized void java.io.BufferedInputStream.reset() throws java.io.IOException - /// ``` + /// Java method `reset`. + /// + /// ### Java method signature + /// ```java + /// public synchronized void java.io.BufferedInputStream.reset() throws java.io.IOException + /// ``` @JavaMethod open override func reset() throws - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.BufferedInputStream.close() throws java.io.IOException - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.BufferedInputStream.close() throws java.io.IOException + /// ``` @JavaMethod open override func close() throws - /// Java method `mark`. - /// - /// ### Java method signature - /// ```java - /// public synchronized void java.io.BufferedInputStream.mark(int) - /// ``` + /// Java method `mark`. + /// + /// ### Java method signature + /// ```java + /// public synchronized void java.io.BufferedInputStream.mark(int) + /// ``` @JavaMethod open override func mark(_ arg0: Int32) - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public synchronized int java.io.BufferedInputStream.read(byte[],int,int) throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public synchronized int java.io.BufferedInputStream.read(byte[],int,int) throws java.io.IOException + /// ``` @JavaMethod open override func read(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) throws -> Int32 - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public synchronized int java.io.BufferedInputStream.read() throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public synchronized int java.io.BufferedInputStream.read() throws java.io.IOException + /// ``` @JavaMethod open override func read() throws -> Int32 - /// Java method `transferTo`. - /// - /// ### Java method signature - /// ```java - /// public synchronized long java.io.BufferedInputStream.transferTo(java.io.OutputStream) throws java.io.IOException - /// ``` + /// Java method `transferTo`. + /// + /// ### Java method signature + /// ```java + /// public synchronized long java.io.BufferedInputStream.transferTo(java.io.OutputStream) throws java.io.IOException + /// ``` @JavaMethod open override func transferTo(_ arg0: OutputStream?) throws -> Int64 - /// Java method `skip`. - /// - /// ### Java method signature - /// ```java - /// public synchronized long java.io.BufferedInputStream.skip(long) throws java.io.IOException - /// ``` + /// Java method `skip`. + /// + /// ### Java method signature + /// ```java + /// public synchronized long java.io.BufferedInputStream.skip(long) throws java.io.IOException + /// ``` @JavaMethod open override func skip(_ arg0: Int64) throws -> Int64 - /// Java method `available`. - /// - /// ### Java method signature - /// ```java - /// public synchronized int java.io.BufferedInputStream.available() throws java.io.IOException - /// ``` + /// Java method `available`. + /// + /// ### Java method signature + /// ```java + /// public synchronized int java.io.BufferedInputStream.available() throws java.io.IOException + /// ``` @JavaMethod open override func available() throws -> Int32 - /// Java method `markSupported`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.BufferedInputStream.markSupported() - /// ``` + /// Java method `markSupported`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.BufferedInputStream.markSupported() + /// ``` @JavaMethod open override func markSupported() -> Bool } diff --git a/Sources/JavaStdlib/JavaIO/generated/FileDescriptor.swift b/Sources/JavaStdlib/JavaIO/generated/FileDescriptor.swift index 76f01c707..17766b218 100644 --- a/Sources/JavaStdlib/JavaIO/generated/FileDescriptor.swift +++ b/Sources/JavaStdlib/JavaIO/generated/FileDescriptor.swift @@ -7,21 +7,21 @@ open class FileDescriptor: JavaObject { @JavaMethod @_nonoverride public convenience init(environment: JNIEnvironment? = nil) - /// Java method `sync`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.FileDescriptor.sync() throws java.io.SyncFailedException - /// ``` + /// Java method `sync`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.FileDescriptor.sync() throws java.io.SyncFailedException + /// ``` @JavaMethod open func sync() throws - /// Java method `valid`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.FileDescriptor.valid() - /// ``` + /// Java method `valid`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.FileDescriptor.valid() + /// ``` @JavaMethod open func valid() -> Bool } diff --git a/Sources/JavaStdlib/JavaIO/generated/InputStream.swift b/Sources/JavaStdlib/JavaIO/generated/InputStream.swift index 027088b76..5566c011a 100644 --- a/Sources/JavaStdlib/JavaIO/generated/InputStream.swift +++ b/Sources/JavaStdlib/JavaIO/generated/InputStream.swift @@ -7,129 +7,129 @@ open class InputStream: JavaObject { @JavaMethod @_nonoverride public convenience init(environment: JNIEnvironment? = nil) - /// Java method `reset`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.InputStream.reset() throws java.io.IOException - /// ``` + /// Java method `reset`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.InputStream.reset() throws java.io.IOException + /// ``` @JavaMethod open func reset() throws - /// Java method `readAllBytes`. - /// - /// ### Java method signature - /// ```java - /// public byte[] java.io.InputStream.readAllBytes() throws java.io.IOException - /// ``` + /// Java method `readAllBytes`. + /// + /// ### Java method signature + /// ```java + /// public byte[] java.io.InputStream.readAllBytes() throws java.io.IOException + /// ``` @JavaMethod open func readAllBytes() throws -> [Int8] - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.InputStream.close() throws java.io.IOException - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.InputStream.close() throws java.io.IOException + /// ``` @JavaMethod open func close() throws - /// Java method `mark`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.InputStream.mark(int) - /// ``` + /// Java method `mark`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.InputStream.mark(int) + /// ``` @JavaMethod open func mark(_ arg0: Int32) - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStream.read(byte[]) throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStream.read(byte[]) throws java.io.IOException + /// ``` @JavaMethod open func read(_ arg0: [Int8]) throws -> Int32 - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStream.read(byte[],int,int) throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStream.read(byte[],int,int) throws java.io.IOException + /// ``` @JavaMethod open func read(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) throws -> Int32 - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public abstract int java.io.InputStream.read() throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public abstract int java.io.InputStream.read() throws java.io.IOException + /// ``` @JavaMethod open func read() throws -> Int32 - /// Java method `readNBytes`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStream.readNBytes(byte[],int,int) throws java.io.IOException - /// ``` + /// Java method `readNBytes`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStream.readNBytes(byte[],int,int) throws java.io.IOException + /// ``` @JavaMethod open func readNBytes(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) throws -> Int32 - /// Java method `readNBytes`. - /// - /// ### Java method signature - /// ```java - /// public byte[] java.io.InputStream.readNBytes(int) throws java.io.IOException - /// ``` + /// Java method `readNBytes`. + /// + /// ### Java method signature + /// ```java + /// public byte[] java.io.InputStream.readNBytes(int) throws java.io.IOException + /// ``` @JavaMethod open func readNBytes(_ arg0: Int32) throws -> [Int8] - /// Java method `transferTo`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.InputStream.transferTo(java.io.OutputStream) throws java.io.IOException - /// ``` + /// Java method `transferTo`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.InputStream.transferTo(java.io.OutputStream) throws java.io.IOException + /// ``` @JavaMethod open func transferTo(_ arg0: OutputStream?) throws -> Int64 - /// Java method `skip`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.InputStream.skip(long) throws java.io.IOException - /// ``` + /// Java method `skip`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.InputStream.skip(long) throws java.io.IOException + /// ``` @JavaMethod open func skip(_ arg0: Int64) throws -> Int64 - /// Java method `available`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStream.available() throws java.io.IOException - /// ``` + /// Java method `available`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStream.available() throws java.io.IOException + /// ``` @JavaMethod open func available() throws -> Int32 - /// Java method `markSupported`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.InputStream.markSupported() - /// ``` + /// Java method `markSupported`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.InputStream.markSupported() + /// ``` @JavaMethod open func markSupported() -> Bool - /// Java method `skipNBytes`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.InputStream.skipNBytes(long) throws java.io.IOException - /// ``` + /// Java method `skipNBytes`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.InputStream.skipNBytes(long) throws java.io.IOException + /// ``` @JavaMethod open func skipNBytes(_ arg0: Int64) throws } @@ -140,6 +140,6 @@ extension JavaClass { /// ```java /// public static java.io.InputStream java.io.InputStream.nullInputStream() /// ``` -@JavaStaticMethod + @JavaStaticMethod public func nullInputStream() -> InputStream! } diff --git a/Sources/JavaStdlib/JavaIO/generated/InputStreamReader.swift b/Sources/JavaStdlib/JavaIO/generated/InputStreamReader.swift index a0b20bb19..917144d6f 100644 --- a/Sources/JavaStdlib/JavaIO/generated/InputStreamReader.swift +++ b/Sources/JavaStdlib/JavaIO/generated/InputStreamReader.swift @@ -13,48 +13,48 @@ open class InputStreamReader: Reader { @JavaMethod @_nonoverride public convenience init(_ arg0: InputStream?, environment: JNIEnvironment? = nil) - /// Java method `ready`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.InputStreamReader.ready() throws java.io.IOException - /// ``` + /// Java method `ready`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.InputStreamReader.ready() throws java.io.IOException + /// ``` @JavaMethod open override func ready() throws -> Bool - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.InputStreamReader.close() throws java.io.IOException - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.InputStreamReader.close() throws java.io.IOException + /// ``` @JavaMethod open override func close() throws - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStreamReader.read(char[],int,int) throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStreamReader.read(char[],int,int) throws java.io.IOException + /// ``` @JavaMethod open override func read(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) throws -> Int32 - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.InputStreamReader.read() throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.InputStreamReader.read() throws java.io.IOException + /// ``` @JavaMethod open override func read() throws -> Int32 - /// Java method `getEncoding`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.InputStreamReader.getEncoding() - /// ``` + /// Java method `getEncoding`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.InputStreamReader.getEncoding() + /// ``` @JavaMethod open func getEncoding() -> String } diff --git a/Sources/JavaStdlib/JavaIO/generated/Reader.swift b/Sources/JavaStdlib/JavaIO/generated/Reader.swift index f98dabcc8..a281de84f 100644 --- a/Sources/JavaStdlib/JavaIO/generated/Reader.swift +++ b/Sources/JavaStdlib/JavaIO/generated/Reader.swift @@ -11,7 +11,7 @@ open class Reader: JavaObject { /// ```java /// public boolean java.io.Reader.ready() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func ready() throws -> Bool /// Java method `readAllAsString`. @@ -20,7 +20,7 @@ open class Reader: JavaObject { /// ```java /// public java.lang.String java.io.Reader.readAllAsString() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func readAllAsString() throws -> String /// Java method `reset`. @@ -29,7 +29,7 @@ open class Reader: JavaObject { /// ```java /// public void java.io.Reader.reset() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func reset() throws /// Java method `close`. @@ -38,7 +38,7 @@ open class Reader: JavaObject { /// ```java /// public abstract void java.io.Reader.close() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func close() throws /// Java method `mark`. @@ -47,7 +47,7 @@ open class Reader: JavaObject { /// ```java /// public void java.io.Reader.mark(int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func mark(_ arg0: Int32) throws /// Java method `read`. @@ -56,7 +56,7 @@ open class Reader: JavaObject { /// ```java /// public abstract int java.io.Reader.read(char[],int,int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func read(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) throws -> Int32 /// Java method `read`. @@ -65,7 +65,7 @@ open class Reader: JavaObject { /// ```java /// public int java.io.Reader.read() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func read() throws -> Int32 /// Java method `read`. @@ -74,7 +74,7 @@ open class Reader: JavaObject { /// ```java /// public int java.io.Reader.read(char[]) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func read(_ arg0: [UInt16]) throws -> Int32 /// Java method `transferTo`. @@ -83,7 +83,7 @@ open class Reader: JavaObject { /// ```java /// public long java.io.Reader.transferTo(java.io.Writer) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func transferTo(_ arg0: Writer?) throws -> Int64 /// Java method `skip`. @@ -92,7 +92,7 @@ open class Reader: JavaObject { /// ```java /// public long java.io.Reader.skip(long) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func skip(_ arg0: Int64) throws -> Int64 /// Java method `markSupported`. @@ -101,7 +101,7 @@ open class Reader: JavaObject { /// ```java /// public boolean java.io.Reader.markSupported() /// ``` -@JavaMethod + @JavaMethod open func markSupported() -> Bool /// Java method `readAllLines`. @@ -110,7 +110,7 @@ open class Reader: JavaObject { /// ```java /// public java.util.List java.io.Reader.readAllLines() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func readAllLines() throws -> List! } extension JavaClass { @@ -120,7 +120,7 @@ extension JavaClass { /// ```java /// public static java.io.Reader java.io.Reader.nullReader() /// ``` -@JavaStaticMethod + @JavaStaticMethod public func nullReader() -> Reader! /// Java method `of`. @@ -129,6 +129,6 @@ extension JavaClass { /// ```java /// public static java.io.Reader java.io.Reader.of(java.lang.CharSequence) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func of(_ arg0: CharSequence?) -> Reader! } diff --git a/Sources/JavaStdlib/JavaIO/generated/StringReader.swift b/Sources/JavaStdlib/JavaIO/generated/StringReader.swift index 432079fe3..3abbad307 100644 --- a/Sources/JavaStdlib/JavaIO/generated/StringReader.swift +++ b/Sources/JavaStdlib/JavaIO/generated/StringReader.swift @@ -7,75 +7,75 @@ open class StringReader: Reader { @JavaMethod @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil) - /// Java method `ready`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.StringReader.ready() throws java.io.IOException - /// ``` + /// Java method `ready`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.StringReader.ready() throws java.io.IOException + /// ``` @JavaMethod open override func ready() throws -> Bool - /// Java method `reset`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringReader.reset() throws java.io.IOException - /// ``` + /// Java method `reset`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringReader.reset() throws java.io.IOException + /// ``` @JavaMethod open override func reset() throws - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringReader.close() - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringReader.close() + /// ``` @JavaMethod open override func close() - /// Java method `mark`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringReader.mark(int) throws java.io.IOException - /// ``` + /// Java method `mark`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringReader.mark(int) throws java.io.IOException + /// ``` @JavaMethod open override func mark(_ arg0: Int32) throws - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.StringReader.read(char[],int,int) throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.StringReader.read(char[],int,int) throws java.io.IOException + /// ``` @JavaMethod open override func read(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) throws -> Int32 - /// Java method `read`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.StringReader.read() throws java.io.IOException - /// ``` + /// Java method `read`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.StringReader.read() throws java.io.IOException + /// ``` @JavaMethod open override func read() throws -> Int32 - /// Java method `skip`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.StringReader.skip(long) throws java.io.IOException - /// ``` + /// Java method `skip`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.StringReader.skip(long) throws java.io.IOException + /// ``` @JavaMethod open override func skip(_ arg0: Int64) throws -> Int64 - /// Java method `markSupported`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.StringReader.markSupported() - /// ``` + /// Java method `markSupported`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.StringReader.markSupported() + /// ``` @JavaMethod open override func markSupported() -> Bool } diff --git a/Sources/JavaStdlib/JavaIO/generated/WatchService.swift b/Sources/JavaStdlib/JavaIO/generated/WatchService.swift index 7da4a476f..915487bea 100644 --- a/Sources/JavaStdlib/JavaIO/generated/WatchService.swift +++ b/Sources/JavaStdlib/JavaIO/generated/WatchService.swift @@ -10,6 +10,6 @@ public struct WatchService { /// ```java /// public abstract void java.nio.file.WatchService.close() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod public func close() throws } diff --git a/Sources/JavaStdlib/JavaLangReflect/Constructor+Utilities.swift b/Sources/JavaStdlib/JavaLangReflect/Constructor+Utilities.swift index 4042ec766..796ed305d 100644 --- a/Sources/JavaStdlib/JavaLangReflect/Constructor+Utilities.swift +++ b/Sources/JavaStdlib/JavaLangReflect/Constructor+Utilities.swift @@ -15,6 +15,6 @@ extension Constructor { /// Whether this is a 'native' constructor. public var isNative: Bool { - return (getModifiers() & 256) != 0 + (getModifiers() & 256) != 0 } } diff --git a/Sources/JavaStdlib/JavaLangReflect/Field+Utilities.swift b/Sources/JavaStdlib/JavaLangReflect/Field+Utilities.swift index 0fc1b2beb..66bd7e694 100644 --- a/Sources/JavaStdlib/JavaLangReflect/Field+Utilities.swift +++ b/Sources/JavaStdlib/JavaLangReflect/Field+Utilities.swift @@ -13,13 +13,13 @@ //===----------------------------------------------------------------------===// extension Field { - /// Whether this is a 'static' field. - public var isStatic: Bool { - return (getModifiers() & 0x08) != 0 - } + /// Whether this is a 'static' field. + public var isStatic: Bool { + (getModifiers() & 0x08) != 0 + } /// Whether this is a 'final' field. public var isFinal: Bool { - return (getModifiers() & 16) != 0 + (getModifiers() & 16) != 0 } } diff --git a/Sources/JavaStdlib/JavaLangReflect/HasJavaModifiers.swift b/Sources/JavaStdlib/JavaLangReflect/HasJavaModifiers.swift index fc10edfea..675e1f631 100644 --- a/Sources/JavaStdlib/JavaLangReflect/HasJavaModifiers.swift +++ b/Sources/JavaStdlib/JavaLangReflect/HasJavaModifiers.swift @@ -21,24 +21,24 @@ public protocol HasJavaModifiers { extension HasJavaModifiers { /// Whether the modifiers contain 'public'. public var isPublic: Bool { - return (getModifiers() & 0x00000001) != 0 + (getModifiers() & 0x0000_0001) != 0 } /// Whether the modifiers contain 'private'. public var isPrivate: Bool { - return (getModifiers() & 0x00000002) != 0 + (getModifiers() & 0x0000_0002) != 0 } /// Whether the modifiers contain 'protected'. public var isProtected: Bool { - return (getModifiers() & 0x00000004) != 0 + (getModifiers() & 0x0000_0004) != 0 } /// Whether the modifiers is equivelant to 'package'.. /// /// The "default" access level in Java is 'package', it is signified by lack of a different access modifier. public var isPackage: Bool { - return !isPublic && !isPrivate && !isProtected + !isPublic && !isPrivate && !isProtected } } diff --git a/Sources/JavaStdlib/JavaLangReflect/Method+Utilities.swift b/Sources/JavaStdlib/JavaLangReflect/Method+Utilities.swift index 00ca3d6bf..145384267 100644 --- a/Sources/JavaStdlib/JavaLangReflect/Method+Utilities.swift +++ b/Sources/JavaStdlib/JavaLangReflect/Method+Utilities.swift @@ -16,16 +16,16 @@ extension Method { /// Whether this is a 'static' method. public var isStatic: Bool { - return (getModifiers() & 0x00000008) != 0 + (getModifiers() & 0x0000_0008) != 0 } /// Whether this is a 'native' method. public var isNative: Bool { - return (getModifiers() & 0x00000100) != 0 + (getModifiers() & 0x0000_0100) != 0 } - + /// Whether this is a 'final' method. public var isFinal: Bool { - return (getModifiers() & 0x00000010) != 0 + (getModifiers() & 0x0000_0010) != 0 } } diff --git a/Sources/JavaStdlib/JavaLangReflect/TypeVariable+Extensions.swift b/Sources/JavaStdlib/JavaLangReflect/TypeVariable+Extensions.swift index 157ae353d..cae39e27d 100644 --- a/Sources/JavaStdlib/JavaLangReflect/TypeVariable+Extensions.swift +++ b/Sources/JavaStdlib/JavaLangReflect/TypeVariable+Extensions.swift @@ -16,11 +16,11 @@ import CSwiftJavaJNI import SwiftJava // FIXME: all interfaces should ahve these https://github.com/swiftlang/swift-java/issues/430 -extension TypeVariable { +extension TypeVariable { @JavaMethod public func toString() -> String - + @JavaMethod public func getClass() -> JavaClass! @@ -37,7 +37,7 @@ extension TypeVariable: Hashable { public func hash(into hasher: inout Hasher) { guard let pojo = self.as(JavaObject.self) else { - return + return } hasher.combine(pojo.hashCode()) @@ -57,7 +57,7 @@ extension TypeVariable: Hashable { } extension TypeVariable { - public var description: String { + public var description: String { toString() } -} \ No newline at end of file +} diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift b/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift index c6b0f4fcc..05f3dc760 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/AccessibleObject.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.lang.reflect.AccessibleObject") open class AccessibleObject: JavaObject { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/AnnotatedType.swift b/Sources/JavaStdlib/JavaLangReflect/generated/AnnotatedType.swift index 87480ef4b..d8144e63c 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/AnnotatedType.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/AnnotatedType.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.AnnotatedType") public struct AnnotatedType { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Annotation.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Annotation.swift index 1449bf329..cd17c3a1e 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Annotation.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Annotation.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.annotation.Annotation") public struct Annotation { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift index 202cba9bd..f0ef597bf 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Constructor.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.lang.reflect.Constructor") open class Constructor: Executable { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift index af9931d35..289823aee 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Executable.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.lang.reflect.Executable", implements: GenericDeclaration.self) open class Executable: AccessibleObject { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift index ba4f45383..673718d43 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Field.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.lang.reflect.Field") open class Field: AccessibleObject { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/GenericArrayType.swift b/Sources/JavaStdlib/JavaLangReflect/generated/GenericArrayType.swift index 42375e086..dddef99c6 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/GenericArrayType.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/GenericArrayType.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.GenericArrayType", extends: Type.self) public struct GenericArrayType { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/GenericDeclaration.swift b/Sources/JavaStdlib/JavaLangReflect/generated/GenericDeclaration.swift index 839fa7dba..c14972ebc 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/GenericDeclaration.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/GenericDeclaration.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.GenericDeclaration") public struct GenericDeclaration { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift index 94371cd40..7eaa99160 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Method.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.lang.reflect.Method") open class Method: Executable { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Parameter.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Parameter.swift index 35ea70984..9d47ca8ab 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Parameter.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Parameter.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.lang.reflect.Parameter") open class Parameter: JavaObject { diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/ParameterizedType.swift b/Sources/JavaStdlib/JavaLangReflect/generated/ParameterizedType.swift index 984c2b16e..b7d3fb960 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/ParameterizedType.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/ParameterizedType.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.ParameterizedType", extends: Type.self) public struct ParameterizedType { @@ -17,11 +17,11 @@ public struct ParameterizedType { public func getTypeName() -> String } -extension ParameterizedType { +extension ParameterizedType { @JavaMethod public func toString() -> String - + @JavaMethod public func getClass() -> JavaClass! @@ -32,8 +32,8 @@ extension ParameterizedType { public func hashCode() -> Int32 } -extension ParameterizedType: CustomStringConvertible { - public var description: String { +extension ParameterizedType: CustomStringConvertible { + public var description: String { toString() } -} \ No newline at end of file +} diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/Type.swift b/Sources/JavaStdlib/JavaLangReflect/generated/Type.swift index 2e85c3842..72230a261 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/Type.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/Type.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.Type") public struct Type { @@ -11,7 +11,7 @@ public struct Type { public func toString() -> String } -extension Type: CustomStringConvertible { +extension Type: CustomStringConvertible { public var description: String { "JavaLangReflect.Type(\(self.toString()))" } diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/TypeVariable.swift b/Sources/JavaStdlib/JavaLangReflect/generated/TypeVariable.swift index 7bf8f7ba2..ec3e7ad4f 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/TypeVariable.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/TypeVariable.swift @@ -1,12 +1,12 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.TypeVariable", extends: Type.self) public struct TypeVariable: CustomStringConvertible { @JavaMethod public func getGenericDeclaration() -> GenericDeclaration! - + @JavaMethod public func getAnnotatedBounds() -> [AnnotatedType?] diff --git a/Sources/JavaStdlib/JavaLangReflect/generated/WildcardType.swift b/Sources/JavaStdlib/JavaLangReflect/generated/WildcardType.swift index a09b1b3b9..ad46ef08b 100644 --- a/Sources/JavaStdlib/JavaLangReflect/generated/WildcardType.swift +++ b/Sources/JavaStdlib/JavaLangReflect/generated/WildcardType.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.lang.reflect.WildcardType", extends: Type.self) public struct WildcardType { diff --git a/Sources/JavaStdlib/JavaNet/URL+Extensions.swift b/Sources/JavaStdlib/JavaNet/URL+Extensions.swift index 2b220d1c8..da1d1fe36 100644 --- a/Sources/JavaStdlib/JavaNet/URL+Extensions.swift +++ b/Sources/JavaStdlib/JavaNet/URL+Extensions.swift @@ -12,10 +12,10 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import CSwiftJavaJNI - import Foundation +import SwiftJava + public typealias SwiftJavaFoundationURL = Foundation.URL extension SwiftJavaFoundationURL { @@ -26,9 +26,9 @@ extension SwiftJavaFoundationURL { return converted } } - + extension URL { public static func fromSwift(_ url: SwiftJavaFoundationURL) throws -> URL { - return try URL(url.absoluteString) + try URL(url.absoluteString) } -} \ No newline at end of file +} diff --git a/Sources/JavaStdlib/JavaNet/generated/URI.swift b/Sources/JavaStdlib/JavaNet/generated/URI.swift index d62424065..648c4ac55 100644 --- a/Sources/JavaStdlib/JavaNet/generated/URI.swift +++ b/Sources/JavaStdlib/JavaNet/generated/URI.swift @@ -1,23 +1,50 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.net.URI") open class URI: JavaObject { @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, _ arg4: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: String, + _ arg3: String, + _ arg4: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: String, + _ arg3: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: Int32, _ arg4: String, _ arg5: String, _ arg6: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: String, + _ arg3: Int32, + _ arg4: String, + _ arg5: String, + _ arg6: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool diff --git a/Sources/JavaStdlib/JavaNet/generated/URL.swift b/Sources/JavaStdlib/JavaNet/generated/URL.swift index 95ac8fb4c..495ec0768 100644 --- a/Sources/JavaStdlib/JavaNet/generated/URL.swift +++ b/Sources/JavaStdlib/JavaNet/generated/URL.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.net.URL") open class URL: JavaObject { @@ -11,10 +11,21 @@ open class URL: JavaObject { @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: Int32, _ arg3: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: Int32, + _ arg3: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: String, + _ arg1: String, + _ arg2: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool diff --git a/Sources/JavaStdlib/JavaNet/generated/URLClassLoader.swift b/Sources/JavaStdlib/JavaNet/generated/URLClassLoader.swift index d16e2eac6..47f4c4fd3 100644 --- a/Sources/JavaStdlib/JavaNet/generated/URLClassLoader.swift +++ b/Sources/JavaStdlib/JavaNet/generated/URLClassLoader.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.net.URLClassLoader") open class URLClassLoader: JavaObject { diff --git a/Sources/JavaStdlib/JavaNet/generated/URLConnection.swift b/Sources/JavaStdlib/JavaNet/generated/URLConnection.swift index 332e7425c..33714b3df 100644 --- a/Sources/JavaStdlib/JavaNet/generated/URLConnection.swift +++ b/Sources/JavaStdlib/JavaNet/generated/URLConnection.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.net.URLConnection") public struct URLConnection { diff --git a/Sources/JavaStdlib/JavaUtil/generated/ArrayDeque.swift b/Sources/JavaStdlib/JavaUtil/generated/ArrayDeque.swift index b8a1fb189..14a42df49 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/ArrayDeque.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/ArrayDeque.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.ArrayDeque") open class ArrayDeque: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/ArrayList.swift b/Sources/JavaStdlib/JavaUtil/generated/ArrayList.swift index 9ead8f4c0..769467133 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/ArrayList.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/ArrayList.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.ArrayList", implements: List.self, RandomAccess.self) open class ArrayList: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/BitSet.swift b/Sources/JavaStdlib/JavaUtil/generated/BitSet.swift index 7356b4b89..71fd27a72 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/BitSet.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/BitSet.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.BitSet") open class BitSet: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/Enumeration.swift b/Sources/JavaStdlib/JavaUtil/generated/Enumeration.swift index 9c039b166..e2a424099 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/Enumeration.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/Enumeration.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.Enumeration") public struct Enumeration { diff --git a/Sources/JavaStdlib/JavaUtil/generated/HashMap.swift b/Sources/JavaStdlib/JavaUtil/generated/HashMap.swift index a217d48fd..ace4090bc 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/HashMap.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/HashMap.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.HashMap") open class HashMap: JavaObject { @@ -63,5 +63,6 @@ open class HashMap: JavaObject { } extension JavaClass { @JavaStaticMethod - public func newHashMap(_ arg0: Int32) -> HashMap! where ObjectType == HashMap + public func newHashMap(_ arg0: Int32) -> HashMap! + where ObjectType == HashMap } diff --git a/Sources/JavaStdlib/JavaUtil/generated/HashSet.swift b/Sources/JavaStdlib/JavaUtil/generated/HashSet.swift index 3b089c861..30f451d54 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/HashSet.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/HashSet.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.HashSet", implements: JavaSet.self) open class HashSet: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/JavaDictionary.swift b/Sources/JavaStdlib/JavaUtil/generated/JavaDictionary.swift index 0a6508f5c..8ae665fc3 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/JavaDictionary.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/JavaDictionary.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.Dictionary") open class JavaDictionary: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/LinkedList.swift b/Sources/JavaStdlib/JavaUtil/generated/LinkedList.swift index 2464980f0..f29d68d39 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/LinkedList.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/LinkedList.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.LinkedList") public struct LinkedList { diff --git a/Sources/JavaStdlib/JavaUtil/generated/PriorityQueue.swift b/Sources/JavaStdlib/JavaUtil/generated/PriorityQueue.swift index d9d9a85a5..cb101294a 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/PriorityQueue.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/PriorityQueue.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.PriorityQueue") open class PriorityQueue: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/Queue.swift b/Sources/JavaStdlib/JavaUtil/generated/Queue.swift index b007e90a7..73de8a31d 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/Queue.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/Queue.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.Queue", extends: JavaCollection.self) public struct Queue { diff --git a/Sources/JavaStdlib/JavaUtil/generated/RandomAccess.swift b/Sources/JavaStdlib/JavaUtil/generated/RandomAccess.swift index 91b3fa31c..703ac70c3 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/RandomAccess.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/RandomAccess.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.RandomAccess") public struct RandomAccess { diff --git a/Sources/JavaStdlib/JavaUtil/generated/Stack.swift b/Sources/JavaStdlib/JavaUtil/generated/Stack.swift index be4330ebf..edb59ec81 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/Stack.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/Stack.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.Stack") open class Stack: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtil/generated/TreeMap.swift b/Sources/JavaStdlib/JavaUtil/generated/TreeMap.swift index c6dd3bb05..05113389a 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/TreeMap.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/TreeMap.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.TreeMap") open class TreeMap: JavaObject { @@ -73,50 +73,50 @@ open class TreeMap: JavaObject { extension TreeMap { @JavaClass("java.util.AbstractMap$SimpleEntry") open class SimpleEntry: JavaObject { - @JavaMethod - @_nonoverride public convenience init(_ arg0: JavaObject?, _ arg1: JavaObject?, environment: JNIEnvironment? = nil) + @JavaMethod + @_nonoverride public convenience init(_ arg0: JavaObject?, _ arg1: JavaObject?, environment: JNIEnvironment? = nil) - @JavaMethod - open override func equals(_ arg0: JavaObject?) -> Bool + @JavaMethod + open override func equals(_ arg0: JavaObject?) -> Bool - @JavaMethod - open override func toString() -> String + @JavaMethod + open override func toString() -> String - @JavaMethod - open override func hashCode() -> Int32 + @JavaMethod + open override func hashCode() -> Int32 - @JavaMethod - open func getValue() -> JavaObject! + @JavaMethod + open func getValue() -> JavaObject! - @JavaMethod - open func getKey() -> JavaObject! + @JavaMethod + open func getKey() -> JavaObject! - @JavaMethod - open func setValue(_ arg0: JavaObject?) -> JavaObject! + @JavaMethod + open func setValue(_ arg0: JavaObject?) -> JavaObject! } } extension TreeMap { @JavaClass("java.util.AbstractMap$SimpleImmutableEntry") open class SimpleImmutableEntry: JavaObject { - @JavaMethod - @_nonoverride public convenience init(_ arg0: JavaObject?, _ arg1: JavaObject?, environment: JNIEnvironment? = nil) + @JavaMethod + @_nonoverride public convenience init(_ arg0: JavaObject?, _ arg1: JavaObject?, environment: JNIEnvironment? = nil) - @JavaMethod - open override func equals(_ arg0: JavaObject?) -> Bool + @JavaMethod + open override func equals(_ arg0: JavaObject?) -> Bool - @JavaMethod - open override func toString() -> String + @JavaMethod + open override func toString() -> String - @JavaMethod - open override func hashCode() -> Int32 + @JavaMethod + open override func hashCode() -> Int32 - @JavaMethod - open func getValue() -> JavaObject! + @JavaMethod + open func getValue() -> JavaObject! - @JavaMethod - open func getKey() -> JavaObject! + @JavaMethod + open func getKey() -> JavaObject! - @JavaMethod - open func setValue(_ arg0: JavaObject?) -> JavaObject! + @JavaMethod + open func setValue(_ arg0: JavaObject?) -> JavaObject! } } diff --git a/Sources/JavaStdlib/JavaUtil/generated/TreeSet.swift b/Sources/JavaStdlib/JavaUtil/generated/TreeSet.swift index 3ec9b1ea7..672057779 100644 --- a/Sources/JavaStdlib/JavaUtil/generated/TreeSet.swift +++ b/Sources/JavaStdlib/JavaUtil/generated/TreeSet.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.TreeSet") open class TreeSet: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiConsumer.swift index a01a0933e..273e2301b 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.BiConsumer") public struct JavaBiConsumer { @@ -8,7 +8,9 @@ public struct JavaBiConsumer { public func accept(_ arg0: JavaObject?, _ arg1: JavaObject?) @JavaMethod - public func andThen(_ arg0: JavaBiConsumer?) -> JavaBiConsumer< + public func andThen( + _ arg0: JavaBiConsumer? + ) -> JavaBiConsumer< JavaObject, JavaObject >? } diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiFunction.swift index ad54c58b1..7903a3729 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.BiFunction") public struct JavaBiFunction { @@ -8,7 +8,9 @@ public struct JavaBiFunction JavaObject? @JavaMethod - public func andThen(_ arg0: JavaFunction?) -> JavaBiFunction< + public func andThen( + _ arg0: JavaFunction? + ) -> JavaBiFunction< JavaObject, JavaObject, JavaObject >? } diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiPredicate.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiPredicate.swift index ee8aa0f50..b926fdb9e 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiPredicate.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBiPredicate.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.BiPredicate") public struct JavaBiPredicate { @@ -8,12 +8,16 @@ public struct JavaBiPredicate { public func test(_ arg0: JavaObject?, _ arg1: JavaObject?) -> Bool @JavaMethod - public func or(_ arg0: JavaBiPredicate?) -> JavaBiPredicate< + public func or( + _ arg0: JavaBiPredicate? + ) -> JavaBiPredicate< JavaObject, JavaObject >? @JavaMethod - public func and(_ arg0: JavaBiPredicate?) -> JavaBiPredicate< + public func and( + _ arg0: JavaBiPredicate? + ) -> JavaBiPredicate< JavaObject, JavaObject >? diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBinaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBinaryOperator.swift index 1c7f54569..b911fdaf5 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBinaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBinaryOperator.swift @@ -1,16 +1,19 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface( "java.util.function.BinaryOperator", - extends: JavaBiFunction.self) + extends: JavaBiFunction.self +) public struct JavaBinaryOperator { @JavaMethod public func apply(_ arg0: JavaObject?, _ arg1: JavaObject?) -> JavaObject? @JavaMethod - public func andThen(_ arg0: JavaFunction?) -> JavaBiFunction< + public func andThen( + _ arg0: JavaFunction? + ) -> JavaBiFunction< JavaObject, JavaObject, JavaObject >? } diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBooleanSupplier.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBooleanSupplier.swift index e6e4a3ced..41a8351a4 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBooleanSupplier.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaBooleanSupplier.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.BooleanSupplier") public struct JavaBooleanSupplier { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaConsumer.swift index 7da9bea8d..0e13b30fa 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.Consumer") public struct JavaConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleBinaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleBinaryOperator.swift index f6c1c671e..a05d4fe01 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleBinaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleBinaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleBinaryOperator") public struct JavaDoubleBinaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleConsumer.swift index baf53c4ac..3582f545e 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleConsumer") public struct JavaDoubleConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleFunction.swift index 6f5d6752f..95c8ae96e 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleFunction") public struct JavaDoubleFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoublePredicate.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoublePredicate.swift index c594518d1..628d32048 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoublePredicate.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoublePredicate.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoublePredicate") public struct JavaDoublePredicate { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleSupplier.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleSupplier.swift index 839ae7e78..4abd42873 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleSupplier.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleSupplier.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleSupplier") public struct JavaDoubleSupplier { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToIntFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToIntFunction.swift index 438249ebf..a1183b758 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToIntFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToIntFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleToIntFunction") public struct JavaDoubleToIntFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToLongFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToLongFunction.swift index 76b916db4..da59036bd 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToLongFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleToLongFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleToLongFunction") public struct JavaDoubleToLongFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleUnaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleUnaryOperator.swift index cf1ff7e5c..de4e7b013 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleUnaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaDoubleUnaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.DoubleUnaryOperator") public struct JavaDoubleUnaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaFunction.swift index 7a8165d87..c78984ff6 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.Function") public struct JavaFunction { @@ -8,12 +8,16 @@ public struct JavaFunction { public func apply(_ arg0: JavaObject?) -> JavaObject? @JavaMethod - public func compose(_ arg0: JavaFunction?) -> JavaFunction< + public func compose( + _ arg0: JavaFunction? + ) -> JavaFunction< JavaObject, JavaObject >? @JavaMethod - public func andThen(_ arg0: JavaFunction?) -> JavaFunction< + public func andThen( + _ arg0: JavaFunction? + ) -> JavaFunction< JavaObject, JavaObject >? } diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntBinaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntBinaryOperator.swift index 3df580c76..feb6d9b42 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntBinaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntBinaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntBinaryOperator") public struct JavaIntBinaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntConsumer.swift index a8ac7c0bf..072d36b12 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntConsumer") public struct JavaIntConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntFunction.swift index 6ebb7292d..afcb5e70f 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntFunction") public struct JavaIntFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntPredicate.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntPredicate.swift index 66c5e1335..bb425d912 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntPredicate.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntPredicate.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntPredicate") public struct JavaIntPredicate { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntSupplier.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntSupplier.swift index 0976fd53d..c7dce4f9b 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntSupplier.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntSupplier.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntSupplier") public struct JavaIntSupplier { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToDoubleFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToDoubleFunction.swift index 9891e8153..ffd369d5f 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToDoubleFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToDoubleFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntToDoubleFunction") public struct JavaIntToDoubleFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToLongFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToLongFunction.swift index 17a7b7fac..fa11fcbb0 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToLongFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntToLongFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntToLongFunction") public struct JavaIntToLongFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntUnaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntUnaryOperator.swift index 89528a2b8..716d93b0d 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntUnaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaIntUnaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.IntUnaryOperator") public struct JavaIntUnaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongBinaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongBinaryOperator.swift index 1cd53b933..0ec7d8ee5 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongBinaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongBinaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongBinaryOperator") public struct JavaLongBinaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongConsumer.swift index 4c84754a7..63cb4dff4 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongConsumer") public struct JavaLongConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongFunction.swift index 9ce4cef15..f77d7257b 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongFunction") public struct JavaLongFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongPredicate.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongPredicate.swift index 8f8f91fcf..e5948ae66 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongPredicate.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongPredicate.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongPredicate") public struct JavaLongPredicate { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongSupplier.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongSupplier.swift index e0a203a18..0aea4cc1c 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongSupplier.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongSupplier.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongSupplier") public struct JavaLongSupplier { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToDoubleFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToDoubleFunction.swift index 7167d8fc9..8d147c79e 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToDoubleFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToDoubleFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongToDoubleFunction") public struct JavaLongToDoubleFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToIntFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToIntFunction.swift index 006713043..eec2cdbc5 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToIntFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongToIntFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongToIntFunction") public struct JavaLongToIntFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongUnaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongUnaryOperator.swift index 8cf8944be..7c55c8986 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongUnaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaLongUnaryOperator.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.LongUnaryOperator") public struct JavaLongUnaryOperator { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjDoubleConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjDoubleConsumer.swift index aa7d5a48a..a6c79ec57 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjDoubleConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjDoubleConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ObjDoubleConsumer") public struct JavaObjDoubleConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjIntConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjIntConsumer.swift index c53c3631c..a7513a37c 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjIntConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjIntConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ObjIntConsumer") public struct JavaObjIntConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjLongConsumer.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjLongConsumer.swift index ff4f7798a..55fc61460 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjLongConsumer.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaObjLongConsumer.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ObjLongConsumer") public struct JavaObjLongConsumer { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaPredicate.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaPredicate.swift index b888e1786..a3119adde 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaPredicate.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaPredicate.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.Predicate") public struct JavaPredicate { @@ -18,7 +18,9 @@ public struct JavaPredicate { } extension JavaClass { @JavaStaticMethod - public func not(_ arg0: JavaPredicate?) -> JavaPredicate< + public func not( + _ arg0: JavaPredicate? + ) -> JavaPredicate< JavaObject >? where ObjectType == JavaPredicate diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaSupplier.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaSupplier.swift index 4d4c73cda..29c26603f 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaSupplier.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaSupplier.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.Supplier") public struct JavaSupplier { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleBiFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleBiFunction.swift index 35f77b785..7bcca2114 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleBiFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleBiFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToDoubleBiFunction") public struct JavaToDoubleBiFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleFunction.swift index 56ee180d9..78d090574 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToDoubleFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToDoubleFunction") public struct JavaToDoubleFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntBiFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntBiFunction.swift index dc17fa2b2..d57db659c 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntBiFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntBiFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToIntBiFunction") public struct JavaToIntBiFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntFunction.swift index 3663f4993..7f7976216 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToIntFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToIntFunction") public struct JavaToIntFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongBiFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongBiFunction.swift index 1d5fc7391..26edf8c6d 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongBiFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongBiFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToLongBiFunction") public struct JavaToLongBiFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongFunction.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongFunction.swift index 66805be70..dc5ce2508 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongFunction.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaToLongFunction.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface("java.util.function.ToLongFunction") public struct JavaToLongFunction { diff --git a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaUnaryOperator.swift b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaUnaryOperator.swift index 11dc00ee1..bd20f6504 100644 --- a/Sources/JavaStdlib/JavaUtilFunction/generated/JavaUnaryOperator.swift +++ b/Sources/JavaStdlib/JavaUtilFunction/generated/JavaUnaryOperator.swift @@ -1,20 +1,26 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaInterface( - "java.util.function.UnaryOperator", extends: JavaFunction.self) + "java.util.function.UnaryOperator", + extends: JavaFunction.self +) public struct JavaUnaryOperator { @JavaMethod public func apply(_ arg0: JavaObject?) -> JavaObject? @JavaMethod - public func compose(_ arg0: JavaFunction?) -> JavaFunction< + public func compose( + _ arg0: JavaFunction? + ) -> JavaFunction< JavaObject, JavaObject >? @JavaMethod - public func andThen(_ arg0: JavaFunction?) -> JavaFunction< + public func andThen( + _ arg0: JavaFunction? + ) -> JavaFunction< JavaObject, JavaObject >? } diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/Attributes.swift b/Sources/JavaStdlib/JavaUtilJar/generated/Attributes.swift index 4897ebe3f..4925218df 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/Attributes.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/Attributes.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.util.jar.Attributes") open class Attributes: JavaObject { @@ -65,17 +65,17 @@ open class Attributes: JavaObject { extension Attributes { @JavaClass("java.util.jar.Attributes$Name") open class Name: JavaObject { - @JavaMethod - @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil) + @JavaMethod + @_nonoverride public convenience init(_ arg0: String, environment: JNIEnvironment? = nil) - @JavaMethod - open override func equals(_ arg0: JavaObject?) -> Bool + @JavaMethod + open override func equals(_ arg0: JavaObject?) -> Bool - @JavaMethod - open override func toString() -> String + @JavaMethod + open override func toString() -> String - @JavaMethod - open override func hashCode() -> Int32 + @JavaMethod + open override func hashCode() -> Int32 } } extension JavaClass { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/JarEntry.swift b/Sources/JavaStdlib/JavaUtilJar/generated/JarEntry.swift index adfb6d172..7ae497491 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/JarEntry.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/JarEntry.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.jar.JarEntry") open class JarEntry: ZipEntry { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/JarFile.swift b/Sources/JavaStdlib/JavaUtilJar/generated/JarFile.swift index e630afd2e..0971ccf15 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/JarFile.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/JarFile.swift @@ -1,7 +1,7 @@ +import CSwiftJavaJNI +import JavaUtil // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import JavaUtil -import CSwiftJavaJNI @JavaClass("java.util.jar.JarFile") open class JarFile: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/JarInputStream.swift b/Sources/JavaStdlib/JavaUtilJar/generated/JarInputStream.swift index 60f007fe9..c2cb6c587 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/JarInputStream.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/JarInputStream.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.jar.JarInputStream") open class JarInputStream: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/JarOutputStream.swift b/Sources/JavaStdlib/JavaUtilJar/generated/JarOutputStream.swift index bd27471f6..ba2adf63e 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/JarOutputStream.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/JarOutputStream.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.jar.JarOutputStream") open class JarOutputStream: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/Manifest.swift b/Sources/JavaStdlib/JavaUtilJar/generated/Manifest.swift index 2033f41af..1619c0c26 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/Manifest.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/Manifest.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.jar.Manifest") open class Manifest: JavaObject { diff --git a/Sources/JavaStdlib/JavaUtilJar/generated/ZipEntry.swift b/Sources/JavaStdlib/JavaUtilJar/generated/ZipEntry.swift index 3066d54c7..2cede4aa1 100644 --- a/Sources/JavaStdlib/JavaUtilJar/generated/ZipEntry.swift +++ b/Sources/JavaStdlib/JavaUtilJar/generated/ZipEntry.swift @@ -1,6 +1,6 @@ +import CSwiftJavaJNI // Auto-generated by Java-to-Swift wrapper generator. import SwiftJava -import CSwiftJavaJNI @JavaClass("java.util.zip.ZipEntry") open class ZipEntry: JavaObject { diff --git a/Sources/JavaTypes/JavaAnnotation.swift b/Sources/JavaTypes/JavaAnnotation.swift index a643c2987..233af732f 100644 --- a/Sources/JavaTypes/JavaAnnotation.swift +++ b/Sources/JavaTypes/JavaAnnotation.swift @@ -44,4 +44,4 @@ extension JavaAnnotation { public static var unsigned: JavaAnnotation { JavaAnnotation(className: "Unsigned") } -} \ No newline at end of file +} diff --git a/Sources/JavaTypes/JavaType+JavaSource.swift b/Sources/JavaTypes/JavaType+JavaSource.swift index f81f0c6d8..96f72be71 100644 --- a/Sources/JavaTypes/JavaType+JavaSource.swift +++ b/Sources/JavaTypes/JavaType+JavaSource.swift @@ -51,7 +51,7 @@ extension JavaType: CustomStringConvertible { case .double: "double" case .void: "void" case .array(let elementType): "\(elementType.description)[]" - case .class(package: let package, name: let name, let typeParameters): + case .class(let package, let name, let typeParameters): if let package { if !typeParameters.isEmpty { "\(package).\(name)<\(typeParameters.map(\.description).joined(separator: ", "))>" diff --git a/Sources/JavaTypes/JavaType+SwiftNames.swift b/Sources/JavaTypes/JavaType+SwiftNames.swift index 7015ef918..04159bd3a 100644 --- a/Sources/JavaTypes/JavaType+SwiftNames.swift +++ b/Sources/JavaTypes/JavaType+SwiftNames.swift @@ -36,7 +36,7 @@ extension JavaType { public var isSwiftClosure: Bool { switch self { case .boolean, .byte, .char, .short, .int, .long, .float, .double, .void, - .array: + .array: return false case .class(package: "java.lang", name: "Runnable", _): return true @@ -55,7 +55,7 @@ extension JavaType { public var isString: Bool { switch self { case .boolean, .byte, .char, .short, .int, .long, .float, .double, .void, - .array: + .array: return false case .class(package: "java.lang", name: "String", _): return true diff --git a/Sources/JavaTypes/JavaType.swift b/Sources/JavaTypes/JavaType.swift index ce7191bac..803952bf9 100644 --- a/Sources/JavaTypes/JavaType.swift +++ b/Sources/JavaTypes/JavaType.swift @@ -80,4 +80,3 @@ extension JavaType { } } } - diff --git a/Sources/JavaTypes/Mangling.swift b/Sources/JavaTypes/Mangling.swift index 1311b7179..0b92911d7 100644 --- a/Sources/JavaTypes/Mangling.swift +++ b/Sources/JavaTypes/Mangling.swift @@ -35,7 +35,7 @@ extension JavaType { case .short: "S" case .void: "V" case .array(let elementType): "[" + elementType.mangledName - case .class(package: let package, name: let name, _): + case .class(let package, let name, _): "L\(package!).\(name.replacingPeriodsWithDollars());".replacingPeriodsWithSlashes() } } @@ -88,15 +88,33 @@ extension JavaType { } switch firstChar { - case "Z": string = string.dropFirst(); return .boolean - case "B": string = string.dropFirst(); return .byte - case "C": string = string.dropFirst(); return .char - case "D": string = string.dropFirst(); return .double - case "F": string = string.dropFirst(); return .float - case "I": string = string.dropFirst(); return .int - case "J": string = string.dropFirst(); return .long - case "S": string = string.dropFirst(); return .short - case "V": string = string.dropFirst(); return .void + case "Z": + string = string.dropFirst() + return .boolean + case "B": + string = string.dropFirst() + return .byte + case "C": + string = string.dropFirst() + return .char + case "D": + string = string.dropFirst() + return .double + case "F": + string = string.dropFirst() + return .float + case "I": + string = string.dropFirst() + return .int + case "J": + string = string.dropFirst() + return .long + case "S": + string = string.dropFirst() + return .short + case "V": + string = string.dropFirst() + return .void case "[": // Count the brackets to determine array depth. var arrayDepth = 1 @@ -137,17 +155,17 @@ extension JavaType { extension StringProtocol { /// Return the string after replacing all of the periods (".") with slashes ("/"). fileprivate func replacingPeriodsWithSlashes() -> String { - return String(self.map { $0 == "." ? "/" as Character : $0 }) + String(self.map { $0 == "." ? "/" as Character : $0 }) } /// Return the string after replacing all of the forward slashes ("/") with /// periods ("."). fileprivate func replacingSlashesWithPeriods() -> String { - return String(self.map { $0 == "/" ? "." as Character : $0 }) + String(self.map { $0 == "/" ? "." as Character : $0 }) } /// Return the string after replacing all of the periods (".") with slashes ("$"). fileprivate func replacingPeriodsWithDollars() -> String { - return String(self.map { $0 == "." ? "$" as Character : $0 }) + String(self.map { $0 == "." ? "$" as Character : $0 }) } } diff --git a/Sources/SwiftJava/AndroidSupport.swift b/Sources/SwiftJava/AndroidSupport.swift index 926049867..ab87025eb 100644 --- a/Sources/SwiftJava/AndroidSupport.swift +++ b/Sources/SwiftJava/AndroidSupport.swift @@ -18,7 +18,7 @@ public enum AndroidSupport { public static func androidDesugarClassNameConversion( for fullClassName: String ) -> String { -#if os(Android) && compiler(>=6.3) + #if os(Android) && compiler(>=6.3) switch fullClassName { case "java.util.Optional": // On API 23, Optionals are desugared @@ -29,7 +29,7 @@ public enum AndroidSupport { default: break } -#endif + #endif return fullClassName } } diff --git a/Sources/SwiftJava/AnyJavaObject.swift b/Sources/SwiftJava/AnyJavaObject.swift index 6106dbf71..002d4e3e8 100644 --- a/Sources/SwiftJava/AnyJavaObject.swift +++ b/Sources/SwiftJava/AnyJavaObject.swift @@ -61,7 +61,7 @@ extension AnyJavaObject { public var javaThis: jobject { javaHolder.object! // FIXME: this is a bad idea, can be null } - + public var javaThisOptional: jobject? { javaHolder.object } @@ -119,7 +119,7 @@ extension AnyJavaObject { applicationClassLoader, in: environment ) { applicationLoadedClass in - return try body(applicationLoadedClass) + try body(applicationLoadedClass) } } else { throw error @@ -146,10 +146,11 @@ extension AnyJavaObject { _ body: (jclass) throws -> Result ) throws -> Result { if let AnyJavaObjectWithCustomClassLoader = self as? AnyJavaObjectWithCustomClassLoader.Type, - let customClassLoader = try AnyJavaObjectWithCustomClassLoader.getJavaClassLoader(in: environment) { + let customClassLoader = try AnyJavaObjectWithCustomClassLoader.getJavaClassLoader(in: environment) + { do { return try _withJNIClassFromCustomClassLoader(customClassLoader, in: environment) { clazz in - return try body(clazz) + try body(clazz) } } catch { return try _withJNIClassFromDefaultClassLoader(in: environment, body) diff --git a/Sources/SwiftJava/BridgedValues/JavaValue+Array.swift b/Sources/SwiftJava/BridgedValues/JavaValue+Array.swift index d0d48d92d..e67db9e43 100644 --- a/Sources/SwiftJava/BridgedValues/JavaValue+Array.swift +++ b/Sources/SwiftJava/BridgedValues/JavaValue+Array.swift @@ -128,7 +128,7 @@ extension Array: JavaValue where Element: JavaValue { } public static func jniNewArray(in environment: JNIEnvironment) -> JNINewArray { - return { environment, size in + { environment, size in // FIXME: We should have a bridged JavaArray that we can use here. let arrayClass = environment.interface.FindClass(environment, "java/lang/Array") return environment.interface.NewObjectArray(environment, size, arrayClass, nil) @@ -136,7 +136,7 @@ extension Array: JavaValue where Element: JavaValue { } public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in 0.. JNISetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start.. JNINewArray { - return { environment, size in + { environment, size in // FIXME: Introduce a JavaString class that we can use for this. let stringClass = environment.interface.FindClass(environment, "java/lang/String") return environment.interface.NewObjectArray(environment, size, stringClass, nil) @@ -74,7 +74,7 @@ extension String: JavaValue { } public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in 0.. JNISetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start.. { /// Determine whether this instance is a checked exception (which must be /// handled) vs. an unchecked exception (which is not handled). public var isCheckedException: Bool { - return !self.is(RuntimeException.self) + !self.is(RuntimeException.self) } } diff --git a/Sources/SwiftJava/Exceptions/Throwable+Error.swift b/Sources/SwiftJava/Exceptions/Throwable+Error.swift index fbf8393dd..b15972412 100644 --- a/Sources/SwiftJava/Exceptions/Throwable+Error.swift +++ b/Sources/SwiftJava/Exceptions/Throwable+Error.swift @@ -15,7 +15,7 @@ // Translate all Java Throwable instances in a Swift error. extension Throwable: Error, CustomStringConvertible { public var description: String { - return toString() + toString() } } @@ -23,6 +23,6 @@ extension JavaClass { /// Determine whether this instance is a checked exception (which must be /// handled) vs. an unchecked exception (which is not handled). public var isCheckedException: Bool { - return !self.is(RuntimeException.self) && !self.is(JavaError.self) + !self.is(RuntimeException.self) && !self.is(JavaError.self) } } diff --git a/Sources/SwiftJava/JNI.swift b/Sources/SwiftJava/JNI.swift index 01ad6191a..9b50d2afd 100644 --- a/Sources/SwiftJava/JNI.swift +++ b/Sources/SwiftJava/JNI.swift @@ -40,11 +40,11 @@ package final class JNI { let clazz = try JavaClass(environment: environment) guard let thread: JavaThread = clazz.currentThread() else { applicationClassLoader = nil - return + return } guard let cl = thread.getContextClassLoader() else { applicationClassLoader = nil - return + return } self.applicationClassLoader = cl } catch { diff --git a/Sources/SwiftJava/JVM/JavaVirtualMachine.swift b/Sources/SwiftJava/JVM/JavaVirtualMachine.swift index a68897c05..82dc137fb 100644 --- a/Sources/SwiftJava/JVM/JavaVirtualMachine.swift +++ b/Sources/SwiftJava/JVM/JavaVirtualMachine.swift @@ -26,11 +26,11 @@ typealias JNIEnvPointer = UnsafeMutableRawPointer #endif extension FileManager { -#if os(Windows) + #if os(Windows) static let pathSeparator = ";" -#else + #else static let pathSeparator = ":" -#endif + #endif } public final class JavaVirtualMachine: @unchecked Sendable { @@ -86,7 +86,9 @@ public final class JavaVirtualMachine: @unchecked Sendable { for path in classpath { if !fileManager.fileExists(atPath: path) { // FIXME: this should be configurable, a classpath missing a directory isn't reason to blow up - print("[warning][swift-java][JavaVirtualMachine] Missing classpath element: \(URL(fileURLWithPath: path).absoluteString)") // TODO: stderr + print( + "[warning][swift-java][JavaVirtualMachine] Missing classpath element: \(URL(fileURLWithPath: path).absoluteString)" + ) // TODO: stderr } } let pathSeparatedClassPath = classpath.joined(separator: FileManager.pathSeparator) @@ -139,7 +141,7 @@ public final class JavaVirtualMachine: @unchecked Sendable { do { try destroyJVM() } catch { - fatalError("Failed to destroy the JVM: \(error)") + fatalError("Failed to destroy the JVM: \(error)") } } } @@ -174,11 +176,11 @@ extension JavaVirtualMachine { return environment.assumingMemoryBound(to: JNIEnv?.self) } -#if canImport(Android) + #if canImport(Android) var jniEnv = environment?.assumingMemoryBound(to: JNIEnv?.self) -#else + #else var jniEnv = environment -#endif + #endif // Attach the current thread to the JVM. let attachResult: jint @@ -196,11 +198,11 @@ extension JavaVirtualMachine { JavaVirtualMachine.destroyTLS.set(jniEnv!) -#if canImport(Android) + #if canImport(Android) return jniEnv! -#else + #else return jniEnv!.assumingMemoryBound(to: JNIEnv?.self) -#endif + #endif } /// Detach the current thread from the Java Virtual Machine. All Java @@ -245,7 +247,10 @@ extension JavaVirtualMachine { ignoreUnrecognized: Bool = false, replace: Bool = false ) throws -> JavaVirtualMachine { - precondition(!classpath.contains(where: { $0.contains(FileManager.pathSeparator) }), "Classpath element must not contain `\(FileManager.pathSeparator)`! Split the path into elements! Was: \(classpath)") + precondition( + !classpath.contains(where: { $0.contains(FileManager.pathSeparator) }), + "Classpath element must not contain `\(FileManager.pathSeparator)`! Split the path into elements! Was: \(classpath)" + ) return try sharedJVM.withLock { (sharedJVMPointer: inout JavaVirtualMachine?) in // If we already have a JavaVirtualMachine instance, return it. diff --git a/Sources/SwiftJava/JVM/LockedState.swift b/Sources/SwiftJava/JVM/LockedState.swift index b3082efcb..745dfa51e 100644 --- a/Sources/SwiftJava/JVM/LockedState.swift +++ b/Sources/SwiftJava/JVM/LockedState.swift @@ -29,132 +29,134 @@ import WinSDK package struct LockedState { - // Internal implementation for a cheap lock to aid sharing code across platforms - private struct _Lock { -#if canImport(os) - typealias Primitive = os_unfair_lock -#elseif canImport(Bionic) || canImport(Glibc) || canImport(Musl) - typealias Primitive = pthread_mutex_t -#elseif canImport(WinSDK) - typealias Primitive = SRWLOCK -#elseif os(WASI) - // WASI is single-threaded, so we don't need a lock. - typealias Primitive = Void -#endif - - typealias PlatformLock = UnsafeMutablePointer - var _platformLock: PlatformLock - - fileprivate static func initialize(_ platformLock: PlatformLock) { -#if canImport(os) - platformLock.initialize(to: os_unfair_lock()) -#elseif canImport(Bionic) || canImport(Glibc) - pthread_mutex_init(platformLock, nil) -#elseif canImport(WinSDK) - InitializeSRWLock(platformLock) -#elseif os(WASI) - // no-op -#endif - } - - fileprivate static func deinitialize(_ platformLock: PlatformLock) { -#if canImport(Bionic) || canImport(Glibc) - pthread_mutex_destroy(platformLock) -#endif - platformLock.deinitialize(count: 1) - } - - static fileprivate func lock(_ platformLock: PlatformLock) { -#if canImport(os) - os_unfair_lock_lock(platformLock) -#elseif canImport(Bionic) || canImport(Glibc) - pthread_mutex_lock(platformLock) -#elseif canImport(WinSDK) - AcquireSRWLockExclusive(platformLock) -#elseif os(WASI) - // no-op -#endif - } - - static fileprivate func unlock(_ platformLock: PlatformLock) { -#if canImport(os) - os_unfair_lock_unlock(platformLock) -#elseif canImport(Bionic) || canImport(Glibc) - pthread_mutex_unlock(platformLock) -#elseif canImport(WinSDK) - ReleaseSRWLockExclusive(platformLock) -#elseif os(WASI) - // no-op -#endif - } + // Internal implementation for a cheap lock to aid sharing code across platforms + private struct _Lock { + #if canImport(os) + typealias Primitive = os_unfair_lock + #elseif canImport(Bionic) || canImport(Glibc) || canImport(Musl) + typealias Primitive = pthread_mutex_t + #elseif canImport(WinSDK) + typealias Primitive = SRWLOCK + #elseif os(WASI) + // WASI is single-threaded, so we don't need a lock. + typealias Primitive = Void + #endif + + typealias PlatformLock = UnsafeMutablePointer + var _platformLock: PlatformLock + + fileprivate static func initialize(_ platformLock: PlatformLock) { + #if canImport(os) + platformLock.initialize(to: os_unfair_lock()) + #elseif canImport(Bionic) || canImport(Glibc) + pthread_mutex_init(platformLock, nil) + #elseif canImport(WinSDK) + InitializeSRWLock(platformLock) + #elseif os(WASI) + // no-op + #endif } - private class _Buffer: ManagedBuffer { - deinit { - withUnsafeMutablePointerToElements { - _Lock.deinitialize($0) - } - } + fileprivate static func deinitialize(_ platformLock: PlatformLock) { + #if canImport(Bionic) || canImport(Glibc) + pthread_mutex_destroy(platformLock) + #endif + platformLock.deinitialize(count: 1) } - private let _buffer: ManagedBuffer - - package init(initialState: State) { - _buffer = _Buffer.create(minimumCapacity: 1, makingHeaderWith: { buf in - buf.withUnsafeMutablePointerToElements { - _Lock.initialize($0) - } - return initialState - }) + static fileprivate func lock(_ platformLock: PlatformLock) { + #if canImport(os) + os_unfair_lock_lock(platformLock) + #elseif canImport(Bionic) || canImport(Glibc) + pthread_mutex_lock(platformLock) + #elseif canImport(WinSDK) + AcquireSRWLockExclusive(platformLock) + #elseif os(WASI) + // no-op + #endif } - package func withLock(_ body: @Sendable (inout State) throws -> T) rethrows -> T { - try withLockUnchecked(body) + static fileprivate func unlock(_ platformLock: PlatformLock) { + #if canImport(os) + os_unfair_lock_unlock(platformLock) + #elseif canImport(Bionic) || canImport(Glibc) + pthread_mutex_unlock(platformLock) + #elseif canImport(WinSDK) + ReleaseSRWLockExclusive(platformLock) + #elseif os(WASI) + // no-op + #endif } + } - package func withLockUnchecked(_ body: (inout State) throws -> T) rethrows -> T { - try _buffer.withUnsafeMutablePointers { state, lock in - _Lock.lock(lock) - defer { _Lock.unlock(lock) } - return try body(&state.pointee) - } + private class _Buffer: ManagedBuffer { + deinit { + withUnsafeMutablePointerToElements { + _Lock.deinitialize($0) + } } + } + + private let _buffer: ManagedBuffer - // Ensures the managed state outlives the locked scope. - package func withLockExtendingLifetimeOfState(_ body: @Sendable (inout State) throws -> T) rethrows -> T { - try _buffer.withUnsafeMutablePointers { state, lock in - _Lock.lock(lock) - return try withExtendedLifetime(state.pointee) { - defer { _Lock.unlock(lock) } - return try body(&state.pointee) - } + package init(initialState: State) { + _buffer = _Buffer.create( + minimumCapacity: 1, + makingHeaderWith: { buf in + buf.withUnsafeMutablePointerToElements { + _Lock.initialize($0) } + return initialState + } + ) + } + + package func withLock(_ body: @Sendable (inout State) throws -> T) rethrows -> T { + try withLockUnchecked(body) + } + + package func withLockUnchecked(_ body: (inout State) throws -> T) rethrows -> T { + try _buffer.withUnsafeMutablePointers { state, lock in + _Lock.lock(lock) + defer { _Lock.unlock(lock) } + return try body(&state.pointee) } + } + + // Ensures the managed state outlives the locked scope. + package func withLockExtendingLifetimeOfState(_ body: @Sendable (inout State) throws -> T) rethrows -> T { + try _buffer.withUnsafeMutablePointers { state, lock in + _Lock.lock(lock) + return try withExtendedLifetime(state.pointee) { + defer { _Lock.unlock(lock) } + return try body(&state.pointee) + } + } + } } extension LockedState where State == Void { - package init() { - self.init(initialState: ()) - } + package init() { + self.init(initialState: ()) + } - package func withLock(_ body: @Sendable () throws -> R) rethrows -> R { - return try withLock { _ in - try body() - } + package func withLock(_ body: @Sendable () throws -> R) rethrows -> R { + try withLock { _ in + try body() } + } - package func lock() { - _buffer.withUnsafeMutablePointerToElements { lock in - _Lock.lock(lock) - } + package func lock() { + _buffer.withUnsafeMutablePointerToElements { lock in + _Lock.lock(lock) } + } - package func unlock() { - _buffer.withUnsafeMutablePointerToElements { lock in - _Lock.unlock(lock) - } + package func unlock() { + _buffer.withUnsafeMutablePointerToElements { lock in + _Lock.unlock(lock) } + } } extension LockedState: @unchecked Sendable where State: Sendable {} - diff --git a/Sources/SwiftJava/JVM/ThreadLocalStorage.swift b/Sources/SwiftJava/JVM/ThreadLocalStorage.swift index 037e328b7..8a08d0353 100644 --- a/Sources/SwiftJava/JVM/ThreadLocalStorage.swift +++ b/Sources/SwiftJava/JVM/ThreadLocalStorage.swift @@ -29,62 +29,62 @@ private var _globalTlsValue: UnsafeMutableRawPointer? #endif package struct ThreadLocalStorage: ~Copyable { -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) private typealias PlatformKey = pthread_key_t -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) private typealias PlatformKey = DWORD -#else + #else private typealias PlatformKey = Void -#endif + #endif -#if canImport(Darwin) + #if canImport(Darwin) package typealias Value = UnsafeMutableRawPointer -#else + #else package typealias Value = UnsafeMutableRawPointer? -#endif + #endif - package typealias OnThreadExit = @convention(c) (_: Value) -> () + package typealias OnThreadExit = @convention(c) (_: Value) -> Void -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) private var _key: PlatformKey -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) private let _key: PlatformKey -#endif + #endif package init(onThreadExit: OnThreadExit) { -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) _key = 0 pthread_key_create(&_key, onThreadExit) -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) _key = FlsAlloc(onThreadExit) -#endif + #endif } package func get() -> UnsafeMutableRawPointer? { -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) pthread_getspecific(_key) -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) FlsGetValue(_key) -#else + #else _globalTlsValue -#endif + #endif } package func set(_ value: Value) { -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) pthread_setspecific(_key, value) -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) FlsSetValue(_key, value) -#else + #else _globalTlsValue = value -#endif + #endif } deinit { -#if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) + #if canImport(Darwin) || canImport(Bionic) || canImport(Glibc) || canImport(Musl) pthread_key_delete(_key) -#elseif canImport(WinSDK) + #elseif canImport(WinSDK) FlsFree(_key) -#endif + #endif } } diff --git a/Sources/SwiftJava/JavaClass+CustomStringConvertible.swift b/Sources/SwiftJava/JavaClass+CustomStringConvertible.swift index e7eb25105..9f2669985 100644 --- a/Sources/SwiftJava/JavaClass+CustomStringConvertible.swift +++ b/Sources/SwiftJava/JavaClass+CustomStringConvertible.swift @@ -18,4 +18,4 @@ extension JavaClass: CustomStringConvertible { public var description: String { toString() } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/JavaExtensions/List+Sequence.swift b/Sources/SwiftJava/JavaExtensions/List+Sequence.swift index 77313759d..aecbfc9e6 100644 --- a/Sources/SwiftJava/JavaExtensions/List+Sequence.swift +++ b/Sources/SwiftJava/JavaExtensions/List+Sequence.swift @@ -17,6 +17,6 @@ extension List: Sequence { public typealias Iterator = JavaIterator public func makeIterator() -> Iterator { - return self.iterator()!.as(JavaIterator.self)! + self.iterator()!.as(JavaIterator.self)! } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/JavaObject+Inheritance.swift b/Sources/SwiftJava/JavaObject+Inheritance.swift index d4482fc2f..0f2d3b1e4 100644 --- a/Sources/SwiftJava/JavaObject+Inheritance.swift +++ b/Sources/SwiftJava/JavaObject+Inheritance.swift @@ -23,7 +23,7 @@ extension AnyJavaObject { _ otherClass: OtherClass.Type ) -> jclass? { guard let this: jobject = javaThisOptional else { - return nil + return nil } let environment = try! JavaVirtualMachine.shared().environment() @@ -39,7 +39,7 @@ extension AnyJavaObject { /// Determine whether this object is an instance of a specific /// Java class. public func `is`(_ otherClass: OtherClass.Type) -> Bool { - return isInstanceOf(otherClass) != nil + isInstanceOf(otherClass) != nil } /// Attempt to downcast this object to a specific Java class. diff --git a/Sources/SwiftJava/JavaObject+MethodCalls.swift b/Sources/SwiftJava/JavaObject+MethodCalls.swift index 0626be23a..2a93a2905 100644 --- a/Sources/SwiftJava/JavaObject+MethodCalls.swift +++ b/Sources/SwiftJava/JavaObject+MethodCalls.swift @@ -86,7 +86,7 @@ extension AnyJavaObject { resultType: Result.Type, in environment: JNIEnvironment ) throws -> jmethodID { - return try environment.translatingJNIExceptions { + try environment.translatingJNIExceptions { try javaMethodLookup( thisClass: thisClass, methodName: methodName, @@ -157,7 +157,7 @@ extension AnyJavaObject { let jniMethod = Result.jniMethodCall(in: environment) let jniArgs = getJValues(repeat each args, in: environment) let jniResult = try environment.translatingJNIExceptions { - return jniMethod(environment, this, method, jniArgs) + jniMethod(environment, this, method, jniArgs) } return Result(fromJNI: jniResult, in: environment) diff --git a/Sources/SwiftJava/JavaString+Extensions.swift b/Sources/SwiftJava/JavaString+Extensions.swift index 1836777d2..6c961d1bb 100644 --- a/Sources/SwiftJava/JavaString+Extensions.swift +++ b/Sources/SwiftJava/JavaString+Extensions.swift @@ -15,20 +15,20 @@ import CSwiftJavaJNI import JavaTypes -extension JavaString: CustomStringConvertible, CustomDebugStringConvertible { +extension JavaString: CustomStringConvertible, CustomDebugStringConvertible { public var description: String { - return toString() + toString() } public var debugDescription: String { - return "\"" + toString() + "\"" + "\"" + toString() + "\"" } } extension Optional where Wrapped == JavaString { public var description: String { - switch self { - case .some(let value): "Optional(\(value.toString())" - case .none: "nil" + switch self { + case .some(let value): "Optional(\(value.toString())" + case .none: "nil" } } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/KnownJavaVMOptions.swift b/Sources/SwiftJava/KnownJavaVMOptions.swift index 0dffc2213..f1a9abffc 100644 --- a/Sources/SwiftJava/KnownJavaVMOptions.swift +++ b/Sources/SwiftJava/KnownJavaVMOptions.swift @@ -16,7 +16,7 @@ public struct KnownJavaVMOptions { /// Helper for the option to configure where native libraries should be searched for: `-Djava.library.path` public static func javaLibraryPath(_ path: String) -> String { - return "-Djava.library.path=" + path + "-Djava.library.path=" + path } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/Macros.swift b/Sources/SwiftJava/Macros.swift index 4c0353661..c0993254f 100644 --- a/Sources/SwiftJava/Macros.swift +++ b/Sources/SwiftJava/Macros.swift @@ -88,8 +88,8 @@ public macro JavaInterface(_ fullClassName: String, extends: (any AnyJavaObject. /// } /// ``` @attached(accessor) -public macro JavaField(_ javaFieldName: String? = nil, isFinal: Bool = false) = #externalMacro(module: "SwiftJavaMacros", type: "JavaFieldMacro") - +public macro JavaField(_ javaFieldName: String? = nil, isFinal: Bool = false) = + #externalMacro(module: "SwiftJavaMacros", type: "JavaFieldMacro") /// Attached macro that turns a Swift property into one that accesses a Java static field on the underlying Java object. /// @@ -102,7 +102,8 @@ public macro JavaField(_ javaFieldName: String? = nil, isFinal: Bool = false) = /// } /// ``` @attached(accessor) -public macro JavaStaticField(_ javaFieldName: String? = nil, isFinal: Bool = false) = #externalMacro(module: "SwiftJavaMacros", type: "JavaFieldMacro") +public macro JavaStaticField(_ javaFieldName: String? = nil, isFinal: Bool = false) = + #externalMacro(module: "SwiftJavaMacros", type: "JavaFieldMacro") /// Attached macro that turns a Swift method into one that wraps a Java method on the underlying Java object. /// @@ -123,21 +124,21 @@ public macro JavaStaticField(_ javaFieldName: String? = nil, isFinal: Bool = fal /// ``` /// /// corresponds to the Java constructor `HelloSwift(String name)`. -/// +/// /// ### Generics and type-erasure /// Swift and Java differ in how they represent generics at runtime. /// In Java, generics are type-erased and the JVM representation of generic types is erased to `java.lang.Object`. -/// Swift on the other hand, reifies types which means a `Test` in practice will be a specific type with +/// Swift on the other hand, reifies types which means a `Test` in practice will be a specific type with /// the generic substituted `Test`. This means that at runtime, calling a generic @JavaMethod needs to know /// which of the parameters (or result type) must be subjected to type-erasure as we form the call into the Java function. -/// +/// /// In order to mark a generic return type you must indicate it to the @JavaMethod macro like this: /// ```swift /// // Java: class Test { public get(); } /// @JavaMethod(typeErasedResult: "T!") /// func get() -> T! /// ``` -/// This allows the macro to form a call into the get() method, which at runtime, will have an `java.lang.Object` +/// This allows the macro to form a call into the get() method, which at runtime, will have an `java.lang.Object` /// returning method signature, and then, convert the result to the expected `T` type on the Swift side. @attached(body) public macro JavaMethod( @@ -155,7 +156,8 @@ public macro JavaMethod( /// func sayHelloBack(_ i: Int32) -> Double /// ``` @attached(body) -public macro JavaStaticMethod(_ javaMethodName: String? = nil) = #externalMacro(module: "SwiftJavaMacros", type: "JavaMethodMacro") +public macro JavaStaticMethod(_ javaMethodName: String? = nil) = + #externalMacro(module: "SwiftJavaMacros", type: "JavaMethodMacro") /// Macro that marks extensions to specify that all of the @JavaMethod /// methods are implementations of Java methods spelled as `native`. @@ -180,4 +182,5 @@ public macro JavaStaticMethod(_ javaMethodName: String? = nil) = #externalMacro( /// } /// ``` @attached(peer) -public macro JavaImplementation(_ fullClassName: String) = #externalMacro(module: "SwiftJavaMacros", type: "JavaImplementationMacro") +public macro JavaImplementation(_ fullClassName: String) = + #externalMacro(module: "SwiftJavaMacros", type: "JavaImplementationMacro") diff --git a/Sources/SwiftJava/Optional+JavaObject.swift b/Sources/SwiftJava/Optional+JavaObject.swift index 46fd99709..83dc54c4e 100644 --- a/Sources/SwiftJava/Optional+JavaObject.swift +++ b/Sources/SwiftJava/Optional+JavaObject.swift @@ -69,7 +69,7 @@ extension Optional: JavaValue where Wrapped: AnyJavaObject { } public static func jniNewArray(in environment: JNIEnvironment) -> JNINewArray { - return { environment, size in + { environment, size in try! Wrapped.withJNIClass(in: environment) { jniClass in environment.interface.NewObjectArray(environment, size, jniClass, nil) } @@ -77,7 +77,7 @@ extension Optional: JavaValue where Wrapped: AnyJavaObject { } public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in start.. JNISetArrayRegion { - return { environment, array, start, length, outPointer in + { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start.. JavaOptional { - return try! JavaClass>().ofNullable(self?.as(JavaObject.self)).as(JavaOptional.self)! +extension Optional where Wrapped: AnyJavaObject { + public func toJavaOptional() -> JavaOptional { + try! JavaClass>().ofNullable(self?.as(JavaObject.self)).as(JavaOptional.self)! } - init(javaOptional: JavaOptional?) { + public init(javaOptional: JavaOptional?) { if let javaOptional { self = javaOptional.isPresent() ? javaOptional.get().as(Wrapped.self) : Optional.none } else { @@ -26,8 +26,8 @@ public extension Optional where Wrapped: AnyJavaObject { } } -public extension Optional where Wrapped == Double { - func toJavaOptional() -> JavaOptionalDouble { +extension Optional where Wrapped == Double { + public func toJavaOptional() -> JavaOptionalDouble { if let self { return try! JavaClass().of(self)! } else { @@ -35,7 +35,7 @@ public extension Optional where Wrapped == Double { } } - init(javaOptional: JavaOptionalDouble?) { + public init(javaOptional: JavaOptionalDouble?) { if let javaOptional { self = javaOptional.isPresent() ? javaOptional.getAsDouble() : nil } else { @@ -44,8 +44,8 @@ public extension Optional where Wrapped == Double { } } -public extension Optional where Wrapped == Int32 { - func toJavaOptional() -> JavaOptionalInt { +extension Optional where Wrapped == Int32 { + public func toJavaOptional() -> JavaOptionalInt { if let self { return try! JavaClass().of(self)! } else { @@ -53,7 +53,7 @@ public extension Optional where Wrapped == Int32 { } } - init(javaOptional: JavaOptionalInt?) { + public init(javaOptional: JavaOptionalInt?) { if let javaOptional { self = javaOptional.isPresent() ? javaOptional.getAsInt() : nil } else { @@ -62,8 +62,8 @@ public extension Optional where Wrapped == Int32 { } } -public extension Optional where Wrapped == Int64 { - func toJavaOptional() -> JavaOptionalLong { +extension Optional where Wrapped == Int64 { + public func toJavaOptional() -> JavaOptionalLong { if let self { return try! JavaClass().of(self)! } else { @@ -71,7 +71,7 @@ public extension Optional where Wrapped == Int64 { } } - init(javaOptional: JavaOptionalLong?) { + public init(javaOptional: JavaOptionalLong?) { if let javaOptional { self = javaOptional.isPresent() ? javaOptional.getAsLong() : nil } else { diff --git a/Sources/SwiftJava/String+Extensions.swift b/Sources/SwiftJava/String+Extensions.swift index 78d5f2169..c68e218c9 100644 --- a/Sources/SwiftJava/String+Extensions.swift +++ b/Sources/SwiftJava/String+Extensions.swift @@ -36,7 +36,7 @@ extension String { package var javaClassNameToCanonicalName: String { let regex = try! Regex(#"(\w)\$"#, as: (Substring, Substring).self) return self.replacing(regex) { match in - "\(match.output.1)." + "\(match.output.1)." } } diff --git a/Sources/SwiftJava/SwiftJavaConversionError.swift b/Sources/SwiftJava/SwiftJavaConversionError.swift index 5b29741ce..298ddfe1a 100644 --- a/Sources/SwiftJava/SwiftJavaConversionError.swift +++ b/Sources/SwiftJava/SwiftJavaConversionError.swift @@ -14,9 +14,9 @@ /// Used to indicate Swift/Java conversion failures. public struct SwiftJavaConversionError: Error { - public let message: String + public let message: String public init(_ message: String) { self.message = message } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/SwiftPlatform.swift b/Sources/SwiftJava/SwiftPlatform.swift index 08c1f42ea..63a4d562e 100644 --- a/Sources/SwiftJava/SwiftPlatform.swift +++ b/Sources/SwiftJava/SwiftPlatform.swift @@ -17,11 +17,11 @@ import CSwiftJavaJNI /// Helpers for forming platform specific directory names and paths. public struct SwiftPlatform { - public static var debugOrRelease: String { + public static var debugOrRelease: String { #if DEBUG - "debug" - #else - "release" + "debug" + #else + "release" #endif } -} \ No newline at end of file +} diff --git a/Sources/SwiftJava/generated/ByteBuffer.swift b/Sources/SwiftJava/generated/ByteBuffer.swift index dc7184d16..c2b2e8dde 100644 --- a/Sources/SwiftJava/generated/ByteBuffer.swift +++ b/Sources/SwiftJava/generated/ByteBuffer.swift @@ -4,597 +4,597 @@ import CSwiftJavaJNI @JavaClass("java.nio.ByteBuffer") open class ByteBuffer: JavaObject { /// Java method `reset`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.reset() /// ``` -@JavaMethod + @JavaMethod open func reset() -> ByteBuffer! /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.get(byte[]) /// ``` -@JavaMethod + @JavaMethod open func get(_ arg0: [Int8]) -> ByteBuffer! /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public abstract byte java.nio.ByteBuffer.get(int) /// ``` -@JavaMethod + @JavaMethod open func get(_ arg0: Int32) -> Int8 /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public abstract byte java.nio.ByteBuffer.get() /// ``` -@JavaMethod + @JavaMethod open func get() -> Int8 /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.get(byte[],int,int) /// ``` -@JavaMethod + @JavaMethod open func get(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) -> ByteBuffer! /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.get(int,byte[]) /// ``` -@JavaMethod + @JavaMethod open func get(_ arg0: Int32, _ arg1: [Int8]) -> ByteBuffer! /// Java method `get`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.get(int,byte[],int,int) /// ``` -@JavaMethod + @JavaMethod open func get(_ arg0: Int32, _ arg1: [Int8], _ arg2: Int32, _ arg3: Int32) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.put(int,byte) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: Int32, _ arg1: Int8) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.put(java.nio.ByteBuffer) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: ByteBuffer?) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.put(int,java.nio.ByteBuffer,int,int) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: Int32, _ arg1: ByteBuffer?, _ arg2: Int32, _ arg3: Int32) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public final java.nio.ByteBuffer java.nio.ByteBuffer.put(byte[]) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: [Int8]) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.put(int,byte[]) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: Int32, _ arg1: [Int8]) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.put(int,byte[],int,int) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: Int32, _ arg1: [Int8], _ arg2: Int32, _ arg3: Int32) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.put(byte[],int,int) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) -> ByteBuffer! /// Java method `put`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.put(byte) /// ``` -@JavaMethod + @JavaMethod open func put(_ arg0: Int8) -> ByteBuffer! /// Java method `equals`. - /// + /// /// ### Java method signature /// ```java /// public boolean java.nio.ByteBuffer.equals(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool /// Java method `toString`. - /// + /// /// ### Java method signature /// ```java /// public java.lang.String java.nio.ByteBuffer.toString() /// ``` -@JavaMethod + @JavaMethod open override func toString() -> String /// Java method `hashCode`. - /// + /// /// ### Java method signature /// ```java /// public int java.nio.ByteBuffer.hashCode() /// ``` -@JavaMethod + @JavaMethod open override func hashCode() -> Int32 /// Java method `compareTo`. - /// + /// /// ### Java method signature /// ```java /// public int java.nio.ByteBuffer.compareTo(java.nio.ByteBuffer) /// ``` -@JavaMethod + @JavaMethod open func compareTo(_ arg0: ByteBuffer?) -> Int32 /// Java method `compareTo`. - /// + /// /// ### Java method signature /// ```java /// public int java.nio.ByteBuffer.compareTo(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod open func compareTo(_ arg0: JavaObject?) -> Int32 /// Java method `getShort`. - /// + /// /// ### Java method signature /// ```java /// public abstract short java.nio.ByteBuffer.getShort() /// ``` -@JavaMethod + @JavaMethod open func getShort() -> Int16 /// Java method `getShort`. - /// + /// /// ### Java method signature /// ```java /// public abstract short java.nio.ByteBuffer.getShort(int) /// ``` -@JavaMethod + @JavaMethod open func getShort(_ arg0: Int32) -> Int16 /// Java method `putShort`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putShort(int,short) /// ``` -@JavaMethod + @JavaMethod open func putShort(_ arg0: Int32, _ arg1: Int16) -> ByteBuffer! /// Java method `putShort`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putShort(short) /// ``` -@JavaMethod + @JavaMethod open func putShort(_ arg0: Int16) -> ByteBuffer! /// Java method `getChar`. - /// + /// /// ### Java method signature /// ```java /// public abstract char java.nio.ByteBuffer.getChar(int) /// ``` -@JavaMethod + @JavaMethod open func getChar(_ arg0: Int32) -> UInt16 /// Java method `getChar`. - /// + /// /// ### Java method signature /// ```java /// public abstract char java.nio.ByteBuffer.getChar() /// ``` -@JavaMethod + @JavaMethod open func getChar() -> UInt16 /// Java method `putChar`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putChar(int,char) /// ``` -@JavaMethod + @JavaMethod open func putChar(_ arg0: Int32, _ arg1: UInt16) -> ByteBuffer! /// Java method `putChar`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putChar(char) /// ``` -@JavaMethod + @JavaMethod open func putChar(_ arg0: UInt16) -> ByteBuffer! /// Java method `getInt`. - /// + /// /// ### Java method signature /// ```java /// public abstract int java.nio.ByteBuffer.getInt(int) /// ``` -@JavaMethod + @JavaMethod open func getInt(_ arg0: Int32) -> Int32 /// Java method `getInt`. - /// + /// /// ### Java method signature /// ```java /// public abstract int java.nio.ByteBuffer.getInt() /// ``` -@JavaMethod + @JavaMethod open func getInt() -> Int32 /// Java method `putInt`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putInt(int,int) /// ``` -@JavaMethod + @JavaMethod open func putInt(_ arg0: Int32, _ arg1: Int32) -> ByteBuffer! /// Java method `putInt`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putInt(int) /// ``` -@JavaMethod + @JavaMethod open func putInt(_ arg0: Int32) -> ByteBuffer! /// Java method `getLong`. - /// + /// /// ### Java method signature /// ```java /// public abstract long java.nio.ByteBuffer.getLong(int) /// ``` -@JavaMethod + @JavaMethod open func getLong(_ arg0: Int32) -> Int64 /// Java method `getLong`. - /// + /// /// ### Java method signature /// ```java /// public abstract long java.nio.ByteBuffer.getLong() /// ``` -@JavaMethod + @JavaMethod open func getLong() -> Int64 /// Java method `putLong`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putLong(long) /// ``` -@JavaMethod + @JavaMethod open func putLong(_ arg0: Int64) -> ByteBuffer! /// Java method `putLong`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putLong(int,long) /// ``` -@JavaMethod + @JavaMethod open func putLong(_ arg0: Int32, _ arg1: Int64) -> ByteBuffer! /// Java method `getFloat`. - /// + /// /// ### Java method signature /// ```java /// public abstract float java.nio.ByteBuffer.getFloat() /// ``` -@JavaMethod + @JavaMethod open func getFloat() -> Float /// Java method `getFloat`. - /// + /// /// ### Java method signature /// ```java /// public abstract float java.nio.ByteBuffer.getFloat(int) /// ``` -@JavaMethod + @JavaMethod open func getFloat(_ arg0: Int32) -> Float /// Java method `putFloat`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putFloat(float) /// ``` -@JavaMethod + @JavaMethod open func putFloat(_ arg0: Float) -> ByteBuffer! /// Java method `putFloat`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putFloat(int,float) /// ``` -@JavaMethod + @JavaMethod open func putFloat(_ arg0: Int32, _ arg1: Float) -> ByteBuffer! /// Java method `getDouble`. - /// + /// /// ### Java method signature /// ```java /// public abstract double java.nio.ByteBuffer.getDouble(int) /// ``` -@JavaMethod + @JavaMethod open func getDouble(_ arg0: Int32) -> Double /// Java method `getDouble`. - /// + /// /// ### Java method signature /// ```java /// public abstract double java.nio.ByteBuffer.getDouble() /// ``` -@JavaMethod + @JavaMethod open func getDouble() -> Double /// Java method `putDouble`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putDouble(int,double) /// ``` -@JavaMethod + @JavaMethod open func putDouble(_ arg0: Int32, _ arg1: Double) -> ByteBuffer! /// Java method `putDouble`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.putDouble(double) /// ``` -@JavaMethod + @JavaMethod open func putDouble(_ arg0: Double) -> ByteBuffer! /// Java method `clear`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.clear() /// ``` -@JavaMethod + @JavaMethod open func clear() -> ByteBuffer! /// Java method `position`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.position(int) /// ``` -@JavaMethod + @JavaMethod open func position(_ arg0: Int32) -> ByteBuffer! /// Java method `mismatch`. - /// + /// /// ### Java method signature /// ```java /// public int java.nio.ByteBuffer.mismatch(java.nio.ByteBuffer) /// ``` -@JavaMethod + @JavaMethod open func mismatch(_ arg0: ByteBuffer?) -> Int32 /// Java method `limit`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.limit(int) /// ``` -@JavaMethod + @JavaMethod open func limit(_ arg0: Int32) -> ByteBuffer! /// Java method `isDirect`. - /// + /// /// ### Java method signature /// ```java /// public abstract boolean java.nio.ByteBuffer.isDirect() /// ``` -@JavaMethod + @JavaMethod open func isDirect() -> Bool /// Java method `hasArray`. - /// + /// /// ### Java method signature /// ```java /// public final boolean java.nio.ByteBuffer.hasArray() /// ``` -@JavaMethod + @JavaMethod open func hasArray() -> Bool /// Java method `array`. - /// + /// /// ### Java method signature /// ```java /// public final byte[] java.nio.ByteBuffer.array() /// ``` -@JavaMethod + @JavaMethod open func array() -> [Int8] /// Java method `arrayOffset`. - /// + /// /// ### Java method signature /// ```java /// public final int java.nio.ByteBuffer.arrayOffset() /// ``` -@JavaMethod + @JavaMethod open func arrayOffset() -> Int32 /// Java method `mark`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.mark() /// ``` -@JavaMethod + @JavaMethod open func mark() -> ByteBuffer! /// Java method `flip`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.flip() /// ``` -@JavaMethod + @JavaMethod open func flip() -> ByteBuffer! /// Java method `rewind`. - /// + /// /// ### Java method signature /// ```java /// public java.nio.ByteBuffer java.nio.ByteBuffer.rewind() /// ``` -@JavaMethod + @JavaMethod open func rewind() -> ByteBuffer! /// Java method `slice`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.slice() /// ``` -@JavaMethod + @JavaMethod open func slice() -> ByteBuffer! /// Java method `slice`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.slice(int,int) /// ``` -@JavaMethod + @JavaMethod open func slice(_ arg0: Int32, _ arg1: Int32) -> ByteBuffer! /// Java method `duplicate`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.duplicate() /// ``` -@JavaMethod + @JavaMethod open func duplicate() -> ByteBuffer! /// Java method `alignmentOffset`. - /// + /// /// ### Java method signature /// ```java /// public final int java.nio.ByteBuffer.alignmentOffset(int,int) /// ``` -@JavaMethod + @JavaMethod open func alignmentOffset(_ arg0: Int32, _ arg1: Int32) -> Int32 /// Java method `asReadOnlyBuffer`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.asReadOnlyBuffer() /// ``` -@JavaMethod + @JavaMethod open func asReadOnlyBuffer() -> ByteBuffer! /// Java method `compact`. - /// + /// /// ### Java method signature /// ```java /// public abstract java.nio.ByteBuffer java.nio.ByteBuffer.compact() /// ``` -@JavaMethod + @JavaMethod open func compact() -> ByteBuffer! /// Java method `alignedSlice`. - /// + /// /// ### Java method signature /// ```java /// public final java.nio.ByteBuffer java.nio.ByteBuffer.alignedSlice(int) /// ``` -@JavaMethod + @JavaMethod open func alignedSlice(_ arg0: Int32) -> ByteBuffer! } extension JavaClass { /// Java method `wrap`. - /// + /// /// ### Java method signature /// ```java /// public static java.nio.ByteBuffer java.nio.ByteBuffer.wrap(byte[],int,int) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func wrap(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) -> ByteBuffer! /// Java method `wrap`. - /// + /// /// ### Java method signature /// ```java /// public static java.nio.ByteBuffer java.nio.ByteBuffer.wrap(byte[]) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func wrap(_ arg0: [Int8]) -> ByteBuffer! /// Java method `allocate`. - /// + /// /// ### Java method signature /// ```java /// public static java.nio.ByteBuffer java.nio.ByteBuffer.allocate(int) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func allocate(_ arg0: Int32) -> ByteBuffer! /// Java method `allocateDirect`. - /// + /// /// ### Java method signature /// ```java /// public static java.nio.ByteBuffer java.nio.ByteBuffer.allocateDirect(int) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func allocateDirect(_ arg0: Int32) -> ByteBuffer! } diff --git a/Sources/SwiftJava/generated/Charset.swift b/Sources/SwiftJava/generated/Charset.swift index 883ee2b0e..09301e589 100644 --- a/Sources/SwiftJava/generated/Charset.swift +++ b/Sources/SwiftJava/generated/Charset.swift @@ -9,7 +9,7 @@ open class Charset: JavaObject { /// ```java /// public final java.lang.String java.nio.charset.Charset.name() /// ``` -@JavaMethod + @JavaMethod open func name() -> String /// Java method `equals`. @@ -18,7 +18,7 @@ open class Charset: JavaObject { /// ```java /// public final boolean java.nio.charset.Charset.equals(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool /// Java method `toString`. @@ -27,7 +27,7 @@ open class Charset: JavaObject { /// ```java /// public final java.lang.String java.nio.charset.Charset.toString() /// ``` -@JavaMethod + @JavaMethod open override func toString() -> String /// Java method `hashCode`. @@ -36,7 +36,7 @@ open class Charset: JavaObject { /// ```java /// public final int java.nio.charset.Charset.hashCode() /// ``` -@JavaMethod + @JavaMethod open override func hashCode() -> Int32 /// Java method `compareTo`. @@ -45,7 +45,7 @@ open class Charset: JavaObject { /// ```java /// public int java.nio.charset.Charset.compareTo(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod open func compareTo(_ arg0: JavaObject?) -> Int32 /// Java method `compareTo`. @@ -54,7 +54,7 @@ open class Charset: JavaObject { /// ```java /// public final int java.nio.charset.Charset.compareTo(java.nio.charset.Charset) /// ``` -@JavaMethod + @JavaMethod open func compareTo(_ arg0: Charset?) -> Int32 /// Java method `encode`. @@ -63,7 +63,7 @@ open class Charset: JavaObject { /// ```java /// public final java.nio.ByteBuffer java.nio.charset.Charset.encode(java.lang.String) /// ``` -@JavaMethod + @JavaMethod open func encode(_ arg0: String) -> ByteBuffer! /// Java method `canEncode`. @@ -72,7 +72,7 @@ open class Charset: JavaObject { /// ```java /// public boolean java.nio.charset.Charset.canEncode() /// ``` -@JavaMethod + @JavaMethod open func canEncode() -> Bool /// Java method `contains`. @@ -81,7 +81,7 @@ open class Charset: JavaObject { /// ```java /// public abstract boolean java.nio.charset.Charset.contains(java.nio.charset.Charset) /// ``` -@JavaMethod + @JavaMethod open func contains(_ arg0: Charset?) -> Bool /// Java method `isRegistered`. @@ -90,7 +90,7 @@ open class Charset: JavaObject { /// ```java /// public final boolean java.nio.charset.Charset.isRegistered() /// ``` -@JavaMethod + @JavaMethod open func isRegistered() -> Bool /// Java method `aliases`. @@ -99,7 +99,7 @@ open class Charset: JavaObject { /// ```java /// public final java.util.Set java.nio.charset.Charset.aliases() /// ``` -@JavaMethod + @JavaMethod open func aliases() -> JavaSet! /// Java method `displayName`. @@ -108,7 +108,7 @@ open class Charset: JavaObject { /// ```java /// public java.lang.String java.nio.charset.Charset.displayName() /// ``` -@JavaMethod + @JavaMethod open func displayName() -> String } extension JavaClass { @@ -118,7 +118,7 @@ extension JavaClass { /// ```java /// public static java.nio.charset.Charset java.nio.charset.Charset.forName(java.lang.String,java.nio.charset.Charset) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func forName(_ arg0: String, _ arg1: Charset?) -> Charset! /// Java method `forName`. @@ -127,7 +127,7 @@ extension JavaClass { /// ```java /// public static java.nio.charset.Charset java.nio.charset.Charset.forName(java.lang.String) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func forName(_ arg0: String) -> Charset! /// Java method `defaultCharset`. @@ -136,7 +136,7 @@ extension JavaClass { /// ```java /// public static java.nio.charset.Charset java.nio.charset.Charset.defaultCharset() /// ``` -@JavaStaticMethod + @JavaStaticMethod public func defaultCharset() -> Charset! /// Java method `isSupported`. @@ -145,6 +145,6 @@ extension JavaClass { /// ```java /// public static boolean java.nio.charset.Charset.isSupported(java.lang.String) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func isSupported(_ arg0: String) -> Bool } diff --git a/Sources/SwiftJava/generated/Closeable.swift b/Sources/SwiftJava/generated/Closeable.swift index d69298cc9..a8a834c56 100644 --- a/Sources/SwiftJava/generated/Closeable.swift +++ b/Sources/SwiftJava/generated/Closeable.swift @@ -9,6 +9,6 @@ public struct Closeable { /// ```java /// public abstract void java.io.Closeable.close() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod public func close() throws } diff --git a/Sources/SwiftJava/generated/File.swift b/Sources/SwiftJava/generated/File.swift index f554cfefa..fdbb9e367 100644 --- a/Sources/SwiftJava/generated/File.swift +++ b/Sources/SwiftJava/generated/File.swift @@ -12,390 +12,390 @@ open class File: JavaObject { @JavaMethod @_nonoverride public convenience init(_ arg0: File?, _ arg1: String, environment: JNIEnvironment? = nil) - /// Java method `getName`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.getName() - /// ``` + /// Java method `getName`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.getName() + /// ``` @JavaMethod open func getName() -> String - /// Java method `equals`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.equals(java.lang.Object) - /// ``` + /// Java method `equals`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.equals(java.lang.Object) + /// ``` @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool - /// Java method `length`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.File.length() - /// ``` + /// Java method `length`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.File.length() + /// ``` @JavaMethod open func length() -> Int64 - /// Java method `toString`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.toString() - /// ``` + /// Java method `toString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.toString() + /// ``` @JavaMethod open override func toString() -> String - /// Java method `hashCode`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.File.hashCode() - /// ``` + /// Java method `hashCode`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.File.hashCode() + /// ``` @JavaMethod open override func hashCode() -> Int32 - /// Java method `isHidden`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.isHidden() - /// ``` + /// Java method `isHidden`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.isHidden() + /// ``` @JavaMethod open func isHidden() -> Bool - /// Java method `compareTo`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.File.compareTo(java.io.File) - /// ``` + /// Java method `compareTo`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.File.compareTo(java.io.File) + /// ``` @JavaMethod open func compareTo(_ arg0: File?) -> Int32 - /// Java method `compareTo`. - /// - /// ### Java method signature - /// ```java - /// public int java.io.File.compareTo(java.lang.Object) - /// ``` + /// Java method `compareTo`. + /// + /// ### Java method signature + /// ```java + /// public int java.io.File.compareTo(java.lang.Object) + /// ``` @JavaMethod open func compareTo(_ arg0: JavaObject?) -> Int32 - /// Java method `list`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String[] java.io.File.list() - /// ``` + /// Java method `list`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String[] java.io.File.list() + /// ``` @JavaMethod open func list() -> [String] - /// Java method `isAbsolute`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.isAbsolute() - /// ``` + /// Java method `isAbsolute`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.isAbsolute() + /// ``` @JavaMethod open func isAbsolute() -> Bool - /// Java method `getParent`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.getParent() - /// ``` + /// Java method `getParent`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.getParent() + /// ``` @JavaMethod open func getParent() -> String - /// Java method `setReadOnly`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setReadOnly() - /// ``` + /// Java method `setReadOnly`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setReadOnly() + /// ``` @JavaMethod open func setReadOnly() -> Bool - /// Java method `canRead`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.canRead() - /// ``` + /// Java method `canRead`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.canRead() + /// ``` @JavaMethod open func canRead() -> Bool - /// Java method `delete`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.delete() - /// ``` + /// Java method `delete`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.delete() + /// ``` @JavaMethod open func delete() -> Bool - /// Java method `getPath`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.getPath() - /// ``` + /// Java method `getPath`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.getPath() + /// ``` @JavaMethod open func getPath() -> String - /// Java method `getAbsolutePath`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.getAbsolutePath() - /// ``` + /// Java method `getAbsolutePath`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.getAbsolutePath() + /// ``` @JavaMethod open func getAbsolutePath() -> String - /// Java method `exists`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.exists() - /// ``` + /// Java method `exists`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.exists() + /// ``` @JavaMethod open func exists() -> Bool - /// Java method `createNewFile`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.createNewFile() throws java.io.IOException - /// ``` + /// Java method `createNewFile`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.createNewFile() throws java.io.IOException + /// ``` @JavaMethod open func createNewFile() throws -> Bool - /// Java method `renameTo`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.renameTo(java.io.File) - /// ``` + /// Java method `renameTo`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.renameTo(java.io.File) + /// ``` @JavaMethod open func renameTo(_ arg0: File?) -> Bool - /// Java method `isDirectory`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.isDirectory() - /// ``` + /// Java method `isDirectory`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.isDirectory() + /// ``` @JavaMethod open func isDirectory() -> Bool - /// Java method `getCanonicalPath`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.File.getCanonicalPath() throws java.io.IOException - /// ``` + /// Java method `getCanonicalPath`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.File.getCanonicalPath() throws java.io.IOException + /// ``` @JavaMethod open func getCanonicalPath() throws -> String - /// Java method `getAbsoluteFile`. - /// - /// ### Java method signature - /// ```java - /// public java.io.File java.io.File.getAbsoluteFile() - /// ``` + /// Java method `getAbsoluteFile`. + /// + /// ### Java method signature + /// ```java + /// public java.io.File java.io.File.getAbsoluteFile() + /// ``` @JavaMethod open func getAbsoluteFile() -> File! - /// Java method `mkdir`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.mkdir() - /// ``` + /// Java method `mkdir`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.mkdir() + /// ``` @JavaMethod open func mkdir() -> Bool - /// Java method `getCanonicalFile`. - /// - /// ### Java method signature - /// ```java - /// public java.io.File java.io.File.getCanonicalFile() throws java.io.IOException - /// ``` + /// Java method `getCanonicalFile`. + /// + /// ### Java method signature + /// ```java + /// public java.io.File java.io.File.getCanonicalFile() throws java.io.IOException + /// ``` @JavaMethod open func getCanonicalFile() throws -> File! - /// Java method `getParentFile`. - /// - /// ### Java method signature - /// ```java - /// public java.io.File java.io.File.getParentFile() - /// ``` + /// Java method `getParentFile`. + /// + /// ### Java method signature + /// ```java + /// public java.io.File java.io.File.getParentFile() + /// ``` @JavaMethod open func getParentFile() -> File! - /// Java method `mkdirs`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.mkdirs() - /// ``` + /// Java method `mkdirs`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.mkdirs() + /// ``` @JavaMethod open func mkdirs() -> Bool - /// Java method `setWritable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setWritable(boolean) - /// ``` + /// Java method `setWritable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setWritable(boolean) + /// ``` @JavaMethod open func setWritable(_ arg0: Bool) -> Bool - /// Java method `setWritable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setWritable(boolean,boolean) - /// ``` + /// Java method `setWritable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setWritable(boolean,boolean) + /// ``` @JavaMethod open func setWritable(_ arg0: Bool, _ arg1: Bool) -> Bool - /// Java method `setReadable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setReadable(boolean,boolean) - /// ``` + /// Java method `setReadable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setReadable(boolean,boolean) + /// ``` @JavaMethod open func setReadable(_ arg0: Bool, _ arg1: Bool) -> Bool - /// Java method `setReadable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setReadable(boolean) - /// ``` + /// Java method `setReadable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setReadable(boolean) + /// ``` @JavaMethod open func setReadable(_ arg0: Bool) -> Bool - /// Java method `setExecutable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setExecutable(boolean,boolean) - /// ``` + /// Java method `setExecutable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setExecutable(boolean,boolean) + /// ``` @JavaMethod open func setExecutable(_ arg0: Bool, _ arg1: Bool) -> Bool - /// Java method `setExecutable`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setExecutable(boolean) - /// ``` + /// Java method `setExecutable`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setExecutable(boolean) + /// ``` @JavaMethod open func setExecutable(_ arg0: Bool) -> Bool - /// Java method `canWrite`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.canWrite() - /// ``` + /// Java method `canWrite`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.canWrite() + /// ``` @JavaMethod open func canWrite() -> Bool - /// Java method `isFile`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.isFile() - /// ``` + /// Java method `isFile`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.isFile() + /// ``` @JavaMethod open func isFile() -> Bool - /// Java method `lastModified`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.File.lastModified() - /// ``` + /// Java method `lastModified`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.File.lastModified() + /// ``` @JavaMethod open func lastModified() -> Int64 - /// Java method `deleteOnExit`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.File.deleteOnExit() - /// ``` + /// Java method `deleteOnExit`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.File.deleteOnExit() + /// ``` @JavaMethod open func deleteOnExit() - /// Java method `listFiles`. - /// - /// ### Java method signature - /// ```java - /// public java.io.File[] java.io.File.listFiles() - /// ``` + /// Java method `listFiles`. + /// + /// ### Java method signature + /// ```java + /// public java.io.File[] java.io.File.listFiles() + /// ``` @JavaMethod open func listFiles() -> [File?] - /// Java method `setLastModified`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.setLastModified(long) - /// ``` + /// Java method `setLastModified`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.setLastModified(long) + /// ``` @JavaMethod open func setLastModified(_ arg0: Int64) -> Bool - /// Java method `canExecute`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.File.canExecute() - /// ``` + /// Java method `canExecute`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.File.canExecute() + /// ``` @JavaMethod open func canExecute() -> Bool - /// Java method `getTotalSpace`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.File.getTotalSpace() - /// ``` + /// Java method `getTotalSpace`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.File.getTotalSpace() + /// ``` @JavaMethod open func getTotalSpace() -> Int64 - /// Java method `getFreeSpace`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.File.getFreeSpace() - /// ``` + /// Java method `getFreeSpace`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.File.getFreeSpace() + /// ``` @JavaMethod open func getFreeSpace() -> Int64 - /// Java method `getUsableSpace`. - /// - /// ### Java method signature - /// ```java - /// public long java.io.File.getUsableSpace() - /// ``` + /// Java method `getUsableSpace`. + /// + /// ### Java method signature + /// ```java + /// public long java.io.File.getUsableSpace() + /// ``` @JavaMethod open func getUsableSpace() -> Int64 - /// Java method `toPath`. - /// - /// ### Java method signature - /// ```java - /// public java.nio.file.Path java.io.File.toPath() - /// ``` + /// Java method `toPath`. + /// + /// ### Java method signature + /// ```java + /// public java.nio.file.Path java.io.File.toPath() + /// ``` @JavaMethod open func toPath() -> Path! } @@ -412,30 +412,30 @@ extension JavaClass { @JavaStaticField(isFinal: true) public var pathSeparator: String - /// Java method `listRoots`. - /// - /// ### Java method signature - /// ```java - /// public static java.io.File[] java.io.File.listRoots() - /// ``` + /// Java method `listRoots`. + /// + /// ### Java method signature + /// ```java + /// public static java.io.File[] java.io.File.listRoots() + /// ``` @JavaStaticMethod public func listRoots() -> [File?] - /// Java method `createTempFile`. - /// - /// ### Java method signature - /// ```java - /// public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String) throws java.io.IOException - /// ``` + /// Java method `createTempFile`. + /// + /// ### Java method signature + /// ```java + /// public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String) throws java.io.IOException + /// ``` @JavaStaticMethod public func createTempFile(_ arg0: String, _ arg1: String) throws -> File! - /// Java method `createTempFile`. - /// - /// ### Java method signature - /// ```java - /// public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String,java.io.File) throws java.io.IOException - /// ``` + /// Java method `createTempFile`. + /// + /// ### Java method signature + /// ```java + /// public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String,java.io.File) throws java.io.IOException + /// ``` @JavaStaticMethod public func createTempFile(_ arg0: String, _ arg1: String, _ arg2: File?) throws -> File! } diff --git a/Sources/SwiftJava/generated/Flushable.swift b/Sources/SwiftJava/generated/Flushable.swift index 14f5e8cc4..b281ef609 100644 --- a/Sources/SwiftJava/generated/Flushable.swift +++ b/Sources/SwiftJava/generated/Flushable.swift @@ -9,6 +9,6 @@ public struct Flushable { /// ```java /// public abstract void java.io.Flushable.flush() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod public func flush() throws } diff --git a/Sources/SwiftJava/generated/JavaCharacter.swift b/Sources/SwiftJava/generated/JavaCharacter.swift index f79742a3b..bce0107ea 100644 --- a/Sources/SwiftJava/generated/JavaCharacter.swift +++ b/Sources/SwiftJava/generated/JavaCharacter.swift @@ -27,14 +27,14 @@ open class JavaCharacter: JavaObject { extension JavaCharacter { @JavaClass("java.lang.Character$Subset") open class Subset: JavaObject { - @JavaMethod - open override func equals(_ arg0: JavaObject?) -> Bool + @JavaMethod + open override func equals(_ arg0: JavaObject?) -> Bool - @JavaMethod - open override func toString() -> String + @JavaMethod + open override func toString() -> String - @JavaMethod - open override func hashCode() -> Int32 + @JavaMethod + open override func hashCode() -> Int32 } } extension JavaCharacter { @@ -1045,514 +1045,515 @@ extension JavaCharacter { open class UnicodeScript: JavaObject { public enum UnicodeScriptCases: Equatable { case COMMON - case LATIN - case GREEK - case CYRILLIC - case ARMENIAN - case HEBREW - case ARABIC - case SYRIAC - case THAANA - case DEVANAGARI - case BENGALI - case GURMUKHI - case GUJARATI - case ORIYA - case TAMIL - case TELUGU - case KANNADA - case MALAYALAM - case SINHALA - case THAI - case LAO - case TIBETAN - case MYANMAR - case GEORGIAN - case HANGUL - case ETHIOPIC - case CHEROKEE - case CANADIAN_ABORIGINAL - case OGHAM - case RUNIC - case KHMER - case MONGOLIAN - case HIRAGANA - case KATAKANA - case BOPOMOFO - case HAN - case YI - case OLD_ITALIC - case GOTHIC - case DESERET - case INHERITED - case TAGALOG - case HANUNOO - case BUHID - case TAGBANWA - case LIMBU - case TAI_LE - case LINEAR_B - case UGARITIC - case SHAVIAN - case OSMANYA - case CYPRIOT - case BRAILLE - case BUGINESE - case COPTIC - case NEW_TAI_LUE - case GLAGOLITIC - case TIFINAGH - case SYLOTI_NAGRI - case OLD_PERSIAN - case KHAROSHTHI - case BALINESE - case CUNEIFORM - case PHOENICIAN - case PHAGS_PA - case NKO - case SUNDANESE - case BATAK - case LEPCHA - case OL_CHIKI - case VAI - case SAURASHTRA - case KAYAH_LI - case REJANG - case LYCIAN - case CARIAN - case LYDIAN - case CHAM - case TAI_THAM - case TAI_VIET - case AVESTAN - case EGYPTIAN_HIEROGLYPHS - case SAMARITAN - case MANDAIC - case LISU - case BAMUM - case JAVANESE - case MEETEI_MAYEK - case IMPERIAL_ARAMAIC - case OLD_SOUTH_ARABIAN - case INSCRIPTIONAL_PARTHIAN - case INSCRIPTIONAL_PAHLAVI - case OLD_TURKIC - case BRAHMI - case KAITHI - case MEROITIC_HIEROGLYPHS - case MEROITIC_CURSIVE - case SORA_SOMPENG - case CHAKMA - case SHARADA - case TAKRI - case MIAO - case CAUCASIAN_ALBANIAN - case BASSA_VAH - case DUPLOYAN - case ELBASAN - case GRANTHA - case PAHAWH_HMONG - case KHOJKI - case LINEAR_A - case MAHAJANI - case MANICHAEAN - case MENDE_KIKAKUI - case MODI - case MRO - case OLD_NORTH_ARABIAN - case NABATAEAN - case PALMYRENE - case PAU_CIN_HAU - case OLD_PERMIC - case PSALTER_PAHLAVI - case SIDDHAM - case KHUDAWADI - case TIRHUTA - case WARANG_CITI - case AHOM - case ANATOLIAN_HIEROGLYPHS - case HATRAN - case MULTANI - case OLD_HUNGARIAN - case SIGNWRITING - case ADLAM - case BHAIKSUKI - case MARCHEN - case NEWA - case OSAGE - case TANGUT - case MASARAM_GONDI - case NUSHU - case SOYOMBO - case ZANABAZAR_SQUARE - case HANIFI_ROHINGYA - case OLD_SOGDIAN - case SOGDIAN - case DOGRA - case GUNJALA_GONDI - case MAKASAR - case MEDEFAIDRIN - case ELYMAIC - case NANDINAGARI - case NYIAKENG_PUACHUE_HMONG - case WANCHO - case YEZIDI - case CHORASMIAN - case DIVES_AKURU - case KHITAN_SMALL_SCRIPT - case VITHKUQI - case OLD_UYGHUR - case CYPRO_MINOAN - case TANGSA - case TOTO - case KAWI - case NAG_MUNDARI - case UNKNOWN + case LATIN + case GREEK + case CYRILLIC + case ARMENIAN + case HEBREW + case ARABIC + case SYRIAC + case THAANA + case DEVANAGARI + case BENGALI + case GURMUKHI + case GUJARATI + case ORIYA + case TAMIL + case TELUGU + case KANNADA + case MALAYALAM + case SINHALA + case THAI + case LAO + case TIBETAN + case MYANMAR + case GEORGIAN + case HANGUL + case ETHIOPIC + case CHEROKEE + case CANADIAN_ABORIGINAL + case OGHAM + case RUNIC + case KHMER + case MONGOLIAN + case HIRAGANA + case KATAKANA + case BOPOMOFO + case HAN + case YI + case OLD_ITALIC + case GOTHIC + case DESERET + case INHERITED + case TAGALOG + case HANUNOO + case BUHID + case TAGBANWA + case LIMBU + case TAI_LE + case LINEAR_B + case UGARITIC + case SHAVIAN + case OSMANYA + case CYPRIOT + case BRAILLE + case BUGINESE + case COPTIC + case NEW_TAI_LUE + case GLAGOLITIC + case TIFINAGH + case SYLOTI_NAGRI + case OLD_PERSIAN + case KHAROSHTHI + case BALINESE + case CUNEIFORM + case PHOENICIAN + case PHAGS_PA + case NKO + case SUNDANESE + case BATAK + case LEPCHA + case OL_CHIKI + case VAI + case SAURASHTRA + case KAYAH_LI + case REJANG + case LYCIAN + case CARIAN + case LYDIAN + case CHAM + case TAI_THAM + case TAI_VIET + case AVESTAN + case EGYPTIAN_HIEROGLYPHS + case SAMARITAN + case MANDAIC + case LISU + case BAMUM + case JAVANESE + case MEETEI_MAYEK + case IMPERIAL_ARAMAIC + case OLD_SOUTH_ARABIAN + case INSCRIPTIONAL_PARTHIAN + case INSCRIPTIONAL_PAHLAVI + case OLD_TURKIC + case BRAHMI + case KAITHI + case MEROITIC_HIEROGLYPHS + case MEROITIC_CURSIVE + case SORA_SOMPENG + case CHAKMA + case SHARADA + case TAKRI + case MIAO + case CAUCASIAN_ALBANIAN + case BASSA_VAH + case DUPLOYAN + case ELBASAN + case GRANTHA + case PAHAWH_HMONG + case KHOJKI + case LINEAR_A + case MAHAJANI + case MANICHAEAN + case MENDE_KIKAKUI + case MODI + case MRO + case OLD_NORTH_ARABIAN + case NABATAEAN + case PALMYRENE + case PAU_CIN_HAU + case OLD_PERMIC + case PSALTER_PAHLAVI + case SIDDHAM + case KHUDAWADI + case TIRHUTA + case WARANG_CITI + case AHOM + case ANATOLIAN_HIEROGLYPHS + case HATRAN + case MULTANI + case OLD_HUNGARIAN + case SIGNWRITING + case ADLAM + case BHAIKSUKI + case MARCHEN + case NEWA + case OSAGE + case TANGUT + case MASARAM_GONDI + case NUSHU + case SOYOMBO + case ZANABAZAR_SQUARE + case HANIFI_ROHINGYA + case OLD_SOGDIAN + case SOGDIAN + case DOGRA + case GUNJALA_GONDI + case MAKASAR + case MEDEFAIDRIN + case ELYMAIC + case NANDINAGARI + case NYIAKENG_PUACHUE_HMONG + case WANCHO + case YEZIDI + case CHORASMIAN + case DIVES_AKURU + case KHITAN_SMALL_SCRIPT + case VITHKUQI + case OLD_UYGHUR + case CYPRO_MINOAN + case TANGSA + case TOTO + case KAWI + case NAG_MUNDARI + case UNKNOWN } public var enumValue: UnicodeScriptCases! { let classObj = self.javaClass if self.equals(classObj.COMMON?.as(JavaObject.self)) { return UnicodeScriptCases.COMMON - } else if self.equals(classObj.LATIN?.as(JavaObject.self)) { + } else if self.equals(classObj.LATIN?.as(JavaObject.self)) { return UnicodeScriptCases.LATIN - } else if self.equals(classObj.GREEK?.as(JavaObject.self)) { + } else if self.equals(classObj.GREEK?.as(JavaObject.self)) { return UnicodeScriptCases.GREEK - } else if self.equals(classObj.CYRILLIC?.as(JavaObject.self)) { + } else if self.equals(classObj.CYRILLIC?.as(JavaObject.self)) { return UnicodeScriptCases.CYRILLIC - } else if self.equals(classObj.ARMENIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.ARMENIAN?.as(JavaObject.self)) { return UnicodeScriptCases.ARMENIAN - } else if self.equals(classObj.HEBREW?.as(JavaObject.self)) { + } else if self.equals(classObj.HEBREW?.as(JavaObject.self)) { return UnicodeScriptCases.HEBREW - } else if self.equals(classObj.ARABIC?.as(JavaObject.self)) { + } else if self.equals(classObj.ARABIC?.as(JavaObject.self)) { return UnicodeScriptCases.ARABIC - } else if self.equals(classObj.SYRIAC?.as(JavaObject.self)) { + } else if self.equals(classObj.SYRIAC?.as(JavaObject.self)) { return UnicodeScriptCases.SYRIAC - } else if self.equals(classObj.THAANA?.as(JavaObject.self)) { + } else if self.equals(classObj.THAANA?.as(JavaObject.self)) { return UnicodeScriptCases.THAANA - } else if self.equals(classObj.DEVANAGARI?.as(JavaObject.self)) { + } else if self.equals(classObj.DEVANAGARI?.as(JavaObject.self)) { return UnicodeScriptCases.DEVANAGARI - } else if self.equals(classObj.BENGALI?.as(JavaObject.self)) { + } else if self.equals(classObj.BENGALI?.as(JavaObject.self)) { return UnicodeScriptCases.BENGALI - } else if self.equals(classObj.GURMUKHI?.as(JavaObject.self)) { + } else if self.equals(classObj.GURMUKHI?.as(JavaObject.self)) { return UnicodeScriptCases.GURMUKHI - } else if self.equals(classObj.GUJARATI?.as(JavaObject.self)) { + } else if self.equals(classObj.GUJARATI?.as(JavaObject.self)) { return UnicodeScriptCases.GUJARATI - } else if self.equals(classObj.ORIYA?.as(JavaObject.self)) { + } else if self.equals(classObj.ORIYA?.as(JavaObject.self)) { return UnicodeScriptCases.ORIYA - } else if self.equals(classObj.TAMIL?.as(JavaObject.self)) { + } else if self.equals(classObj.TAMIL?.as(JavaObject.self)) { return UnicodeScriptCases.TAMIL - } else if self.equals(classObj.TELUGU?.as(JavaObject.self)) { + } else if self.equals(classObj.TELUGU?.as(JavaObject.self)) { return UnicodeScriptCases.TELUGU - } else if self.equals(classObj.KANNADA?.as(JavaObject.self)) { + } else if self.equals(classObj.KANNADA?.as(JavaObject.self)) { return UnicodeScriptCases.KANNADA - } else if self.equals(classObj.MALAYALAM?.as(JavaObject.self)) { + } else if self.equals(classObj.MALAYALAM?.as(JavaObject.self)) { return UnicodeScriptCases.MALAYALAM - } else if self.equals(classObj.SINHALA?.as(JavaObject.self)) { + } else if self.equals(classObj.SINHALA?.as(JavaObject.self)) { return UnicodeScriptCases.SINHALA - } else if self.equals(classObj.THAI?.as(JavaObject.self)) { + } else if self.equals(classObj.THAI?.as(JavaObject.self)) { return UnicodeScriptCases.THAI - } else if self.equals(classObj.LAO?.as(JavaObject.self)) { + } else if self.equals(classObj.LAO?.as(JavaObject.self)) { return UnicodeScriptCases.LAO - } else if self.equals(classObj.TIBETAN?.as(JavaObject.self)) { + } else if self.equals(classObj.TIBETAN?.as(JavaObject.self)) { return UnicodeScriptCases.TIBETAN - } else if self.equals(classObj.MYANMAR?.as(JavaObject.self)) { + } else if self.equals(classObj.MYANMAR?.as(JavaObject.self)) { return UnicodeScriptCases.MYANMAR - } else if self.equals(classObj.GEORGIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.GEORGIAN?.as(JavaObject.self)) { return UnicodeScriptCases.GEORGIAN - } else if self.equals(classObj.HANGUL?.as(JavaObject.self)) { + } else if self.equals(classObj.HANGUL?.as(JavaObject.self)) { return UnicodeScriptCases.HANGUL - } else if self.equals(classObj.ETHIOPIC?.as(JavaObject.self)) { + } else if self.equals(classObj.ETHIOPIC?.as(JavaObject.self)) { return UnicodeScriptCases.ETHIOPIC - } else if self.equals(classObj.CHEROKEE?.as(JavaObject.self)) { + } else if self.equals(classObj.CHEROKEE?.as(JavaObject.self)) { return UnicodeScriptCases.CHEROKEE - } else if self.equals(classObj.CANADIAN_ABORIGINAL?.as(JavaObject.self)) { + } else if self.equals(classObj.CANADIAN_ABORIGINAL?.as(JavaObject.self)) { return UnicodeScriptCases.CANADIAN_ABORIGINAL - } else if self.equals(classObj.OGHAM?.as(JavaObject.self)) { + } else if self.equals(classObj.OGHAM?.as(JavaObject.self)) { return UnicodeScriptCases.OGHAM - } else if self.equals(classObj.RUNIC?.as(JavaObject.self)) { + } else if self.equals(classObj.RUNIC?.as(JavaObject.self)) { return UnicodeScriptCases.RUNIC - } else if self.equals(classObj.KHMER?.as(JavaObject.self)) { + } else if self.equals(classObj.KHMER?.as(JavaObject.self)) { return UnicodeScriptCases.KHMER - } else if self.equals(classObj.MONGOLIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.MONGOLIAN?.as(JavaObject.self)) { return UnicodeScriptCases.MONGOLIAN - } else if self.equals(classObj.HIRAGANA?.as(JavaObject.self)) { + } else if self.equals(classObj.HIRAGANA?.as(JavaObject.self)) { return UnicodeScriptCases.HIRAGANA - } else if self.equals(classObj.KATAKANA?.as(JavaObject.self)) { + } else if self.equals(classObj.KATAKANA?.as(JavaObject.self)) { return UnicodeScriptCases.KATAKANA - } else if self.equals(classObj.BOPOMOFO?.as(JavaObject.self)) { + } else if self.equals(classObj.BOPOMOFO?.as(JavaObject.self)) { return UnicodeScriptCases.BOPOMOFO - } else if self.equals(classObj.HAN?.as(JavaObject.self)) { + } else if self.equals(classObj.HAN?.as(JavaObject.self)) { return UnicodeScriptCases.HAN - } else if self.equals(classObj.YI?.as(JavaObject.self)) { + } else if self.equals(classObj.YI?.as(JavaObject.self)) { return UnicodeScriptCases.YI - } else if self.equals(classObj.OLD_ITALIC?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_ITALIC?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_ITALIC - } else if self.equals(classObj.GOTHIC?.as(JavaObject.self)) { + } else if self.equals(classObj.GOTHIC?.as(JavaObject.self)) { return UnicodeScriptCases.GOTHIC - } else if self.equals(classObj.DESERET?.as(JavaObject.self)) { + } else if self.equals(classObj.DESERET?.as(JavaObject.self)) { return UnicodeScriptCases.DESERET - } else if self.equals(classObj.INHERITED?.as(JavaObject.self)) { + } else if self.equals(classObj.INHERITED?.as(JavaObject.self)) { return UnicodeScriptCases.INHERITED - } else if self.equals(classObj.TAGALOG?.as(JavaObject.self)) { + } else if self.equals(classObj.TAGALOG?.as(JavaObject.self)) { return UnicodeScriptCases.TAGALOG - } else if self.equals(classObj.HANUNOO?.as(JavaObject.self)) { + } else if self.equals(classObj.HANUNOO?.as(JavaObject.self)) { return UnicodeScriptCases.HANUNOO - } else if self.equals(classObj.BUHID?.as(JavaObject.self)) { + } else if self.equals(classObj.BUHID?.as(JavaObject.self)) { return UnicodeScriptCases.BUHID - } else if self.equals(classObj.TAGBANWA?.as(JavaObject.self)) { + } else if self.equals(classObj.TAGBANWA?.as(JavaObject.self)) { return UnicodeScriptCases.TAGBANWA - } else if self.equals(classObj.LIMBU?.as(JavaObject.self)) { + } else if self.equals(classObj.LIMBU?.as(JavaObject.self)) { return UnicodeScriptCases.LIMBU - } else if self.equals(classObj.TAI_LE?.as(JavaObject.self)) { + } else if self.equals(classObj.TAI_LE?.as(JavaObject.self)) { return UnicodeScriptCases.TAI_LE - } else if self.equals(classObj.LINEAR_B?.as(JavaObject.self)) { + } else if self.equals(classObj.LINEAR_B?.as(JavaObject.self)) { return UnicodeScriptCases.LINEAR_B - } else if self.equals(classObj.UGARITIC?.as(JavaObject.self)) { + } else if self.equals(classObj.UGARITIC?.as(JavaObject.self)) { return UnicodeScriptCases.UGARITIC - } else if self.equals(classObj.SHAVIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.SHAVIAN?.as(JavaObject.self)) { return UnicodeScriptCases.SHAVIAN - } else if self.equals(classObj.OSMANYA?.as(JavaObject.self)) { + } else if self.equals(classObj.OSMANYA?.as(JavaObject.self)) { return UnicodeScriptCases.OSMANYA - } else if self.equals(classObj.CYPRIOT?.as(JavaObject.self)) { + } else if self.equals(classObj.CYPRIOT?.as(JavaObject.self)) { return UnicodeScriptCases.CYPRIOT - } else if self.equals(classObj.BRAILLE?.as(JavaObject.self)) { + } else if self.equals(classObj.BRAILLE?.as(JavaObject.self)) { return UnicodeScriptCases.BRAILLE - } else if self.equals(classObj.BUGINESE?.as(JavaObject.self)) { + } else if self.equals(classObj.BUGINESE?.as(JavaObject.self)) { return UnicodeScriptCases.BUGINESE - } else if self.equals(classObj.COPTIC?.as(JavaObject.self)) { + } else if self.equals(classObj.COPTIC?.as(JavaObject.self)) { return UnicodeScriptCases.COPTIC - } else if self.equals(classObj.NEW_TAI_LUE?.as(JavaObject.self)) { + } else if self.equals(classObj.NEW_TAI_LUE?.as(JavaObject.self)) { return UnicodeScriptCases.NEW_TAI_LUE - } else if self.equals(classObj.GLAGOLITIC?.as(JavaObject.self)) { + } else if self.equals(classObj.GLAGOLITIC?.as(JavaObject.self)) { return UnicodeScriptCases.GLAGOLITIC - } else if self.equals(classObj.TIFINAGH?.as(JavaObject.self)) { + } else if self.equals(classObj.TIFINAGH?.as(JavaObject.self)) { return UnicodeScriptCases.TIFINAGH - } else if self.equals(classObj.SYLOTI_NAGRI?.as(JavaObject.self)) { + } else if self.equals(classObj.SYLOTI_NAGRI?.as(JavaObject.self)) { return UnicodeScriptCases.SYLOTI_NAGRI - } else if self.equals(classObj.OLD_PERSIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_PERSIAN?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_PERSIAN - } else if self.equals(classObj.KHAROSHTHI?.as(JavaObject.self)) { + } else if self.equals(classObj.KHAROSHTHI?.as(JavaObject.self)) { return UnicodeScriptCases.KHAROSHTHI - } else if self.equals(classObj.BALINESE?.as(JavaObject.self)) { + } else if self.equals(classObj.BALINESE?.as(JavaObject.self)) { return UnicodeScriptCases.BALINESE - } else if self.equals(classObj.CUNEIFORM?.as(JavaObject.self)) { + } else if self.equals(classObj.CUNEIFORM?.as(JavaObject.self)) { return UnicodeScriptCases.CUNEIFORM - } else if self.equals(classObj.PHOENICIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.PHOENICIAN?.as(JavaObject.self)) { return UnicodeScriptCases.PHOENICIAN - } else if self.equals(classObj.PHAGS_PA?.as(JavaObject.self)) { + } else if self.equals(classObj.PHAGS_PA?.as(JavaObject.self)) { return UnicodeScriptCases.PHAGS_PA - } else if self.equals(classObj.NKO?.as(JavaObject.self)) { + } else if self.equals(classObj.NKO?.as(JavaObject.self)) { return UnicodeScriptCases.NKO - } else if self.equals(classObj.SUNDANESE?.as(JavaObject.self)) { + } else if self.equals(classObj.SUNDANESE?.as(JavaObject.self)) { return UnicodeScriptCases.SUNDANESE - } else if self.equals(classObj.BATAK?.as(JavaObject.self)) { + } else if self.equals(classObj.BATAK?.as(JavaObject.self)) { return UnicodeScriptCases.BATAK - } else if self.equals(classObj.LEPCHA?.as(JavaObject.self)) { + } else if self.equals(classObj.LEPCHA?.as(JavaObject.self)) { return UnicodeScriptCases.LEPCHA - } else if self.equals(classObj.OL_CHIKI?.as(JavaObject.self)) { + } else if self.equals(classObj.OL_CHIKI?.as(JavaObject.self)) { return UnicodeScriptCases.OL_CHIKI - } else if self.equals(classObj.VAI?.as(JavaObject.self)) { + } else if self.equals(classObj.VAI?.as(JavaObject.self)) { return UnicodeScriptCases.VAI - } else if self.equals(classObj.SAURASHTRA?.as(JavaObject.self)) { + } else if self.equals(classObj.SAURASHTRA?.as(JavaObject.self)) { return UnicodeScriptCases.SAURASHTRA - } else if self.equals(classObj.KAYAH_LI?.as(JavaObject.self)) { + } else if self.equals(classObj.KAYAH_LI?.as(JavaObject.self)) { return UnicodeScriptCases.KAYAH_LI - } else if self.equals(classObj.REJANG?.as(JavaObject.self)) { + } else if self.equals(classObj.REJANG?.as(JavaObject.self)) { return UnicodeScriptCases.REJANG - } else if self.equals(classObj.LYCIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.LYCIAN?.as(JavaObject.self)) { return UnicodeScriptCases.LYCIAN - } else if self.equals(classObj.CARIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.CARIAN?.as(JavaObject.self)) { return UnicodeScriptCases.CARIAN - } else if self.equals(classObj.LYDIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.LYDIAN?.as(JavaObject.self)) { return UnicodeScriptCases.LYDIAN - } else if self.equals(classObj.CHAM?.as(JavaObject.self)) { + } else if self.equals(classObj.CHAM?.as(JavaObject.self)) { return UnicodeScriptCases.CHAM - } else if self.equals(classObj.TAI_THAM?.as(JavaObject.self)) { + } else if self.equals(classObj.TAI_THAM?.as(JavaObject.self)) { return UnicodeScriptCases.TAI_THAM - } else if self.equals(classObj.TAI_VIET?.as(JavaObject.self)) { + } else if self.equals(classObj.TAI_VIET?.as(JavaObject.self)) { return UnicodeScriptCases.TAI_VIET - } else if self.equals(classObj.AVESTAN?.as(JavaObject.self)) { + } else if self.equals(classObj.AVESTAN?.as(JavaObject.self)) { return UnicodeScriptCases.AVESTAN - } else if self.equals(classObj.EGYPTIAN_HIEROGLYPHS?.as(JavaObject.self)) { + } else if self.equals(classObj.EGYPTIAN_HIEROGLYPHS?.as(JavaObject.self)) { return UnicodeScriptCases.EGYPTIAN_HIEROGLYPHS - } else if self.equals(classObj.SAMARITAN?.as(JavaObject.self)) { + } else if self.equals(classObj.SAMARITAN?.as(JavaObject.self)) { return UnicodeScriptCases.SAMARITAN - } else if self.equals(classObj.MANDAIC?.as(JavaObject.self)) { + } else if self.equals(classObj.MANDAIC?.as(JavaObject.self)) { return UnicodeScriptCases.MANDAIC - } else if self.equals(classObj.LISU?.as(JavaObject.self)) { + } else if self.equals(classObj.LISU?.as(JavaObject.self)) { return UnicodeScriptCases.LISU - } else if self.equals(classObj.BAMUM?.as(JavaObject.self)) { + } else if self.equals(classObj.BAMUM?.as(JavaObject.self)) { return UnicodeScriptCases.BAMUM - } else if self.equals(classObj.JAVANESE?.as(JavaObject.self)) { + } else if self.equals(classObj.JAVANESE?.as(JavaObject.self)) { return UnicodeScriptCases.JAVANESE - } else if self.equals(classObj.MEETEI_MAYEK?.as(JavaObject.self)) { + } else if self.equals(classObj.MEETEI_MAYEK?.as(JavaObject.self)) { return UnicodeScriptCases.MEETEI_MAYEK - } else if self.equals(classObj.IMPERIAL_ARAMAIC?.as(JavaObject.self)) { + } else if self.equals(classObj.IMPERIAL_ARAMAIC?.as(JavaObject.self)) { return UnicodeScriptCases.IMPERIAL_ARAMAIC - } else if self.equals(classObj.OLD_SOUTH_ARABIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_SOUTH_ARABIAN?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_SOUTH_ARABIAN - } else if self.equals(classObj.INSCRIPTIONAL_PARTHIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.INSCRIPTIONAL_PARTHIAN?.as(JavaObject.self)) { return UnicodeScriptCases.INSCRIPTIONAL_PARTHIAN - } else if self.equals(classObj.INSCRIPTIONAL_PAHLAVI?.as(JavaObject.self)) { + } else if self.equals(classObj.INSCRIPTIONAL_PAHLAVI?.as(JavaObject.self)) { return UnicodeScriptCases.INSCRIPTIONAL_PAHLAVI - } else if self.equals(classObj.OLD_TURKIC?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_TURKIC?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_TURKIC - } else if self.equals(classObj.BRAHMI?.as(JavaObject.self)) { + } else if self.equals(classObj.BRAHMI?.as(JavaObject.self)) { return UnicodeScriptCases.BRAHMI - } else if self.equals(classObj.KAITHI?.as(JavaObject.self)) { + } else if self.equals(classObj.KAITHI?.as(JavaObject.self)) { return UnicodeScriptCases.KAITHI - } else if self.equals(classObj.MEROITIC_HIEROGLYPHS?.as(JavaObject.self)) { + } else if self.equals(classObj.MEROITIC_HIEROGLYPHS?.as(JavaObject.self)) { return UnicodeScriptCases.MEROITIC_HIEROGLYPHS - } else if self.equals(classObj.MEROITIC_CURSIVE?.as(JavaObject.self)) { + } else if self.equals(classObj.MEROITIC_CURSIVE?.as(JavaObject.self)) { return UnicodeScriptCases.MEROITIC_CURSIVE - } else if self.equals(classObj.SORA_SOMPENG?.as(JavaObject.self)) { + } else if self.equals(classObj.SORA_SOMPENG?.as(JavaObject.self)) { return UnicodeScriptCases.SORA_SOMPENG - } else if self.equals(classObj.CHAKMA?.as(JavaObject.self)) { + } else if self.equals(classObj.CHAKMA?.as(JavaObject.self)) { return UnicodeScriptCases.CHAKMA - } else if self.equals(classObj.SHARADA?.as(JavaObject.self)) { + } else if self.equals(classObj.SHARADA?.as(JavaObject.self)) { return UnicodeScriptCases.SHARADA - } else if self.equals(classObj.TAKRI?.as(JavaObject.self)) { + } else if self.equals(classObj.TAKRI?.as(JavaObject.self)) { return UnicodeScriptCases.TAKRI - } else if self.equals(classObj.MIAO?.as(JavaObject.self)) { + } else if self.equals(classObj.MIAO?.as(JavaObject.self)) { return UnicodeScriptCases.MIAO - } else if self.equals(classObj.CAUCASIAN_ALBANIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.CAUCASIAN_ALBANIAN?.as(JavaObject.self)) { return UnicodeScriptCases.CAUCASIAN_ALBANIAN - } else if self.equals(classObj.BASSA_VAH?.as(JavaObject.self)) { + } else if self.equals(classObj.BASSA_VAH?.as(JavaObject.self)) { return UnicodeScriptCases.BASSA_VAH - } else if self.equals(classObj.DUPLOYAN?.as(JavaObject.self)) { + } else if self.equals(classObj.DUPLOYAN?.as(JavaObject.self)) { return UnicodeScriptCases.DUPLOYAN - } else if self.equals(classObj.ELBASAN?.as(JavaObject.self)) { + } else if self.equals(classObj.ELBASAN?.as(JavaObject.self)) { return UnicodeScriptCases.ELBASAN - } else if self.equals(classObj.GRANTHA?.as(JavaObject.self)) { + } else if self.equals(classObj.GRANTHA?.as(JavaObject.self)) { return UnicodeScriptCases.GRANTHA - } else if self.equals(classObj.PAHAWH_HMONG?.as(JavaObject.self)) { + } else if self.equals(classObj.PAHAWH_HMONG?.as(JavaObject.self)) { return UnicodeScriptCases.PAHAWH_HMONG - } else if self.equals(classObj.KHOJKI?.as(JavaObject.self)) { + } else if self.equals(classObj.KHOJKI?.as(JavaObject.self)) { return UnicodeScriptCases.KHOJKI - } else if self.equals(classObj.LINEAR_A?.as(JavaObject.self)) { + } else if self.equals(classObj.LINEAR_A?.as(JavaObject.self)) { return UnicodeScriptCases.LINEAR_A - } else if self.equals(classObj.MAHAJANI?.as(JavaObject.self)) { + } else if self.equals(classObj.MAHAJANI?.as(JavaObject.self)) { return UnicodeScriptCases.MAHAJANI - } else if self.equals(classObj.MANICHAEAN?.as(JavaObject.self)) { + } else if self.equals(classObj.MANICHAEAN?.as(JavaObject.self)) { return UnicodeScriptCases.MANICHAEAN - } else if self.equals(classObj.MENDE_KIKAKUI?.as(JavaObject.self)) { + } else if self.equals(classObj.MENDE_KIKAKUI?.as(JavaObject.self)) { return UnicodeScriptCases.MENDE_KIKAKUI - } else if self.equals(classObj.MODI?.as(JavaObject.self)) { + } else if self.equals(classObj.MODI?.as(JavaObject.self)) { return UnicodeScriptCases.MODI - } else if self.equals(classObj.MRO?.as(JavaObject.self)) { + } else if self.equals(classObj.MRO?.as(JavaObject.self)) { return UnicodeScriptCases.MRO - } else if self.equals(classObj.OLD_NORTH_ARABIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_NORTH_ARABIAN?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_NORTH_ARABIAN - } else if self.equals(classObj.NABATAEAN?.as(JavaObject.self)) { + } else if self.equals(classObj.NABATAEAN?.as(JavaObject.self)) { return UnicodeScriptCases.NABATAEAN - } else if self.equals(classObj.PALMYRENE?.as(JavaObject.self)) { + } else if self.equals(classObj.PALMYRENE?.as(JavaObject.self)) { return UnicodeScriptCases.PALMYRENE - } else if self.equals(classObj.PAU_CIN_HAU?.as(JavaObject.self)) { + } else if self.equals(classObj.PAU_CIN_HAU?.as(JavaObject.self)) { return UnicodeScriptCases.PAU_CIN_HAU - } else if self.equals(classObj.OLD_PERMIC?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_PERMIC?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_PERMIC - } else if self.equals(classObj.PSALTER_PAHLAVI?.as(JavaObject.self)) { + } else if self.equals(classObj.PSALTER_PAHLAVI?.as(JavaObject.self)) { return UnicodeScriptCases.PSALTER_PAHLAVI - } else if self.equals(classObj.SIDDHAM?.as(JavaObject.self)) { + } else if self.equals(classObj.SIDDHAM?.as(JavaObject.self)) { return UnicodeScriptCases.SIDDHAM - } else if self.equals(classObj.KHUDAWADI?.as(JavaObject.self)) { + } else if self.equals(classObj.KHUDAWADI?.as(JavaObject.self)) { return UnicodeScriptCases.KHUDAWADI - } else if self.equals(classObj.TIRHUTA?.as(JavaObject.self)) { + } else if self.equals(classObj.TIRHUTA?.as(JavaObject.self)) { return UnicodeScriptCases.TIRHUTA - } else if self.equals(classObj.WARANG_CITI?.as(JavaObject.self)) { + } else if self.equals(classObj.WARANG_CITI?.as(JavaObject.self)) { return UnicodeScriptCases.WARANG_CITI - } else if self.equals(classObj.AHOM?.as(JavaObject.self)) { + } else if self.equals(classObj.AHOM?.as(JavaObject.self)) { return UnicodeScriptCases.AHOM - } else if self.equals(classObj.ANATOLIAN_HIEROGLYPHS?.as(JavaObject.self)) { + } else if self.equals(classObj.ANATOLIAN_HIEROGLYPHS?.as(JavaObject.self)) { return UnicodeScriptCases.ANATOLIAN_HIEROGLYPHS - } else if self.equals(classObj.HATRAN?.as(JavaObject.self)) { + } else if self.equals(classObj.HATRAN?.as(JavaObject.self)) { return UnicodeScriptCases.HATRAN - } else if self.equals(classObj.MULTANI?.as(JavaObject.self)) { + } else if self.equals(classObj.MULTANI?.as(JavaObject.self)) { return UnicodeScriptCases.MULTANI - } else if self.equals(classObj.OLD_HUNGARIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_HUNGARIAN?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_HUNGARIAN - } else if self.equals(classObj.SIGNWRITING?.as(JavaObject.self)) { + } else if self.equals(classObj.SIGNWRITING?.as(JavaObject.self)) { return UnicodeScriptCases.SIGNWRITING - } else if self.equals(classObj.ADLAM?.as(JavaObject.self)) { + } else if self.equals(classObj.ADLAM?.as(JavaObject.self)) { return UnicodeScriptCases.ADLAM - } else if self.equals(classObj.BHAIKSUKI?.as(JavaObject.self)) { + } else if self.equals(classObj.BHAIKSUKI?.as(JavaObject.self)) { return UnicodeScriptCases.BHAIKSUKI - } else if self.equals(classObj.MARCHEN?.as(JavaObject.self)) { + } else if self.equals(classObj.MARCHEN?.as(JavaObject.self)) { return UnicodeScriptCases.MARCHEN - } else if self.equals(classObj.NEWA?.as(JavaObject.self)) { + } else if self.equals(classObj.NEWA?.as(JavaObject.self)) { return UnicodeScriptCases.NEWA - } else if self.equals(classObj.OSAGE?.as(JavaObject.self)) { + } else if self.equals(classObj.OSAGE?.as(JavaObject.self)) { return UnicodeScriptCases.OSAGE - } else if self.equals(classObj.TANGUT?.as(JavaObject.self)) { + } else if self.equals(classObj.TANGUT?.as(JavaObject.self)) { return UnicodeScriptCases.TANGUT - } else if self.equals(classObj.MASARAM_GONDI?.as(JavaObject.self)) { + } else if self.equals(classObj.MASARAM_GONDI?.as(JavaObject.self)) { return UnicodeScriptCases.MASARAM_GONDI - } else if self.equals(classObj.NUSHU?.as(JavaObject.self)) { + } else if self.equals(classObj.NUSHU?.as(JavaObject.self)) { return UnicodeScriptCases.NUSHU - } else if self.equals(classObj.SOYOMBO?.as(JavaObject.self)) { + } else if self.equals(classObj.SOYOMBO?.as(JavaObject.self)) { return UnicodeScriptCases.SOYOMBO - } else if self.equals(classObj.ZANABAZAR_SQUARE?.as(JavaObject.self)) { + } else if self.equals(classObj.ZANABAZAR_SQUARE?.as(JavaObject.self)) { return UnicodeScriptCases.ZANABAZAR_SQUARE - } else if self.equals(classObj.HANIFI_ROHINGYA?.as(JavaObject.self)) { + } else if self.equals(classObj.HANIFI_ROHINGYA?.as(JavaObject.self)) { return UnicodeScriptCases.HANIFI_ROHINGYA - } else if self.equals(classObj.OLD_SOGDIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_SOGDIAN?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_SOGDIAN - } else if self.equals(classObj.SOGDIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.SOGDIAN?.as(JavaObject.self)) { return UnicodeScriptCases.SOGDIAN - } else if self.equals(classObj.DOGRA?.as(JavaObject.self)) { + } else if self.equals(classObj.DOGRA?.as(JavaObject.self)) { return UnicodeScriptCases.DOGRA - } else if self.equals(classObj.GUNJALA_GONDI?.as(JavaObject.self)) { + } else if self.equals(classObj.GUNJALA_GONDI?.as(JavaObject.self)) { return UnicodeScriptCases.GUNJALA_GONDI - } else if self.equals(classObj.MAKASAR?.as(JavaObject.self)) { + } else if self.equals(classObj.MAKASAR?.as(JavaObject.self)) { return UnicodeScriptCases.MAKASAR - } else if self.equals(classObj.MEDEFAIDRIN?.as(JavaObject.self)) { + } else if self.equals(classObj.MEDEFAIDRIN?.as(JavaObject.self)) { return UnicodeScriptCases.MEDEFAIDRIN - } else if self.equals(classObj.ELYMAIC?.as(JavaObject.self)) { + } else if self.equals(classObj.ELYMAIC?.as(JavaObject.self)) { return UnicodeScriptCases.ELYMAIC - } else if self.equals(classObj.NANDINAGARI?.as(JavaObject.self)) { + } else if self.equals(classObj.NANDINAGARI?.as(JavaObject.self)) { return UnicodeScriptCases.NANDINAGARI - } else if self.equals(classObj.NYIAKENG_PUACHUE_HMONG?.as(JavaObject.self)) { + } else if self.equals(classObj.NYIAKENG_PUACHUE_HMONG?.as(JavaObject.self)) { return UnicodeScriptCases.NYIAKENG_PUACHUE_HMONG - } else if self.equals(classObj.WANCHO?.as(JavaObject.self)) { + } else if self.equals(classObj.WANCHO?.as(JavaObject.self)) { return UnicodeScriptCases.WANCHO - } else if self.equals(classObj.YEZIDI?.as(JavaObject.self)) { + } else if self.equals(classObj.YEZIDI?.as(JavaObject.self)) { return UnicodeScriptCases.YEZIDI - } else if self.equals(classObj.CHORASMIAN?.as(JavaObject.self)) { + } else if self.equals(classObj.CHORASMIAN?.as(JavaObject.self)) { return UnicodeScriptCases.CHORASMIAN - } else if self.equals(classObj.DIVES_AKURU?.as(JavaObject.self)) { + } else if self.equals(classObj.DIVES_AKURU?.as(JavaObject.self)) { return UnicodeScriptCases.DIVES_AKURU - } else if self.equals(classObj.KHITAN_SMALL_SCRIPT?.as(JavaObject.self)) { + } else if self.equals(classObj.KHITAN_SMALL_SCRIPT?.as(JavaObject.self)) { return UnicodeScriptCases.KHITAN_SMALL_SCRIPT - } else if self.equals(classObj.VITHKUQI?.as(JavaObject.self)) { + } else if self.equals(classObj.VITHKUQI?.as(JavaObject.self)) { return UnicodeScriptCases.VITHKUQI - } else if self.equals(classObj.OLD_UYGHUR?.as(JavaObject.self)) { + } else if self.equals(classObj.OLD_UYGHUR?.as(JavaObject.self)) { return UnicodeScriptCases.OLD_UYGHUR - } else if self.equals(classObj.CYPRO_MINOAN?.as(JavaObject.self)) { + } else if self.equals(classObj.CYPRO_MINOAN?.as(JavaObject.self)) { return UnicodeScriptCases.CYPRO_MINOAN - } else if self.equals(classObj.TANGSA?.as(JavaObject.self)) { + } else if self.equals(classObj.TANGSA?.as(JavaObject.self)) { return UnicodeScriptCases.TANGSA - } else if self.equals(classObj.TOTO?.as(JavaObject.self)) { + } else if self.equals(classObj.TOTO?.as(JavaObject.self)) { return UnicodeScriptCases.TOTO - } else if self.equals(classObj.KAWI?.as(JavaObject.self)) { + } else if self.equals(classObj.KAWI?.as(JavaObject.self)) { return UnicodeScriptCases.KAWI - } else if self.equals(classObj.NAG_MUNDARI?.as(JavaObject.self)) { + } else if self.equals(classObj.NAG_MUNDARI?.as(JavaObject.self)) { return UnicodeScriptCases.NAG_MUNDARI - } else if self.equals(classObj.UNKNOWN?.as(JavaObject.self)) { + } else if self.equals(classObj.UNKNOWN?.as(JavaObject.self)) { return UnicodeScriptCases.UNKNOWN - } else { + } else { return nil } } - public convenience init(_ enumValue: UnicodeScriptCases, environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - let classObj = try! JavaClass(environment: _environment) - switch enumValue { + public convenience init(_ enumValue: UnicodeScriptCases, environment: JNIEnvironment? = nil) { + let _environment = + if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + let classObj = try! JavaClass(environment: _environment) + switch enumValue { case .COMMON: if let COMMON = classObj.COMMON { self.init(javaHolder: COMMON.javaHolder) @@ -1575,13 +1576,17 @@ extension JavaCharacter { if let CYRILLIC = classObj.CYRILLIC { self.init(javaHolder: CYRILLIC.javaHolder) } else { - fatalError("Enum value CYRILLIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CYRILLIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .ARMENIAN: if let ARMENIAN = classObj.ARMENIAN { self.init(javaHolder: ARMENIAN.javaHolder) } else { - fatalError("Enum value ARMENIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value ARMENIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HEBREW: if let HEBREW = classObj.HEBREW { @@ -1611,7 +1616,9 @@ extension JavaCharacter { if let DEVANAGARI = classObj.DEVANAGARI { self.init(javaHolder: DEVANAGARI.javaHolder) } else { - fatalError("Enum value DEVANAGARI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value DEVANAGARI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BENGALI: if let BENGALI = classObj.BENGALI { @@ -1623,13 +1630,17 @@ extension JavaCharacter { if let GURMUKHI = classObj.GURMUKHI { self.init(javaHolder: GURMUKHI.javaHolder) } else { - fatalError("Enum value GURMUKHI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value GURMUKHI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .GUJARATI: if let GUJARATI = classObj.GUJARATI { self.init(javaHolder: GUJARATI.javaHolder) } else { - fatalError("Enum value GUJARATI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value GUJARATI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .ORIYA: if let ORIYA = classObj.ORIYA { @@ -1659,7 +1670,9 @@ extension JavaCharacter { if let MALAYALAM = classObj.MALAYALAM { self.init(javaHolder: MALAYALAM.javaHolder) } else { - fatalError("Enum value MALAYALAM was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MALAYALAM was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SINHALA: if let SINHALA = classObj.SINHALA { @@ -1695,7 +1708,9 @@ extension JavaCharacter { if let GEORGIAN = classObj.GEORGIAN { self.init(javaHolder: GEORGIAN.javaHolder) } else { - fatalError("Enum value GEORGIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value GEORGIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HANGUL: if let HANGUL = classObj.HANGUL { @@ -1707,19 +1722,25 @@ extension JavaCharacter { if let ETHIOPIC = classObj.ETHIOPIC { self.init(javaHolder: ETHIOPIC.javaHolder) } else { - fatalError("Enum value ETHIOPIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value ETHIOPIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .CHEROKEE: if let CHEROKEE = classObj.CHEROKEE { self.init(javaHolder: CHEROKEE.javaHolder) } else { - fatalError("Enum value CHEROKEE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CHEROKEE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .CANADIAN_ABORIGINAL: if let CANADIAN_ABORIGINAL = classObj.CANADIAN_ABORIGINAL { self.init(javaHolder: CANADIAN_ABORIGINAL.javaHolder) } else { - fatalError("Enum value CANADIAN_ABORIGINAL was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CANADIAN_ABORIGINAL was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OGHAM: if let OGHAM = classObj.OGHAM { @@ -1743,25 +1764,33 @@ extension JavaCharacter { if let MONGOLIAN = classObj.MONGOLIAN { self.init(javaHolder: MONGOLIAN.javaHolder) } else { - fatalError("Enum value MONGOLIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MONGOLIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HIRAGANA: if let HIRAGANA = classObj.HIRAGANA { self.init(javaHolder: HIRAGANA.javaHolder) } else { - fatalError("Enum value HIRAGANA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value HIRAGANA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .KATAKANA: if let KATAKANA = classObj.KATAKANA { self.init(javaHolder: KATAKANA.javaHolder) } else { - fatalError("Enum value KATAKANA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value KATAKANA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BOPOMOFO: if let BOPOMOFO = classObj.BOPOMOFO { self.init(javaHolder: BOPOMOFO.javaHolder) } else { - fatalError("Enum value BOPOMOFO was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value BOPOMOFO was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HAN: if let HAN = classObj.HAN { @@ -1779,7 +1808,9 @@ extension JavaCharacter { if let OLD_ITALIC = classObj.OLD_ITALIC { self.init(javaHolder: OLD_ITALIC.javaHolder) } else { - fatalError("Enum value OLD_ITALIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_ITALIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .GOTHIC: if let GOTHIC = classObj.GOTHIC { @@ -1797,7 +1828,9 @@ extension JavaCharacter { if let INHERITED = classObj.INHERITED { self.init(javaHolder: INHERITED.javaHolder) } else { - fatalError("Enum value INHERITED was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value INHERITED was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .TAGALOG: if let TAGALOG = classObj.TAGALOG { @@ -1821,7 +1854,9 @@ extension JavaCharacter { if let TAGBANWA = classObj.TAGBANWA { self.init(javaHolder: TAGBANWA.javaHolder) } else { - fatalError("Enum value TAGBANWA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value TAGBANWA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .LIMBU: if let LIMBU = classObj.LIMBU { @@ -1839,13 +1874,17 @@ extension JavaCharacter { if let LINEAR_B = classObj.LINEAR_B { self.init(javaHolder: LINEAR_B.javaHolder) } else { - fatalError("Enum value LINEAR_B was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value LINEAR_B was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .UGARITIC: if let UGARITIC = classObj.UGARITIC { self.init(javaHolder: UGARITIC.javaHolder) } else { - fatalError("Enum value UGARITIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value UGARITIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SHAVIAN: if let SHAVIAN = classObj.SHAVIAN { @@ -1875,7 +1914,9 @@ extension JavaCharacter { if let BUGINESE = classObj.BUGINESE { self.init(javaHolder: BUGINESE.javaHolder) } else { - fatalError("Enum value BUGINESE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value BUGINESE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .COPTIC: if let COPTIC = classObj.COPTIC { @@ -1887,61 +1928,81 @@ extension JavaCharacter { if let NEW_TAI_LUE = classObj.NEW_TAI_LUE { self.init(javaHolder: NEW_TAI_LUE.javaHolder) } else { - fatalError("Enum value NEW_TAI_LUE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value NEW_TAI_LUE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .GLAGOLITIC: if let GLAGOLITIC = classObj.GLAGOLITIC { self.init(javaHolder: GLAGOLITIC.javaHolder) } else { - fatalError("Enum value GLAGOLITIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value GLAGOLITIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .TIFINAGH: if let TIFINAGH = classObj.TIFINAGH { self.init(javaHolder: TIFINAGH.javaHolder) } else { - fatalError("Enum value TIFINAGH was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value TIFINAGH was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SYLOTI_NAGRI: if let SYLOTI_NAGRI = classObj.SYLOTI_NAGRI { self.init(javaHolder: SYLOTI_NAGRI.javaHolder) } else { - fatalError("Enum value SYLOTI_NAGRI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SYLOTI_NAGRI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_PERSIAN: if let OLD_PERSIAN = classObj.OLD_PERSIAN { self.init(javaHolder: OLD_PERSIAN.javaHolder) } else { - fatalError("Enum value OLD_PERSIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_PERSIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .KHAROSHTHI: if let KHAROSHTHI = classObj.KHAROSHTHI { self.init(javaHolder: KHAROSHTHI.javaHolder) } else { - fatalError("Enum value KHAROSHTHI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value KHAROSHTHI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BALINESE: if let BALINESE = classObj.BALINESE { self.init(javaHolder: BALINESE.javaHolder) } else { - fatalError("Enum value BALINESE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value BALINESE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .CUNEIFORM: if let CUNEIFORM = classObj.CUNEIFORM { self.init(javaHolder: CUNEIFORM.javaHolder) } else { - fatalError("Enum value CUNEIFORM was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CUNEIFORM was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .PHOENICIAN: if let PHOENICIAN = classObj.PHOENICIAN { self.init(javaHolder: PHOENICIAN.javaHolder) } else { - fatalError("Enum value PHOENICIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PHOENICIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .PHAGS_PA: if let PHAGS_PA = classObj.PHAGS_PA { self.init(javaHolder: PHAGS_PA.javaHolder) } else { - fatalError("Enum value PHAGS_PA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PHAGS_PA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .NKO: if let NKO = classObj.NKO { @@ -1953,7 +2014,9 @@ extension JavaCharacter { if let SUNDANESE = classObj.SUNDANESE { self.init(javaHolder: SUNDANESE.javaHolder) } else { - fatalError("Enum value SUNDANESE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SUNDANESE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BATAK: if let BATAK = classObj.BATAK { @@ -1971,7 +2034,9 @@ extension JavaCharacter { if let OL_CHIKI = classObj.OL_CHIKI { self.init(javaHolder: OL_CHIKI.javaHolder) } else { - fatalError("Enum value OL_CHIKI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OL_CHIKI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .VAI: if let VAI = classObj.VAI { @@ -1983,13 +2048,17 @@ extension JavaCharacter { if let SAURASHTRA = classObj.SAURASHTRA { self.init(javaHolder: SAURASHTRA.javaHolder) } else { - fatalError("Enum value SAURASHTRA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SAURASHTRA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .KAYAH_LI: if let KAYAH_LI = classObj.KAYAH_LI { self.init(javaHolder: KAYAH_LI.javaHolder) } else { - fatalError("Enum value KAYAH_LI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value KAYAH_LI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .REJANG: if let REJANG = classObj.REJANG { @@ -2025,13 +2094,17 @@ extension JavaCharacter { if let TAI_THAM = classObj.TAI_THAM { self.init(javaHolder: TAI_THAM.javaHolder) } else { - fatalError("Enum value TAI_THAM was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value TAI_THAM was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .TAI_VIET: if let TAI_VIET = classObj.TAI_VIET { self.init(javaHolder: TAI_VIET.javaHolder) } else { - fatalError("Enum value TAI_VIET was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value TAI_VIET was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .AVESTAN: if let AVESTAN = classObj.AVESTAN { @@ -2043,13 +2116,17 @@ extension JavaCharacter { if let EGYPTIAN_HIEROGLYPHS = classObj.EGYPTIAN_HIEROGLYPHS { self.init(javaHolder: EGYPTIAN_HIEROGLYPHS.javaHolder) } else { - fatalError("Enum value EGYPTIAN_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value EGYPTIAN_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SAMARITAN: if let SAMARITAN = classObj.SAMARITAN { self.init(javaHolder: SAMARITAN.javaHolder) } else { - fatalError("Enum value SAMARITAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SAMARITAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MANDAIC: if let MANDAIC = classObj.MANDAIC { @@ -2073,43 +2150,57 @@ extension JavaCharacter { if let JAVANESE = classObj.JAVANESE { self.init(javaHolder: JAVANESE.javaHolder) } else { - fatalError("Enum value JAVANESE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value JAVANESE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MEETEI_MAYEK: if let MEETEI_MAYEK = classObj.MEETEI_MAYEK { self.init(javaHolder: MEETEI_MAYEK.javaHolder) } else { - fatalError("Enum value MEETEI_MAYEK was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MEETEI_MAYEK was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .IMPERIAL_ARAMAIC: if let IMPERIAL_ARAMAIC = classObj.IMPERIAL_ARAMAIC { self.init(javaHolder: IMPERIAL_ARAMAIC.javaHolder) } else { - fatalError("Enum value IMPERIAL_ARAMAIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value IMPERIAL_ARAMAIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_SOUTH_ARABIAN: if let OLD_SOUTH_ARABIAN = classObj.OLD_SOUTH_ARABIAN { self.init(javaHolder: OLD_SOUTH_ARABIAN.javaHolder) } else { - fatalError("Enum value OLD_SOUTH_ARABIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_SOUTH_ARABIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .INSCRIPTIONAL_PARTHIAN: if let INSCRIPTIONAL_PARTHIAN = classObj.INSCRIPTIONAL_PARTHIAN { self.init(javaHolder: INSCRIPTIONAL_PARTHIAN.javaHolder) } else { - fatalError("Enum value INSCRIPTIONAL_PARTHIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value INSCRIPTIONAL_PARTHIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .INSCRIPTIONAL_PAHLAVI: if let INSCRIPTIONAL_PAHLAVI = classObj.INSCRIPTIONAL_PAHLAVI { self.init(javaHolder: INSCRIPTIONAL_PAHLAVI.javaHolder) } else { - fatalError("Enum value INSCRIPTIONAL_PAHLAVI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value INSCRIPTIONAL_PAHLAVI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_TURKIC: if let OLD_TURKIC = classObj.OLD_TURKIC { self.init(javaHolder: OLD_TURKIC.javaHolder) } else { - fatalError("Enum value OLD_TURKIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_TURKIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BRAHMI: if let BRAHMI = classObj.BRAHMI { @@ -2127,19 +2218,25 @@ extension JavaCharacter { if let MEROITIC_HIEROGLYPHS = classObj.MEROITIC_HIEROGLYPHS { self.init(javaHolder: MEROITIC_HIEROGLYPHS.javaHolder) } else { - fatalError("Enum value MEROITIC_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MEROITIC_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MEROITIC_CURSIVE: if let MEROITIC_CURSIVE = classObj.MEROITIC_CURSIVE { self.init(javaHolder: MEROITIC_CURSIVE.javaHolder) } else { - fatalError("Enum value MEROITIC_CURSIVE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MEROITIC_CURSIVE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SORA_SOMPENG: if let SORA_SOMPENG = classObj.SORA_SOMPENG { self.init(javaHolder: SORA_SOMPENG.javaHolder) } else { - fatalError("Enum value SORA_SOMPENG was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SORA_SOMPENG was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .CHAKMA: if let CHAKMA = classObj.CHAKMA { @@ -2169,19 +2266,25 @@ extension JavaCharacter { if let CAUCASIAN_ALBANIAN = classObj.CAUCASIAN_ALBANIAN { self.init(javaHolder: CAUCASIAN_ALBANIAN.javaHolder) } else { - fatalError("Enum value CAUCASIAN_ALBANIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CAUCASIAN_ALBANIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .BASSA_VAH: if let BASSA_VAH = classObj.BASSA_VAH { self.init(javaHolder: BASSA_VAH.javaHolder) } else { - fatalError("Enum value BASSA_VAH was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value BASSA_VAH was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .DUPLOYAN: if let DUPLOYAN = classObj.DUPLOYAN { self.init(javaHolder: DUPLOYAN.javaHolder) } else { - fatalError("Enum value DUPLOYAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value DUPLOYAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .ELBASAN: if let ELBASAN = classObj.ELBASAN { @@ -2199,7 +2302,9 @@ extension JavaCharacter { if let PAHAWH_HMONG = classObj.PAHAWH_HMONG { self.init(javaHolder: PAHAWH_HMONG.javaHolder) } else { - fatalError("Enum value PAHAWH_HMONG was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PAHAWH_HMONG was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .KHOJKI: if let KHOJKI = classObj.KHOJKI { @@ -2211,25 +2316,33 @@ extension JavaCharacter { if let LINEAR_A = classObj.LINEAR_A { self.init(javaHolder: LINEAR_A.javaHolder) } else { - fatalError("Enum value LINEAR_A was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value LINEAR_A was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MAHAJANI: if let MAHAJANI = classObj.MAHAJANI { self.init(javaHolder: MAHAJANI.javaHolder) } else { - fatalError("Enum value MAHAJANI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MAHAJANI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MANICHAEAN: if let MANICHAEAN = classObj.MANICHAEAN { self.init(javaHolder: MANICHAEAN.javaHolder) } else { - fatalError("Enum value MANICHAEAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MANICHAEAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MENDE_KIKAKUI: if let MENDE_KIKAKUI = classObj.MENDE_KIKAKUI { self.init(javaHolder: MENDE_KIKAKUI.javaHolder) } else { - fatalError("Enum value MENDE_KIKAKUI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MENDE_KIKAKUI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MODI: if let MODI = classObj.MODI { @@ -2247,37 +2360,49 @@ extension JavaCharacter { if let OLD_NORTH_ARABIAN = classObj.OLD_NORTH_ARABIAN { self.init(javaHolder: OLD_NORTH_ARABIAN.javaHolder) } else { - fatalError("Enum value OLD_NORTH_ARABIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_NORTH_ARABIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .NABATAEAN: if let NABATAEAN = classObj.NABATAEAN { self.init(javaHolder: NABATAEAN.javaHolder) } else { - fatalError("Enum value NABATAEAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value NABATAEAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .PALMYRENE: if let PALMYRENE = classObj.PALMYRENE { self.init(javaHolder: PALMYRENE.javaHolder) } else { - fatalError("Enum value PALMYRENE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PALMYRENE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .PAU_CIN_HAU: if let PAU_CIN_HAU = classObj.PAU_CIN_HAU { self.init(javaHolder: PAU_CIN_HAU.javaHolder) } else { - fatalError("Enum value PAU_CIN_HAU was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PAU_CIN_HAU was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_PERMIC: if let OLD_PERMIC = classObj.OLD_PERMIC { self.init(javaHolder: OLD_PERMIC.javaHolder) } else { - fatalError("Enum value OLD_PERMIC was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_PERMIC was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .PSALTER_PAHLAVI: if let PSALTER_PAHLAVI = classObj.PSALTER_PAHLAVI { self.init(javaHolder: PSALTER_PAHLAVI.javaHolder) } else { - fatalError("Enum value PSALTER_PAHLAVI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value PSALTER_PAHLAVI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SIDDHAM: if let SIDDHAM = classObj.SIDDHAM { @@ -2289,7 +2414,9 @@ extension JavaCharacter { if let KHUDAWADI = classObj.KHUDAWADI { self.init(javaHolder: KHUDAWADI.javaHolder) } else { - fatalError("Enum value KHUDAWADI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value KHUDAWADI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .TIRHUTA: if let TIRHUTA = classObj.TIRHUTA { @@ -2301,7 +2428,9 @@ extension JavaCharacter { if let WARANG_CITI = classObj.WARANG_CITI { self.init(javaHolder: WARANG_CITI.javaHolder) } else { - fatalError("Enum value WARANG_CITI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value WARANG_CITI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .AHOM: if let AHOM = classObj.AHOM { @@ -2313,7 +2442,9 @@ extension JavaCharacter { if let ANATOLIAN_HIEROGLYPHS = classObj.ANATOLIAN_HIEROGLYPHS { self.init(javaHolder: ANATOLIAN_HIEROGLYPHS.javaHolder) } else { - fatalError("Enum value ANATOLIAN_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value ANATOLIAN_HIEROGLYPHS was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HATRAN: if let HATRAN = classObj.HATRAN { @@ -2331,13 +2462,17 @@ extension JavaCharacter { if let OLD_HUNGARIAN = classObj.OLD_HUNGARIAN { self.init(javaHolder: OLD_HUNGARIAN.javaHolder) } else { - fatalError("Enum value OLD_HUNGARIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_HUNGARIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SIGNWRITING: if let SIGNWRITING = classObj.SIGNWRITING { self.init(javaHolder: SIGNWRITING.javaHolder) } else { - fatalError("Enum value SIGNWRITING was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value SIGNWRITING was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .ADLAM: if let ADLAM = classObj.ADLAM { @@ -2349,7 +2484,9 @@ extension JavaCharacter { if let BHAIKSUKI = classObj.BHAIKSUKI { self.init(javaHolder: BHAIKSUKI.javaHolder) } else { - fatalError("Enum value BHAIKSUKI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value BHAIKSUKI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MARCHEN: if let MARCHEN = classObj.MARCHEN { @@ -2379,7 +2516,9 @@ extension JavaCharacter { if let MASARAM_GONDI = classObj.MASARAM_GONDI { self.init(javaHolder: MASARAM_GONDI.javaHolder) } else { - fatalError("Enum value MASARAM_GONDI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MASARAM_GONDI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .NUSHU: if let NUSHU = classObj.NUSHU { @@ -2397,19 +2536,25 @@ extension JavaCharacter { if let ZANABAZAR_SQUARE = classObj.ZANABAZAR_SQUARE { self.init(javaHolder: ZANABAZAR_SQUARE.javaHolder) } else { - fatalError("Enum value ZANABAZAR_SQUARE was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value ZANABAZAR_SQUARE was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .HANIFI_ROHINGYA: if let HANIFI_ROHINGYA = classObj.HANIFI_ROHINGYA { self.init(javaHolder: HANIFI_ROHINGYA.javaHolder) } else { - fatalError("Enum value HANIFI_ROHINGYA was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value HANIFI_ROHINGYA was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_SOGDIAN: if let OLD_SOGDIAN = classObj.OLD_SOGDIAN { self.init(javaHolder: OLD_SOGDIAN.javaHolder) } else { - fatalError("Enum value OLD_SOGDIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_SOGDIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .SOGDIAN: if let SOGDIAN = classObj.SOGDIAN { @@ -2427,7 +2572,9 @@ extension JavaCharacter { if let GUNJALA_GONDI = classObj.GUNJALA_GONDI { self.init(javaHolder: GUNJALA_GONDI.javaHolder) } else { - fatalError("Enum value GUNJALA_GONDI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value GUNJALA_GONDI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .MAKASAR: if let MAKASAR = classObj.MAKASAR { @@ -2439,7 +2586,9 @@ extension JavaCharacter { if let MEDEFAIDRIN = classObj.MEDEFAIDRIN { self.init(javaHolder: MEDEFAIDRIN.javaHolder) } else { - fatalError("Enum value MEDEFAIDRIN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value MEDEFAIDRIN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .ELYMAIC: if let ELYMAIC = classObj.ELYMAIC { @@ -2451,13 +2600,17 @@ extension JavaCharacter { if let NANDINAGARI = classObj.NANDINAGARI { self.init(javaHolder: NANDINAGARI.javaHolder) } else { - fatalError("Enum value NANDINAGARI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value NANDINAGARI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .NYIAKENG_PUACHUE_HMONG: if let NYIAKENG_PUACHUE_HMONG = classObj.NYIAKENG_PUACHUE_HMONG { self.init(javaHolder: NYIAKENG_PUACHUE_HMONG.javaHolder) } else { - fatalError("Enum value NYIAKENG_PUACHUE_HMONG was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value NYIAKENG_PUACHUE_HMONG was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .WANCHO: if let WANCHO = classObj.WANCHO { @@ -2475,37 +2628,49 @@ extension JavaCharacter { if let CHORASMIAN = classObj.CHORASMIAN { self.init(javaHolder: CHORASMIAN.javaHolder) } else { - fatalError("Enum value CHORASMIAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CHORASMIAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .DIVES_AKURU: if let DIVES_AKURU = classObj.DIVES_AKURU { self.init(javaHolder: DIVES_AKURU.javaHolder) } else { - fatalError("Enum value DIVES_AKURU was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value DIVES_AKURU was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .KHITAN_SMALL_SCRIPT: if let KHITAN_SMALL_SCRIPT = classObj.KHITAN_SMALL_SCRIPT { self.init(javaHolder: KHITAN_SMALL_SCRIPT.javaHolder) } else { - fatalError("Enum value KHITAN_SMALL_SCRIPT was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value KHITAN_SMALL_SCRIPT was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .VITHKUQI: if let VITHKUQI = classObj.VITHKUQI { self.init(javaHolder: VITHKUQI.javaHolder) } else { - fatalError("Enum value VITHKUQI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value VITHKUQI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .OLD_UYGHUR: if let OLD_UYGHUR = classObj.OLD_UYGHUR { self.init(javaHolder: OLD_UYGHUR.javaHolder) } else { - fatalError("Enum value OLD_UYGHUR was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value OLD_UYGHUR was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .CYPRO_MINOAN: if let CYPRO_MINOAN = classObj.CYPRO_MINOAN { self.init(javaHolder: CYPRO_MINOAN.javaHolder) } else { - fatalError("Enum value CYPRO_MINOAN was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value CYPRO_MINOAN was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .TANGSA: if let TANGSA = classObj.TANGSA { @@ -2529,7 +2694,9 @@ extension JavaCharacter { if let NAG_MUNDARI = classObj.NAG_MUNDARI { self.init(javaHolder: NAG_MUNDARI.javaHolder) } else { - fatalError("Enum value NAG_MUNDARI was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError( + "Enum value NAG_MUNDARI was unexpectedly nil, please re-run swift-java on the most updated Java class" + ) } case .UNKNOWN: if let UNKNOWN = classObj.UNKNOWN { @@ -2537,15 +2704,15 @@ extension JavaCharacter { } else { fatalError("Enum value UNKNOWN was unexpectedly nil, please re-run swift-java on the most updated Java class") } + } } } - } } extension JavaCharacter.UnicodeScript { @JavaClass("java.lang.Enum$EnumDesc") open class EnumDesc: JavaObject { - @JavaMethod - open override func toString() -> String + @JavaMethod + open override func toString() -> String } } extension JavaClass { diff --git a/Sources/SwiftJava/generated/JavaClass.swift b/Sources/SwiftJava/generated/JavaClass.swift index a1147e3c2..2f5137481 100644 --- a/Sources/SwiftJava/generated/JavaClass.swift +++ b/Sources/SwiftJava/generated/JavaClass.swift @@ -140,11 +140,17 @@ open class JavaClass: JavaObject { } extension JavaClass { @JavaStaticMethod - public func forName(_ arg0: String) throws -> JavaClass! where ObjectType == JavaClass + public func forName(_ arg0: String) throws -> JavaClass! + where ObjectType == JavaClass @JavaStaticMethod - public func forName(_ arg0: String, _ arg1: Bool, _ arg2: JavaClassLoader?) throws -> JavaClass! where ObjectType == JavaClass + public func forName( + _ arg0: String, + _ arg1: Bool, + _ arg2: JavaClassLoader? + ) throws -> JavaClass! where ObjectType == JavaClass @JavaStaticMethod - public func forPrimitiveName(_ arg0: String) -> JavaClass! where ObjectType == JavaClass + public func forPrimitiveName(_ arg0: String) -> JavaClass! + where ObjectType == JavaClass } diff --git a/Sources/SwiftJava/generated/JavaOptional.swift b/Sources/SwiftJava/generated/JavaOptional.swift index f3b7adcab..1a165f07b 100644 --- a/Sources/SwiftJava/generated/JavaOptional.swift +++ b/Sources/SwiftJava/generated/JavaOptional.swift @@ -43,9 +43,11 @@ extension JavaClass { } @JavaStaticMethod - public func ofNullable(_ arg0: JavaObject?) -> JavaOptional! where ObjectType == JavaOptional + public func ofNullable(_ arg0: JavaObject?) -> JavaOptional! + where ObjectType == JavaOptional - public func ofNullableOptional(_ arg0: JavaObject?) -> JavaObject? where ObjectType == JavaOptional { + public func ofNullableOptional(_ arg0: JavaObject?) -> JavaObject? + where ObjectType == JavaOptional { Optional(javaOptional: ofNullable(arg0)) } } diff --git a/Sources/SwiftJava/generated/JavaSet.swift b/Sources/SwiftJava/generated/JavaSet.swift index 5f7c1a1c7..195831cea 100644 --- a/Sources/SwiftJava/generated/JavaSet.swift +++ b/Sources/SwiftJava/generated/JavaSet.swift @@ -50,41 +50,103 @@ public struct JavaSet { } extension JavaClass { @JavaStaticMethod - public func copyOf(_ arg0: JavaCollection?) -> JavaSet! where ObjectType == JavaSet + public func copyOf(_ arg0: JavaCollection?) -> JavaSet! + where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod public func of() -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?, _ arg8: JavaObject?, _ arg9: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject?, + _ arg8: JavaObject?, + _ arg9: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?, _ arg8: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject?, + _ arg8: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod public func of(_ arg0: [JavaObject?]) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject? + ) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod public func of(_ arg0: JavaObject?) -> JavaSet! where ObjectType == JavaSet @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?) -> JavaSet! where ObjectType == JavaSet + public func of(_ arg0: JavaObject?, _ arg1: JavaObject?) -> JavaSet! + where ObjectType == JavaSet } diff --git a/Sources/SwiftJava/generated/JavaString.swift b/Sources/SwiftJava/generated/JavaString.swift index f3372f657..3ef699780 100644 --- a/Sources/SwiftJava/generated/JavaString.swift +++ b/Sources/SwiftJava/generated/JavaString.swift @@ -7,13 +7,23 @@ open class JavaString: JavaObject { @_nonoverride public convenience init(_ arg0: [Int8], _ arg1: String, environment: JNIEnvironment? = nil) throws @JavaMethod - @_nonoverride public convenience init(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32, environment: JNIEnvironment? = nil) + @_nonoverride public convenience init( + _ arg0: [Int8], + _ arg1: Int32, + _ arg2: Int32, + environment: JNIEnvironment? = nil + ) @JavaMethod @_nonoverride public convenience init(_ arg0: [Int8], environment: JNIEnvironment? = nil) @JavaMethod - @_nonoverride public convenience init(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32, environment: JNIEnvironment? = nil) + @_nonoverride public convenience init( + _ arg0: [UInt16], + _ arg1: Int32, + _ arg2: Int32, + environment: JNIEnvironment? = nil + ) @JavaMethod @_nonoverride public convenience init(_ arg0: [UInt16], environment: JNIEnvironment? = nil) @@ -25,16 +35,33 @@ open class JavaString: JavaObject { @_nonoverride public convenience init(environment: JNIEnvironment? = nil) @JavaMethod - @_nonoverride public convenience init(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32, _ arg3: String, environment: JNIEnvironment? = nil) throws + @_nonoverride public convenience init( + _ arg0: [Int8], + _ arg1: Int32, + _ arg2: Int32, + _ arg3: String, + environment: JNIEnvironment? = nil + ) throws @JavaMethod @_nonoverride public convenience init(_ arg0: [Int8], _ arg1: Int32, environment: JNIEnvironment? = nil) @JavaMethod - @_nonoverride public convenience init(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32, _ arg3: Int32, environment: JNIEnvironment? = nil) + @_nonoverride public convenience init( + _ arg0: [Int8], + _ arg1: Int32, + _ arg2: Int32, + _ arg3: Int32, + environment: JNIEnvironment? = nil + ) @JavaMethod - @_nonoverride public convenience init(_ arg0: [Int32], _ arg1: Int32, _ arg2: Int32, environment: JNIEnvironment? = nil) + @_nonoverride public convenience init( + _ arg0: [Int32], + _ arg1: Int32, + _ arg2: Int32, + environment: JNIEnvironment? = nil + ) @JavaMethod open override func equals(_ arg0: JavaObject?) -> Bool diff --git a/Sources/SwiftJava/generated/JavaThread.swift b/Sources/SwiftJava/generated/JavaThread.swift index c71e933b4..f153b1e51 100644 --- a/Sources/SwiftJava/generated/JavaThread.swift +++ b/Sources/SwiftJava/generated/JavaThread.swift @@ -87,92 +87,92 @@ open class JavaThread: JavaObject { extension JavaThread { @JavaInterface("java.lang.Thread$Builder") public struct Builder { - @JavaMethod - public func name(_ arg0: String) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String) -> JavaThread.Builder! - @JavaMethod - public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! - @JavaMethod - public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! + @JavaMethod + public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! - @JavaMethod - public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! + @JavaMethod + public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! } } extension JavaThread.Builder { @JavaInterface("java.lang.Thread$Builder$OfPlatform", extends: JavaThread.Builder.self) public struct OfPlatform { - @JavaMethod - public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! - @JavaMethod - public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func name(_ arg0: String) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String) -> JavaThread.Builder! - @JavaMethod - public func name(_ arg0: String) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func name(_ arg0: String) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func priority(_ arg0: Int32) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func priority(_ arg0: Int32) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func daemon() -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func daemon() -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func daemon(_ arg0: Bool) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func daemon(_ arg0: Bool) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! + @JavaMethod + public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! - @JavaMethod - public func stackSize(_ arg0: Int64) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func stackSize(_ arg0: Int64) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder.OfPlatform! + @JavaMethod + public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder.OfPlatform! - @JavaMethod - public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! + @JavaMethod + public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! } } extension JavaThread.Builder { @JavaInterface("java.lang.Thread$Builder$OfVirtual", extends: JavaThread.Builder.self) public struct OfVirtual { - @JavaMethod - public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder! - @JavaMethod - public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder.OfVirtual! + @JavaMethod + public func name(_ arg0: String, _ arg1: Int64) -> JavaThread.Builder.OfVirtual! - @JavaMethod - public func name(_ arg0: String) -> JavaThread.Builder! + @JavaMethod + public func name(_ arg0: String) -> JavaThread.Builder! - @JavaMethod - public func name(_ arg0: String) -> JavaThread.Builder.OfVirtual! + @JavaMethod + public func name(_ arg0: String) -> JavaThread.Builder.OfVirtual! - @JavaMethod - public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! + @JavaMethod + public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder! - @JavaMethod - public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder.OfVirtual! + @JavaMethod + public func uncaughtExceptionHandler(_ arg0: JavaThread.UncaughtExceptionHandler?) -> JavaThread.Builder.OfVirtual! - @JavaMethod - public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder.OfVirtual! + @JavaMethod + public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder.OfVirtual! - @JavaMethod - public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! + @JavaMethod + public func inheritInheritableThreadLocals(_ arg0: Bool) -> JavaThread.Builder! } } extension JavaThread { @JavaInterface("java.lang.Thread$UncaughtExceptionHandler") public struct UncaughtExceptionHandler { - @JavaMethod - public func uncaughtException(_ arg0: JavaThread?, _ arg1: Throwable?) + @JavaMethod + public func uncaughtException(_ arg0: JavaThread?, _ arg1: Throwable?) } } extension JavaClass { diff --git a/Sources/SwiftJava/generated/List.swift b/Sources/SwiftJava/generated/List.swift index 40c794502..1fb41d5f3 100644 --- a/Sources/SwiftJava/generated/List.swift +++ b/Sources/SwiftJava/generated/List.swift @@ -101,13 +101,23 @@ public struct List { } extension JavaClass { @JavaStaticMethod - public func copyOf(_ arg0: JavaCollection?) -> List! where ObjectType == List + public func copyOf(_ arg0: JavaCollection?) -> List! + where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?) -> List! where ObjectType == List + public func of(_ arg0: JavaObject?, _ arg1: JavaObject?) -> List! + where ObjectType == List @JavaStaticMethod public func of(_ arg0: JavaObject?) -> List! where ObjectType == List @@ -116,26 +126,75 @@ extension JavaClass { public func of() -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?, _ arg8: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject?, + _ arg8: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?) -> List! where ObjectType == List + public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?) -> List! + where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject? + ) -> List! where ObjectType == List @JavaStaticMethod public func of(_ arg0: [JavaObject?]) -> List! where ObjectType == List @JavaStaticMethod - public func of(_ arg0: JavaObject?, _ arg1: JavaObject?, _ arg2: JavaObject?, _ arg3: JavaObject?, _ arg4: JavaObject?, _ arg5: JavaObject?, _ arg6: JavaObject?, _ arg7: JavaObject?, _ arg8: JavaObject?, _ arg9: JavaObject?) -> List! where ObjectType == List + public func of( + _ arg0: JavaObject?, + _ arg1: JavaObject?, + _ arg2: JavaObject?, + _ arg3: JavaObject?, + _ arg4: JavaObject?, + _ arg5: JavaObject?, + _ arg6: JavaObject?, + _ arg7: JavaObject?, + _ arg8: JavaObject?, + _ arg9: JavaObject? + ) -> List! where ObjectType == List } diff --git a/Sources/SwiftJava/generated/OutputStream.swift b/Sources/SwiftJava/generated/OutputStream.swift index 46df2fe68..5659b40ac 100644 --- a/Sources/SwiftJava/generated/OutputStream.swift +++ b/Sources/SwiftJava/generated/OutputStream.swift @@ -6,48 +6,48 @@ open class OutputStream: JavaObject { @JavaMethod @_nonoverride public convenience init(environment: JNIEnvironment? = nil) - /// Java method `flush`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.OutputStream.flush() throws java.io.IOException - /// ``` + /// Java method `flush`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.OutputStream.flush() throws java.io.IOException + /// ``` @JavaMethod open func flush() throws - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.OutputStream.write(byte[]) throws java.io.IOException - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.OutputStream.write(byte[]) throws java.io.IOException + /// ``` @JavaMethod open func write(_ arg0: [Int8]) throws - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.OutputStream.write(byte[],int,int) throws java.io.IOException - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.OutputStream.write(byte[],int,int) throws java.io.IOException + /// ``` @JavaMethod open func write(_ arg0: [Int8], _ arg1: Int32, _ arg2: Int32) throws - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public abstract void java.io.OutputStream.write(int) throws java.io.IOException - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public abstract void java.io.OutputStream.write(int) throws java.io.IOException + /// ``` @JavaMethod open func write(_ arg0: Int32) throws - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.OutputStream.close() throws java.io.IOException - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.OutputStream.close() throws java.io.IOException + /// ``` @JavaMethod open func close() throws } @@ -58,6 +58,6 @@ extension JavaClass { /// ```java /// public static java.io.OutputStream java.io.OutputStream.nullOutputStream() /// ``` -@JavaStaticMethod + @JavaStaticMethod public func nullOutputStream() -> OutputStream! } diff --git a/Sources/SwiftJava/generated/Path.swift b/Sources/SwiftJava/generated/Path.swift index 326c016dd..a98777f54 100644 --- a/Sources/SwiftJava/generated/Path.swift +++ b/Sources/SwiftJava/generated/Path.swift @@ -9,7 +9,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.getName(int) /// ``` -@JavaMethod + @JavaMethod public func getName(_ arg0: Int32) -> Path! /// Java method `equals`. @@ -18,7 +18,7 @@ public struct Path { /// ```java /// public abstract boolean java.nio.file.Path.equals(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod public func equals(_ arg0: JavaObject?) -> Bool /// Java method `toString`. @@ -27,7 +27,7 @@ public struct Path { /// ```java /// public abstract java.lang.String java.nio.file.Path.toString() /// ``` -@JavaMethod + @JavaMethod public func toString() -> String /// Java method `hashCode`. @@ -36,7 +36,7 @@ public struct Path { /// ```java /// public abstract int java.nio.file.Path.hashCode() /// ``` -@JavaMethod + @JavaMethod public func hashCode() -> Int32 /// Java method `compareTo`. @@ -45,7 +45,7 @@ public struct Path { /// ```java /// public default int java.nio.file.Path.compareTo(java.lang.Object) /// ``` -@JavaMethod + @JavaMethod public func compareTo(_ arg0: JavaObject?) -> Int32 /// Java method `compareTo`. @@ -54,7 +54,7 @@ public struct Path { /// ```java /// public abstract int java.nio.file.Path.compareTo(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func compareTo(_ arg0: Path?) -> Int32 /// Java method `startsWith`. @@ -63,7 +63,7 @@ public struct Path { /// ```java /// public abstract boolean java.nio.file.Path.startsWith(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func startsWith(_ arg0: Path?) -> Bool /// Java method `startsWith`. @@ -72,7 +72,7 @@ public struct Path { /// ```java /// public default boolean java.nio.file.Path.startsWith(java.lang.String) /// ``` -@JavaMethod + @JavaMethod public func startsWith(_ arg0: String) -> Bool /// Java method `iterator`. @@ -81,7 +81,7 @@ public struct Path { /// ```java /// public default java.util.Iterator java.nio.file.Path.iterator() /// ``` -@JavaMethod + @JavaMethod public func iterator() -> JavaIterator! /// Java method `endsWith`. @@ -90,7 +90,7 @@ public struct Path { /// ```java /// public default boolean java.nio.file.Path.endsWith(java.lang.String) /// ``` -@JavaMethod + @JavaMethod public func endsWith(_ arg0: String) -> Bool /// Java method `endsWith`. @@ -99,7 +99,7 @@ public struct Path { /// ```java /// public abstract boolean java.nio.file.Path.endsWith(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func endsWith(_ arg0: Path?) -> Bool /// Java method `isAbsolute`. @@ -108,7 +108,7 @@ public struct Path { /// ```java /// public abstract boolean java.nio.file.Path.isAbsolute() /// ``` -@JavaMethod + @JavaMethod public func isAbsolute() -> Bool /// Java method `resolve`. @@ -117,7 +117,7 @@ public struct Path { /// ```java /// public default java.nio.file.Path java.nio.file.Path.resolve(java.lang.String,java.lang.String...) /// ``` -@JavaMethod + @JavaMethod public func resolve(_ arg0: String, _ arg1: [String]) -> Path! /// Java method `resolve`. @@ -126,7 +126,7 @@ public struct Path { /// ```java /// public default java.nio.file.Path java.nio.file.Path.resolve(java.nio.file.Path,java.nio.file.Path...) /// ``` -@JavaMethod + @JavaMethod public func resolve(_ arg0: Path?, _ arg1: [Path?]) -> Path! /// Java method `resolve`. @@ -135,7 +135,7 @@ public struct Path { /// ```java /// public default java.nio.file.Path java.nio.file.Path.resolve(java.lang.String) /// ``` -@JavaMethod + @JavaMethod public func resolve(_ arg0: String) -> Path! /// Java method `resolve`. @@ -144,7 +144,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.resolve(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func resolve(_ arg0: Path?) -> Path! /// Java method `getParent`. @@ -153,7 +153,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.getParent() /// ``` -@JavaMethod + @JavaMethod public func getParent() -> Path! /// Java method `getRoot`. @@ -162,7 +162,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.getRoot() /// ``` -@JavaMethod + @JavaMethod public func getRoot() -> Path! /// Java method `toFile`. @@ -171,7 +171,7 @@ public struct Path { /// ```java /// public default java.io.File java.nio.file.Path.toFile() /// ``` -@JavaMethod + @JavaMethod public func toFile() -> File! /// Java method `getFileName`. @@ -180,7 +180,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.getFileName() /// ``` -@JavaMethod + @JavaMethod public func getFileName() -> Path! /// Java method `normalize`. @@ -189,7 +189,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.normalize() /// ``` -@JavaMethod + @JavaMethod public func normalize() -> Path! /// Java method `relativize`. @@ -198,7 +198,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.relativize(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func relativize(_ arg0: Path?) -> Path! /// Java method `toAbsolutePath`. @@ -207,7 +207,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.toAbsolutePath() /// ``` -@JavaMethod + @JavaMethod public func toAbsolutePath() -> Path! /// Java method `resolveSibling`. @@ -216,7 +216,7 @@ public struct Path { /// ```java /// public default java.nio.file.Path java.nio.file.Path.resolveSibling(java.nio.file.Path) /// ``` -@JavaMethod + @JavaMethod public func resolveSibling(_ arg0: Path?) -> Path! /// Java method `resolveSibling`. @@ -225,7 +225,7 @@ public struct Path { /// ```java /// public default java.nio.file.Path java.nio.file.Path.resolveSibling(java.lang.String) /// ``` -@JavaMethod + @JavaMethod public func resolveSibling(_ arg0: String) -> Path! /// Java method `getNameCount`. @@ -234,7 +234,7 @@ public struct Path { /// ```java /// public abstract int java.nio.file.Path.getNameCount() /// ``` -@JavaMethod + @JavaMethod public func getNameCount() -> Int32 /// Java method `subpath`. @@ -243,7 +243,7 @@ public struct Path { /// ```java /// public abstract java.nio.file.Path java.nio.file.Path.subpath(int,int) /// ``` -@JavaMethod + @JavaMethod public func subpath(_ arg0: Int32, _ arg1: Int32) -> Path! } extension JavaClass { @@ -253,6 +253,6 @@ extension JavaClass { /// ```java /// public static java.nio.file.Path java.nio.file.Path.of(java.lang.String,java.lang.String...) /// ``` -@JavaStaticMethod + @JavaStaticMethod public func of(_ arg0: String, _ arg1: [String]) -> Path! } diff --git a/Sources/SwiftJava/generated/PrintWriter.swift b/Sources/SwiftJava/generated/PrintWriter.swift index 53f92dff3..207f4e81d 100644 --- a/Sources/SwiftJava/generated/PrintWriter.swift +++ b/Sources/SwiftJava/generated/PrintWriter.swift @@ -28,7 +28,12 @@ open class PrintWriter: Writer { @_nonoverride public convenience init(_ arg0: Writer?, _ arg1: Bool, environment: JNIEnvironment? = nil) @JavaMethod - @_nonoverride public convenience init(_ arg0: OutputStream?, _ arg1: Bool, _ arg2: Charset?, environment: JNIEnvironment? = nil) + @_nonoverride public convenience init( + _ arg0: OutputStream?, + _ arg1: Bool, + _ arg2: Charset?, + environment: JNIEnvironment? = nil + ) @JavaMethod @_nonoverride public convenience init(_ arg0: OutputStream?, _ arg1: Bool, environment: JNIEnvironment? = nil) @@ -36,336 +41,336 @@ open class PrintWriter: Writer { @JavaMethod @_nonoverride public convenience init(_ arg0: OutputStream?, environment: JNIEnvironment? = nil) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(double) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(double) + /// ``` @JavaMethod open func println(_ arg0: Double) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(float) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(float) + /// ``` @JavaMethod open func println(_ arg0: Float) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(long) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(long) + /// ``` @JavaMethod open func println(_ arg0: Int64) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(char[]) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(char[]) + /// ``` @JavaMethod open func println(_ arg0: [UInt16]) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(java.lang.String) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(java.lang.String) + /// ``` @JavaMethod open func println(_ arg0: String) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(java.lang.Object) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(java.lang.Object) + /// ``` @JavaMethod open func println(_ arg0: JavaObject?) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println() - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println() + /// ``` @JavaMethod open func println() - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(boolean) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(boolean) + /// ``` @JavaMethod open func println(_ arg0: Bool) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(char) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(char) + /// ``` @JavaMethod open func println(_ arg0: UInt16) - /// Java method `println`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.println(int) - /// ``` + /// Java method `println`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.println(int) + /// ``` @JavaMethod open func println(_ arg0: Int32) - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.PrintWriter.append(java.lang.CharSequence) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.PrintWriter.append(java.lang.CharSequence) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?) throws -> Appendable! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.PrintWriter java.io.PrintWriter.append(char) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.PrintWriter java.io.PrintWriter.append(char) + /// ``` @JavaMethod open override func append(_ arg0: UInt16) -> PrintWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.PrintWriter.append(java.lang.CharSequence,int,int) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.PrintWriter.append(java.lang.CharSequence,int,int) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) throws -> Appendable! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.PrintWriter java.io.PrintWriter.append(java.lang.CharSequence,int,int) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.PrintWriter java.io.PrintWriter.append(java.lang.CharSequence,int,int) + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) -> PrintWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.PrintWriter java.io.PrintWriter.append(java.lang.CharSequence) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.PrintWriter java.io.PrintWriter.append(java.lang.CharSequence) + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?) -> PrintWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.PrintWriter.append(char) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.PrintWriter.append(char) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: UInt16) throws -> Appendable! - /// Java method `flush`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.flush() - /// ``` + /// Java method `flush`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.flush() + /// ``` @JavaMethod open override func flush() - /// Java method `format`. - /// - /// ### Java method signature - /// ```java - /// public java.io.PrintWriter java.io.PrintWriter.format(java.lang.String,java.lang.Object...) - /// ``` + /// Java method `format`. + /// + /// ### Java method signature + /// ```java + /// public java.io.PrintWriter java.io.PrintWriter.format(java.lang.String,java.lang.Object...) + /// ``` @JavaMethod open func format(_ arg0: String, _ arg1: [JavaObject?]) -> PrintWriter! - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(float) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(float) + /// ``` @JavaMethod open func print(_ arg0: Float) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(long) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(long) + /// ``` @JavaMethod open func print(_ arg0: Int64) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(int) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(int) + /// ``` @JavaMethod open func print(_ arg0: Int32) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(char) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(char) + /// ``` @JavaMethod open func print(_ arg0: UInt16) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(boolean) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(boolean) + /// ``` @JavaMethod open func print(_ arg0: Bool) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(java.lang.Object) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(java.lang.Object) + /// ``` @JavaMethod open func print(_ arg0: JavaObject?) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(java.lang.String) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(java.lang.String) + /// ``` @JavaMethod open func print(_ arg0: String) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(char[]) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(char[]) + /// ``` @JavaMethod open func print(_ arg0: [UInt16]) - /// Java method `print`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.print(double) - /// ``` + /// Java method `print`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.print(double) + /// ``` @JavaMethod open func print(_ arg0: Double) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.write(java.lang.String,int,int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.write(java.lang.String,int,int) + /// ``` @JavaMethod open override func write(_ arg0: String, _ arg1: Int32, _ arg2: Int32) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.write(java.lang.String) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.write(java.lang.String) + /// ``` @JavaMethod open override func write(_ arg0: String) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.write(char[]) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.write(char[]) + /// ``` @JavaMethod open override func write(_ arg0: [UInt16]) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.write(int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.write(int) + /// ``` @JavaMethod open override func write(_ arg0: Int32) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.write(char[],int,int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.write(char[],int,int) + /// ``` @JavaMethod open override func write(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.PrintWriter.close() - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.PrintWriter.close() + /// ``` @JavaMethod open override func close() - /// Java method `printf`. - /// - /// ### Java method signature - /// ```java - /// public java.io.PrintWriter java.io.PrintWriter.printf(java.lang.String,java.lang.Object...) - /// ``` + /// Java method `printf`. + /// + /// ### Java method signature + /// ```java + /// public java.io.PrintWriter java.io.PrintWriter.printf(java.lang.String,java.lang.Object...) + /// ``` @JavaMethod open func printf(_ arg0: String, _ arg1: [JavaObject?]) -> PrintWriter! - /// Java method `checkError`. - /// - /// ### Java method signature - /// ```java - /// public boolean java.io.PrintWriter.checkError() - /// ``` + /// Java method `checkError`. + /// + /// ### Java method signature + /// ```java + /// public boolean java.io.PrintWriter.checkError() + /// ``` @JavaMethod open func checkError() -> Bool - /// Java method `setError`. - /// - /// ### Java method signature - /// ```java - /// protected void java.io.PrintWriter.setError() - /// ``` + /// Java method `setError`. + /// + /// ### Java method signature + /// ```java + /// protected void java.io.PrintWriter.setError() + /// ``` @JavaMethod open func setError() - /// Java method `clearError`. - /// - /// ### Java method signature - /// ```java - /// protected void java.io.PrintWriter.clearError() - /// ``` + /// Java method `clearError`. + /// + /// ### Java method signature + /// ```java + /// protected void java.io.PrintWriter.clearError() + /// ``` @JavaMethod open func clearError() } diff --git a/Sources/SwiftJava/generated/StringWriter.swift b/Sources/SwiftJava/generated/StringWriter.swift index f2d30d87c..06ebe082f 100644 --- a/Sources/SwiftJava/generated/StringWriter.swift +++ b/Sources/SwiftJava/generated/StringWriter.swift @@ -9,120 +9,120 @@ open class StringWriter: Writer { @JavaMethod @_nonoverride public convenience init(_ arg0: Int32, environment: JNIEnvironment? = nil) - /// Java method `toString`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.String java.io.StringWriter.toString() - /// ``` + /// Java method `toString`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.String java.io.StringWriter.toString() + /// ``` @JavaMethod open override func toString() -> String - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.StringWriter java.io.StringWriter.append(java.lang.CharSequence,int,int) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.StringWriter java.io.StringWriter.append(java.lang.CharSequence,int,int) + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) -> StringWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.StringWriter java.io.StringWriter.append(char) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.StringWriter java.io.StringWriter.append(char) + /// ``` @JavaMethod open override func append(_ arg0: UInt16) -> StringWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.io.StringWriter java.io.StringWriter.append(java.lang.CharSequence) - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.io.StringWriter java.io.StringWriter.append(java.lang.CharSequence) + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?) -> StringWriter! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.StringWriter.append(java.lang.CharSequence) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.StringWriter.append(java.lang.CharSequence) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?) throws -> Appendable! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.StringWriter.append(java.lang.CharSequence,int,int) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.StringWriter.append(java.lang.CharSequence,int,int) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) throws -> Appendable! - /// Java method `append`. - /// - /// ### Java method signature - /// ```java - /// public java.lang.Appendable java.io.StringWriter.append(char) throws java.io.IOException - /// ``` + /// Java method `append`. + /// + /// ### Java method signature + /// ```java + /// public java.lang.Appendable java.io.StringWriter.append(char) throws java.io.IOException + /// ``` @JavaMethod open override func append(_ arg0: UInt16) throws -> Appendable! - /// Java method `flush`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.flush() - /// ``` + /// Java method `flush`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.flush() + /// ``` @JavaMethod open override func flush() - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.write(char[],int,int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.write(char[],int,int) + /// ``` @JavaMethod open override func write(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.write(java.lang.String,int,int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.write(java.lang.String,int,int) + /// ``` @JavaMethod open override func write(_ arg0: String, _ arg1: Int32, _ arg2: Int32) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.write(java.lang.String) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.write(java.lang.String) + /// ``` @JavaMethod open override func write(_ arg0: String) - /// Java method `write`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.write(int) - /// ``` + /// Java method `write`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.write(int) + /// ``` @JavaMethod open override func write(_ arg0: Int32) - /// Java method `close`. - /// - /// ### Java method signature - /// ```java - /// public void java.io.StringWriter.close() throws java.io.IOException - /// ``` + /// Java method `close`. + /// + /// ### Java method signature + /// ```java + /// public void java.io.StringWriter.close() throws java.io.IOException + /// ``` @JavaMethod open override func close() throws } diff --git a/Sources/SwiftJava/generated/Writer.swift b/Sources/SwiftJava/generated/Writer.swift index 2d61e46ba..7fbce6203 100644 --- a/Sources/SwiftJava/generated/Writer.swift +++ b/Sources/SwiftJava/generated/Writer.swift @@ -9,7 +9,7 @@ open class Writer: JavaObject { /// ```java /// public java.io.Writer java.io.Writer.append(java.lang.CharSequence,int,int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) throws -> Writer! /// Java method `append`. @@ -18,7 +18,7 @@ open class Writer: JavaObject { /// ```java /// public java.io.Writer java.io.Writer.append(char) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: UInt16) throws -> Writer! /// Java method `append`. @@ -27,7 +27,7 @@ open class Writer: JavaObject { /// ```java /// public java.lang.Appendable java.io.Writer.append(java.lang.CharSequence) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: CharSequence?) throws -> Appendable! /// Java method `append`. @@ -36,7 +36,7 @@ open class Writer: JavaObject { /// ```java /// public java.lang.Appendable java.io.Writer.append(char) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: UInt16) throws -> Appendable! /// Java method `append`. @@ -45,7 +45,7 @@ open class Writer: JavaObject { /// ```java /// public java.lang.Appendable java.io.Writer.append(java.lang.CharSequence,int,int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: CharSequence?, _ arg1: Int32, _ arg2: Int32) throws -> Appendable! /// Java method `append`. @@ -54,7 +54,7 @@ open class Writer: JavaObject { /// ```java /// public java.io.Writer java.io.Writer.append(java.lang.CharSequence) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func append(_ arg0: CharSequence?) throws -> Writer! /// Java method `flush`. @@ -63,7 +63,7 @@ open class Writer: JavaObject { /// ```java /// public abstract void java.io.Writer.flush() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func flush() throws /// Java method `write`. @@ -72,7 +72,7 @@ open class Writer: JavaObject { /// ```java /// public void java.io.Writer.write(java.lang.String,int,int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func write(_ arg0: String, _ arg1: Int32, _ arg2: Int32) throws /// Java method `write`. @@ -81,7 +81,7 @@ open class Writer: JavaObject { /// ```java /// public void java.io.Writer.write(int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func write(_ arg0: Int32) throws /// Java method `write`. @@ -90,7 +90,7 @@ open class Writer: JavaObject { /// ```java /// public void java.io.Writer.write(java.lang.String) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func write(_ arg0: String) throws /// Java method `write`. @@ -99,7 +99,7 @@ open class Writer: JavaObject { /// ```java /// public abstract void java.io.Writer.write(char[],int,int) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func write(_ arg0: [UInt16], _ arg1: Int32, _ arg2: Int32) throws /// Java method `write`. @@ -108,7 +108,7 @@ open class Writer: JavaObject { /// ```java /// public void java.io.Writer.write(char[]) throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func write(_ arg0: [UInt16]) throws /// Java method `close`. @@ -117,7 +117,7 @@ open class Writer: JavaObject { /// ```java /// public abstract void java.io.Writer.close() throws java.io.IOException /// ``` -@JavaMethod + @JavaMethod open func close() throws } extension JavaClass { @@ -127,6 +127,6 @@ extension JavaClass { /// ```java /// public static java.io.Writer java.io.Writer.nullWriter() /// ``` -@JavaStaticMethod + @JavaStaticMethod public func nullWriter() -> Writer! } diff --git a/Sources/SwiftJavaConfigurationShared/Configuration.swift b/Sources/SwiftJavaConfigurationShared/Configuration.swift index 93ee97bf0..b68c0d39f 100644 --- a/Sources/SwiftJavaConfigurationShared/Configuration.swift +++ b/Sources/SwiftJavaConfigurationShared/Configuration.swift @@ -73,7 +73,7 @@ public struct Configuration: Codable { public var classpath: String? = nil public var classpathEntries: [String] { - return classpath?.split(separator: ":").map(String.init) ?? [] + classpath?.split(separator: ":").map(String.init) ?? [] } /// The Java classes that should be translated to Swift. The keys are @@ -121,18 +121,20 @@ public struct JavaDependencyDescriptor: Hashable, Codable { let container = try decoder.singleValueContainer() let string = try container.decode(String.self) let parts = string.split(separator: ":") - + if parts.count == 1 && string.hasPrefix(":") { self.groupID = "" self.artifactID = ":" + String(parts.first!) self.version = "" return } - + guard parts.count == 3 else { - throw JavaDependencyDescriptorError(message: "Illegal dependency, did not match: `groupID:artifactID:version`, parts: '\(parts)'") + throw JavaDependencyDescriptorError( + message: "Illegal dependency, did not match: `groupID:artifactID:version`, parts: '\(parts)'" + ) } - + self.groupID = String(parts[0]) self.artifactID = String(parts[1]) self.version = String(parts[2]) @@ -155,14 +157,14 @@ public struct JavaDependencyDescriptor: Hashable, Codable { public func readConfiguration(sourceDir: String, file: String = #fileID, line: UInt = #line) throws -> Configuration? { // Workaround since filePath is macOS 13 let sourcePath = - if sourceDir.hasPrefix("file://") { sourceDir } else { "file://" + sourceDir } + if sourceDir.hasPrefix("file://") { sourceDir } else { "file://" + sourceDir } let configPath = URL(string: sourcePath)!.appendingPathComponent("swift-java.config", isDirectory: false) - + return try readConfiguration(configPath: configPath, file: file, line: line) } /// Read a swift-java.config file at the specified path. -/// +/// /// Configuration is expected to be "JSON-with-comments". /// Specifically "//" comments are allowed and will be trimmed before passing the rest of the config into a standard JSON parser. public func readConfiguration(configPath: URL, file: String = #fileID, line: UInt = #line) throws -> Configuration? { @@ -181,7 +183,12 @@ public func readConfiguration(configPath: URL, file: String = #fileID, line: UIn return try readConfiguration(string: configString, configPath: configPath) } -public func readConfiguration(string: String, configPath: URL?, file: String = #fileID, line: UInt = #line) throws -> Configuration? { +public func readConfiguration( + string: String, + configPath: URL?, + file: String = #fileID, + line: UInt = #line +) throws -> Configuration? { guard let configData = string.data(using: .utf8) else { return nil } @@ -192,10 +199,13 @@ public func readConfiguration(string: String, configPath: URL?, file: String = # return try decoder.decode(Configuration.self, from: configData) } catch { throw ConfigurationError( - message: "Failed to parse SwiftJava configuration at '\(configPath.map({ $0.absoluteURL.description }) ?? "")'! \(#fileID):\(#line)", + message: + "Failed to parse SwiftJava configuration at '\(configPath.map({ $0.absoluteURL.description }) ?? "")'! \(#fileID):\(#line)", error: error, text: string, - file: file, line: line) + file: file, + line: line + ) } } @@ -241,7 +251,7 @@ public func findSwiftJavaClasspaths(in basePath: String = FileManager.default.cu print("[warning][swift-java] Failed to get enumerator for \(baseURL)") return [] } - + for case let fileURL as URL in enumerator { if fileURL.lastPathComponent.hasSuffix(".swift-java.classpath") { print("[debug][swift-java] Constructing classpath with entries from: \(fileURL.path)") @@ -309,7 +319,7 @@ public enum LogLevel: String, ExpressibleByStringLiteral, Codable, Hashable { case warning = "warning" case error = "error" case critical = "critical" - + public init(stringLiteral value: String) { self = LogLevel(rawValue: value) ?? .info } diff --git a/Sources/SwiftJavaConfigurationShared/GradleDependencyParsing.swift b/Sources/SwiftJavaConfigurationShared/GradleDependencyParsing.swift index bd4aada34..53a298920 100644 --- a/Sources/SwiftJavaConfigurationShared/GradleDependencyParsing.swift +++ b/Sources/SwiftJavaConfigurationShared/GradleDependencyParsing.swift @@ -15,7 +15,7 @@ import Foundation // Regex is not sendable yet so we can't cache it in a let -fileprivate var GradleDependencyDescriptorRegex: Regex<(Substring, Substring, Substring, Substring)> { +private var GradleDependencyDescriptorRegex: Regex<(Substring, Substring, Substring, Substring)> { try! Regex(#"^([^:]+):([^:]+):(\d[^:]+)$"#) // TODO: improve the regex to be more precise } @@ -45,4 +45,4 @@ public func parseDependencyDescriptors(_ string: String) -> [JavaDependencyDescr } return parsedDependencies -} \ No newline at end of file +} diff --git a/Sources/SwiftJavaMacros/GenerationMode.swift b/Sources/SwiftJavaMacros/GenerationMode.swift index 2bf9fc4f1..c9a805de2 100644 --- a/Sources/SwiftJavaMacros/GenerationMode.swift +++ b/Sources/SwiftJavaMacros/GenerationMode.swift @@ -66,7 +66,8 @@ enum GenerationMode { // return that. for attribute in attributes { if case .attribute(let attribute) = attribute, - let mode = GenerationMode(attribute: attribute) { + let mode = GenerationMode(attribute: attribute) + { self = mode return } diff --git a/Sources/SwiftJavaMacros/JavaClassMacro.swift b/Sources/SwiftJavaMacros/JavaClassMacro.swift index 1fcbf11fd..d18eb7a19 100644 --- a/Sources/SwiftJavaMacros/JavaClassMacro.swift +++ b/Sources/SwiftJavaMacros/JavaClassMacro.swift @@ -12,10 +12,10 @@ // //===----------------------------------------------------------------------===// +import Foundation // for e.g. replacingOccurrences import SwiftSyntax import SwiftSyntaxBuilder import SwiftSyntaxMacros -import Foundation // for e.g. replacingOccurrences package enum JavaClassMacro {} @@ -79,7 +79,7 @@ extension JavaClassMacro: MemberMacro { } var members: [DeclSyntax] = [] - + // Determine the modifiers to use for the fullJavaClassName member. let fullJavaClassNameMemberModifiers: String switch (isSwiftClass, isJavaLangObject) { @@ -92,7 +92,8 @@ extension JavaClassMacro: MemberMacro { } let classNameAccessSpecifier = isSwiftClass ? "open" : "public" - members.append(""" + members.append( + """ /// The full Java class name for this Swift type. \(raw: classNameAccessSpecifier) \(raw: fullJavaClassNameMemberModifiers) var fullJavaClassName: String { #if os(Android) @@ -106,7 +107,8 @@ extension JavaClassMacro: MemberMacro { // struct wrappers need a JavaSuperclass type. if !isSwiftClass { - members.append(""" + members.append( + """ public typealias JavaSuperclass = \(raw: superclass) """ ) @@ -115,17 +117,20 @@ extension JavaClassMacro: MemberMacro { // If this is for a struct or is the root java.lang.Object class, we need // a javaHolder instance property. if !isSwiftClass || isJavaLangObject { - members.append(""" + members.append( + """ public var javaHolder: JavaObjectHolder """ ) } let requiredModifierOpt = isSwiftClass ? "required " : "" - let initBody: CodeBlockItemSyntax = isSwiftClass && !isJavaLangObject + let initBody: CodeBlockItemSyntax = + isSwiftClass && !isJavaLangObject ? "super.init(javaHolder: javaHolder)" : "self.javaHolder = javaHolder" - members.append(""" + members.append( + """ public \(raw: requiredModifierOpt)init(javaHolder: JavaObjectHolder) { \(initBody) } @@ -133,7 +138,8 @@ extension JavaClassMacro: MemberMacro { ) if !isSwiftClass { - members.append(""" + members.append( + """ /// Casting to ``\(raw: superclass)`` will never be nil because ``\(raw: swiftName)`` extends it. public func `as`(_: \(raw: superclass).Type) -> \(raw: superclass) { return \(raw: superclass)(javaHolder: javaHolder) @@ -172,6 +178,6 @@ extension ClassDeclSyntax { var isJavaLangObject: Bool { // FIXME: This is somewhat of a hack; we could look for // @JavaClass("java.lang.Object") instead. - return name.text == "JavaObject" + name.text == "JavaObject" } } diff --git a/Sources/SwiftJavaMacros/JavaFieldMacro.swift b/Sources/SwiftJavaMacros/JavaFieldMacro.swift index 29eb966ca..30e61c5ee 100644 --- a/Sources/SwiftJavaMacros/JavaFieldMacro.swift +++ b/Sources/SwiftJavaMacros/JavaFieldMacro.swift @@ -52,14 +52,14 @@ extension JavaFieldMacro: AccessorMacro { } let createSetter = - if case .argumentList(let arguments) = node.arguments, - let wrapperIsBoolean = arguments.first(where: { $0.label?.text == "isFinal" })?.expression, + if case .argumentList(let arguments) = node.arguments, + let wrapperIsBoolean = arguments.first(where: { $0.label?.text == "isFinal" })?.expression, let booleanLiteral = wrapperIsBoolean.as(BooleanLiteralExprSyntax.self) - { - booleanLiteral.literal.text == "false" // Create the setter if we are not final - } else { - true - } + { + booleanLiteral.literal.text == "false" // Create the setter if we are not final + } else { + true + } let getter: AccessorDeclSyntax = """ get { self[javaFieldName: \(literal: fieldName), fieldType: \(fieldType).self] } @@ -70,10 +70,10 @@ extension JavaFieldMacro: AccessorMacro { ] let nonmutatingModifier = - (context.lexicalContext.first?.is(ClassDeclSyntax.self) ?? false || - context.lexicalContext.first?.is(ExtensionDeclSyntax.self) ?? false) - ? "" - : "nonmutating " + (context.lexicalContext.first?.is(ClassDeclSyntax.self) ?? false + || context.lexicalContext.first?.is(ExtensionDeclSyntax.self) ?? false) + ? "" + : "nonmutating " if createSetter { let setter: AccessorDeclSyntax = """ diff --git a/Sources/SwiftJavaMacros/JavaMethodMacro.swift b/Sources/SwiftJavaMacros/JavaMethodMacro.swift index 2f7d850ef..9dd2c6365 100644 --- a/Sources/SwiftJavaMacros/JavaMethodMacro.swift +++ b/Sources/SwiftJavaMacros/JavaMethodMacro.swift @@ -73,16 +73,16 @@ extension JavaMethodMacro: BodyMacro { let stringLiteral = element.expression .as(StringLiteralExprSyntax.self), stringLiteral.segments.count == 1, - case let .stringSegment(wrapperName)? = stringLiteral.segments.first { - // TODO: Improve this unwrapping a bit; - // Trim the trailing ! and ? from the type for purposes - // of initializing the type wrapper in the method body - if "\(wrapperName)".hasSuffix("!") || - "\(wrapperName)".hasSuffix("?") { - String("\(wrapperName)".dropLast()) - } else { - "\(wrapperName)" - } + case let .stringSegment(wrapperName)? = stringLiteral.segments.first + { + // TODO: Improve this unwrapping a bit; + // Trim the trailing ! and ? from the type for purposes + // of initializing the type wrapper in the method body + if "\(wrapperName)".hasSuffix("!") || "\(wrapperName)".hasSuffix("?") { + String("\(wrapperName)".dropLast()) + } else { + "\(wrapperName)" + } } else { nil } @@ -92,7 +92,7 @@ extension JavaMethodMacro: BodyMacro { if let returnClause = funcDecl.signature.returnClause { if let genericResultType { // we need to type-erase the signature, because on JVM level generics are erased and we'd otherwise - // form a signature with the "concrete" type, which would not match the real byte-code level signature + // form a signature with the "concrete" type, which would not match the real byte-code level signature // of the method we're trying to call -- which would result in a MethodNotFound exception. ", resultType: /*type-erased:\(genericResultType)*/JavaObject?.self" } else { @@ -214,7 +214,7 @@ extension JavaMethodMacro: BodyMacro { extension FunctionParameterListSyntax { func indexOfParameter(named name: String) -> Index? { - return firstIndex { $0.parameterName?.text == name } + firstIndex { $0.parameterName?.text == name } } } diff --git a/Sources/SwiftJavaRuntimeSupport/_JNIBoxedConversions.swift b/Sources/SwiftJavaRuntimeSupport/_JNIBoxedConversions.swift index ad4572caa..8ffac3468 100644 --- a/Sources/SwiftJavaRuntimeSupport/_JNIBoxedConversions.swift +++ b/Sources/SwiftJavaRuntimeSupport/_JNIBoxedConversions.swift @@ -16,14 +16,46 @@ import CSwiftJavaJNI import SwiftJava public enum _JNIBoxedConversions { - private static let booleanMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(Z)Ljava/lang/Boolean;", isStatic: true) - private static let byteMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(B)Ljava/lang/Byte;", isStatic: true) - private static let charMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(C)Ljava/lang/Character;", isStatic: true) - private static let shortMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(S)Ljava/lang/Short;", isStatic: true) - private static let intMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(I)Ljava/lang/Integer;", isStatic: true) - private static let longMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(J)Ljava/lang/Long;", isStatic: true) - private static let floatMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(F)Ljava/lang/Float;", isStatic: true) - private static let doubleMethod = _JNIMethodIDCache.Method(name: "valueOf", signature: "(D)Ljava/lang/Double;", isStatic: true) + private static let booleanMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(Z)Ljava/lang/Boolean;", + isStatic: true + ) + private static let byteMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(B)Ljava/lang/Byte;", + isStatic: true + ) + private static let charMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(C)Ljava/lang/Character;", + isStatic: true + ) + private static let shortMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(S)Ljava/lang/Short;", + isStatic: true + ) + private static let intMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(I)Ljava/lang/Integer;", + isStatic: true + ) + private static let longMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(J)Ljava/lang/Long;", + isStatic: true + ) + private static let floatMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(F)Ljava/lang/Float;", + isStatic: true + ) + private static let doubleMethod = _JNIMethodIDCache.Method( + name: "valueOf", + signature: "(D)Ljava/lang/Double;", + isStatic: true + ) private static let booleanCache = _JNIMethodIDCache( className: "java/lang/Boolean", @@ -64,7 +96,12 @@ public enum _JNIBoxedConversions { ) public static func box(_ value: jboolean, in env: JNIEnvironment) -> jobject { - env.interface.CallStaticObjectMethodA(env, booleanCache.javaClass, booleanCache.methods[booleanMethod]!, [jvalue(z: value)])! + env.interface.CallStaticObjectMethodA( + env, + booleanCache.javaClass, + booleanCache.methods[booleanMethod]!, + [jvalue(z: value)] + )! } public static func box(_ value: jbyte, in env: JNIEnvironment) -> jobject { @@ -76,7 +113,12 @@ public enum _JNIBoxedConversions { } public static func box(_ value: jshort, in env: JNIEnvironment) -> jobject { - env.interface.CallStaticObjectMethodA(env, shortCache.javaClass, shortCache.methods[shortMethod]!, [jvalue(s: value)])! + env.interface.CallStaticObjectMethodA( + env, + shortCache.javaClass, + shortCache.methods[shortMethod]!, + [jvalue(s: value)] + )! } public static func box(_ value: jint, in env: JNIEnvironment) -> jobject { @@ -88,10 +130,20 @@ public enum _JNIBoxedConversions { } public static func box(_ value: jfloat, in env: JNIEnvironment) -> jobject { - env.interface.CallStaticObjectMethodA(env, floatCache.javaClass, floatCache.methods[floatMethod]!, [jvalue(f: value)])! + env.interface.CallStaticObjectMethodA( + env, + floatCache.javaClass, + floatCache.methods[floatMethod]!, + [jvalue(f: value)] + )! } public static func box(_ value: jdouble, in env: JNIEnvironment) -> jobject { - env.interface.CallStaticObjectMethodA(env, doubleCache.javaClass, doubleCache.methods[doubleMethod]!, [jvalue(d: value)])! + env.interface.CallStaticObjectMethodA( + env, + doubleCache.javaClass, + doubleCache.methods[doubleMethod]!, + [jvalue(d: value)] + )! } } diff --git a/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift b/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift index 48cbaa47b..e5ae1a6f7 100644 --- a/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift +++ b/Sources/SwiftJavaRuntimeSupport/_JNIMethodIDCache.swift @@ -59,9 +59,11 @@ public final class _JNIMethodIDCache: Sendable { guard let jni = JNI.shared else { 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.replacing("/", with: ".") - ) else { + guard + let javaClass = try? jni.applicationClassLoader?.loadClass( + className.replacing("/", with: ".") + ) + else { fatalError("Class \(className) could not be found!") } @@ -75,7 +77,9 @@ public final class _JNIMethodIDCache: Sendable { if let methodID = environment.interface.GetStaticMethodID(environment, clazz, method.name, method.signature) { result[method] = methodID } else { - fatalError("Static method \(method.signature) with signature \(method.signature) not found in class \(className)") + fatalError( + "Static method \(method.signature) with signature \(method.signature) not found in class \(className)" + ) } } else { if let methodID = environment.interface.GetMethodID(environment, clazz, method.name, method.signature) { diff --git a/Sources/SwiftJavaShared/TerminalColors.swift b/Sources/SwiftJavaShared/TerminalColors.swift index a856301f0..8fe470964 100644 --- a/Sources/SwiftJavaShared/TerminalColors.swift +++ b/Sources/SwiftJavaShared/TerminalColors.swift @@ -53,11 +53,11 @@ package enum Rainbow: String { } } -package extension String { - var black: String { +extension String { + package var black: String { self.colored(as: .black) } - func black(if condition: Bool) -> String { + package func black(if condition: Bool) -> String { if condition { self.colored(as: .black) } else { @@ -65,10 +65,10 @@ package extension String { } } - var red: String { + package var red: String { self.colored(as: .red) } - func red(if condition: Bool) -> String { + package func red(if condition: Bool) -> String { if condition { self.colored(as: .red) } else { @@ -76,10 +76,10 @@ package extension String { } } - var green: String { + package var green: String { self.colored(as: .green) } - func green(if condition: Bool) -> String { + package func green(if condition: Bool) -> String { if condition { self.colored(as: .green) } else { @@ -87,10 +87,10 @@ package extension String { } } - var yellow: String { + package var yellow: String { self.colored(as: .yellow) } - func yellow(if condition: Bool) -> String { + package func yellow(if condition: Bool) -> String { if condition { self.colored(as: .yellow) } else { @@ -98,10 +98,10 @@ package extension String { } } - var blue: String { + package var blue: String { self.colored(as: .blue) } - func blue(if condition: Bool) -> String { + package func blue(if condition: Bool) -> String { if condition { self.colored(as: .blue) } else { @@ -109,10 +109,10 @@ package extension String { } } - var magenta: String { + package var magenta: String { self.colored(as: .magenta) } - func magenta(if condition: Bool) -> String { + package func magenta(if condition: Bool) -> String { if condition { self.colored(as: .magenta) } else { @@ -120,10 +120,10 @@ package extension String { } } - var cyan: String { + package var cyan: String { self.colored(as: .cyan) } - func cyan(if condition: Bool) -> String { + package func cyan(if condition: Bool) -> String { if condition { self.colored(as: .cyan) } else { @@ -131,10 +131,10 @@ package extension String { } } - var white: String { + package var white: String { self.colored(as: .white) } - func white(if condition: Bool) -> String { + package func white(if condition: Bool) -> String { if condition { self.colored(as: .white) } else { @@ -142,10 +142,10 @@ package extension String { } } - var bold: String { + package var bold: String { self.colored(as: .bold) } - func bold(if condition: Bool) -> String { + package func bold(if condition: Bool) -> String { if condition { self.colored(as: .bold) } else { @@ -153,12 +153,12 @@ package extension String { } } - var `default`: String { + package var `default`: String { self.colored(as: .default) } - func colored(as color: Rainbow) -> String { - return if isColorSupported { + package func colored(as color: Rainbow) -> String { + if isColorSupported { "\(color.rawValue)\(self)\(Rainbow.default.rawValue)" } else { self @@ -166,49 +166,49 @@ package extension String { } } -package extension Substring { - var black: String { +extension Substring { + package var black: String { self.colored(as: .black) } - var red: String { + package var red: String { self.colored(as: .red) } - var green: String { + package var green: String { self.colored(as: .green) } - var yellow: String { + package var yellow: String { self.colored(as: .yellow) } - var blue: String { + package var blue: String { self.colored(as: .blue) } - var magenta: String { + package var magenta: String { self.colored(as: .magenta) } - var cyan: String { + package var cyan: String { self.colored(as: .cyan) } - var white: String { + package var white: String { self.colored(as: .white) } - var bold: String { + package var bold: String { self.colored(as: .bold) } - var `default`: String { + package var `default`: String { self.colored(as: .default) } - func colored(as color: Rainbow) -> String { - return if isColorSupported { + package func colored(as color: Rainbow) -> String { + if isColorSupported { "\(color.rawValue)\(self)\(Rainbow.default.rawValue)" } else { String(self) diff --git a/Sources/SwiftJavaTool/Commands/ConfigureCommand.swift b/Sources/SwiftJavaTool/Commands/ConfigureCommand.swift index 05bf3b8f3..b41a07b03 100644 --- a/Sources/SwiftJavaTool/Commands/ConfigureCommand.swift +++ b/Sources/SwiftJavaTool/Commands/ConfigureCommand.swift @@ -12,19 +12,19 @@ // //===----------------------------------------------------------------------===// -import Logging import ArgumentParser import Foundation -import SwiftJavaToolLib import JExtractSwiftLib -import SwiftJava -import JavaUtilJar -import JavaNet import JavaLangReflect -import SwiftSyntax -import SwiftSyntaxBuilder +import JavaNet +import JavaUtilJar +import Logging +import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared +import SwiftJavaToolLib +import SwiftSyntax +import SwiftSyntaxBuilder extension SwiftJava { struct ConfigureCommand: SwiftJavaBaseAsyncParsableCommand, HasCommonOptions, HasCommonJVMOptions { @@ -33,18 +33,23 @@ extension SwiftJava { static let configuration = CommandConfiguration( commandName: "configure", - abstract: "Configure and emit a swift-java.config file based on an input dependency or jar file") + abstract: "Configure and emit a swift-java.config file based on an input dependency or jar file" + ) @OptionGroup var commonOptions: SwiftJava.CommonOptions @OptionGroup var commonJVMOptions: SwiftJava.CommonJVMOptions // TODO: This should be a "make wrappers" option that just detects when we give it a jar - @Flag(help: "Specifies that the input is a *.jar file whose public classes will be loaded. The output of swift-java will be a configuration file (swift-java.config) that can be used as input to a subsequent swift-java invocation to generate wrappers for those public classes.") + @Flag( + help: + "Specifies that the input is a *.jar file whose public classes will be loaded. The output of swift-java will be a configuration file (swift-java.config) that can be used as input to a subsequent swift-java invocation to generate wrappers for those public classes." + ) var jar: Bool = false @Option( name: .long, - help: "How to handle an existing swift-java.config; by default 'overwrite' by can be changed to amending a configuration" + help: + "How to handle an existing swift-java.config; by default 'overwrite' by can be changed to amending a configuration" ) var existingConfigFile: ExistingConfigFileMode = .overwrite enum ExistingConfigFileMode: String, ExpressibleByArgument, Codable { @@ -67,7 +72,10 @@ extension SwiftJava { extension SwiftJava.ConfigureCommand { mutating func runSwiftJavaCommand(config: inout Configuration) async throws { let classpathEntries = self.configureCommandJVMClasspath( - searchDirs: [self.effectiveSwiftModuleURL], config: config, log: Self.log) + searchDirs: [self.effectiveSwiftModuleURL], + config: config, + log: Self.log + ) let jvm = try self.makeJVM(classpathEntries: classpathEntries) @@ -108,7 +116,7 @@ extension SwiftJava.ConfigureCommand { if !self.commonOptions.filterInclude.isEmpty { log.debug("Generate Java->Swift type mappings. Active include filters: \(self.commonOptions.filterInclude)") - } else if let filters = config.filterInclude, !filters.isEmpty { + } else if let filters = config.filterInclude, !filters.isEmpty { // take the package filter from the configuration file self.commonOptions.filterInclude = filters } else { @@ -213,8 +221,10 @@ extension SwiftJava.ConfigureCommand { return } - let javaCanonicalName = String(fileName.replacing("/", with: ".") - .dropLast(".class".count)) + let javaCanonicalName = String( + fileName.replacing("/", with: ".") + .dropLast(".class".count) + ) guard SwiftJava.shouldImport(javaCanonicalName: javaCanonicalName, commonOptions: self.commonOptions) else { log.info("Skip importing class: \(javaCanonicalName) due to include/exclude filters") diff --git a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift index 23e7d7ccb..1afd2cc27 100644 --- a/Sources/SwiftJavaTool/Commands/JExtractCommand.swift +++ b/Sources/SwiftJavaTool/Commands/JExtractCommand.swift @@ -12,14 +12,13 @@ // //===----------------------------------------------------------------------===// -import Foundation import ArgumentParser -import SwiftJavaToolLib -import SwiftJava -import JavaUtilJar -import SwiftJavaToolLib +import Foundation import JExtractSwiftLib +import JavaUtilJar +import SwiftJava import SwiftJavaConfigurationShared +import SwiftJavaToolLib /// Extract Java bindings from Swift sources or interface files. /// @@ -35,7 +34,8 @@ extension SwiftJava { struct JExtractCommand: SwiftJavaBaseAsyncParsableCommand, HasCommonOptions { static let configuration = CommandConfiguration( commandName: "jextract", // TODO: wrap-swift? - abstract: "Wrap Swift functions and types with Java bindings, making them available to be called from Java") + abstract: "Wrap Swift functions and types with Java bindings, making them available to be called from Java" + ) @OptionGroup var commonOptions: SwiftJava.CommonOptions @@ -58,28 +58,42 @@ extension SwiftJava { @Option(help: "The directory where generated Java files should be written. Generally used with jextract mode.") var outputJava: String - @Flag(inversion: .prefixedNo, help: "Some build systems require an output to be present when it was 'expected', even if empty. This is used by the JExtractSwiftPlugin build plugin, but otherwise should not be necessary.") + @Flag( + inversion: .prefixedNo, + help: + "Some build systems require an output to be present when it was 'expected', even if empty. This is used by the JExtractSwiftPlugin build plugin, but otherwise should not be necessary." + ) var writeEmptyFiles: Bool? @Option(help: "The lowest access level of Swift declarations that should be extracted, defaults to 'public'.") var minimumInputAccessLevelMode: JExtractMinimumAccessLevelMode? - @Option(help: "The memory management mode to use for the generated code. By default, the user must explicitly provide `SwiftArena` to all calls that require it. By choosing `allowGlobalAutomatic`, user can omit this parameter and a global GC-based arena will be used.") + @Option( + help: + "The memory management mode to use for the generated code. By default, the user must explicitly provide `SwiftArena` to all calls that require it. By choosing `allowGlobalAutomatic`, user can omit this parameter and a global GC-based arena will be used." + ) var memoryManagementMode: JExtractMemoryManagementMode? @Option( help: """ - A swift-java configuration file for a given Swift module name on which this module depends, - e.g., Sources/JavaJar/swift-java.config. There should be one of these options - for each Swift module that this module depends on (transitively) that contains wrapped Java sources. - """ + A swift-java configuration file for a given Swift module name on which this module depends, + e.g., Sources/JavaJar/swift-java.config. There should be one of these options + for each Swift module that this module depends on (transitively) that contains wrapped Java sources. + """ ) var dependsOn: [String] = [] - @Option(help: "The mode to use for extracting asynchronous Swift functions. By default async methods are extracted as Java functions returning CompletableFuture.") + @Option( + help: + "The mode to use for extracting asynchronous Swift functions. By default async methods are extracted as Java functions returning CompletableFuture." + ) var asyncFuncMode: JExtractAsyncFuncMode? - @Flag(inversion: .prefixedNo, help: "By enabling this mode, JExtract will generate Java code that allows you to implement Swift protocols using Java classes. This feature requires disabling the SwiftPM Sandbox (!). This feature is onl supported in 'jni' mode.") + @Flag( + inversion: .prefixedNo, + help: + "By enabling this mode, JExtract will generate Java code that allows you to implement Swift protocols using Java classes. This feature requires disabling the SwiftPM Sandbox (!). This feature is onl supported in 'jni' mode." + ) var enableJavaCallbacks: Bool? @Option(help: "If specified, JExtract will output to this file a list of paths to all generated Java source files") @@ -125,7 +139,9 @@ extension SwiftJava.JExtractCommand { func checkModeCompatibility(config: Configuration) throws { if config.effectiveMode == .ffm { guard config.effectiveMemoryManagementMode == .explicit else { - throw IllegalModeCombinationError("FFM mode does not support '\(self.memoryManagementMode ?? .default)' memory management mode! \(Self.helpMessage())") + throw IllegalModeCombinationError( + "FFM mode does not support '\(self.memoryManagementMode ?? .default)' memory management mode! \(Self.helpMessage())" + ) } if let enableJavaCallbacks = config.enableJavaCallbacks, enableJavaCallbacks { diff --git a/Sources/SwiftJavaTool/Commands/ResolveCommand.swift b/Sources/SwiftJavaTool/Commands/ResolveCommand.swift index de67c9176..e233f535d 100644 --- a/Sources/SwiftJavaTool/Commands/ResolveCommand.swift +++ b/Sources/SwiftJavaTool/Commands/ResolveCommand.swift @@ -14,14 +14,13 @@ import ArgumentParser import Foundation -import SwiftJavaToolLib -import SwiftJava -import Foundation import JavaUtilJar -import SwiftJavaToolLib +import Subprocess +import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared -import Subprocess +import SwiftJavaToolLib + #if canImport(System) import System #else @@ -34,7 +33,8 @@ extension SwiftJava { struct ResolveCommand: SwiftJavaBaseAsyncParsableCommand, HasCommonOptions, HasCommonJVMOptions { static let configuration = CommandConfiguration( commandName: "resolve", - abstract: "Resolve dependencies and write the resulting swift-java.classpath file") + abstract: "Resolve dependencies and write the resulting swift-java.classpath file" + ) @OptionGroup var commonOptions: SwiftJava.CommonOptions @OptionGroup var commonJVMOptions: SwiftJava.CommonJVMOptions @@ -48,10 +48,10 @@ extension SwiftJava { @Argument( help: """ - Additional configuration paths (swift-java.config) files, with defined 'dependencies', \ - or dependency descriptors formatted as 'groupID:artifactID:version' separated by ','. \ - May be empty, in which case the target Swift module's configuration's 'dependencies' will be used. - """ + Additional configuration paths (swift-java.config) files, with defined 'dependencies', \ + or dependency descriptors formatted as 'groupID:artifactID:version' separated by ','. \ + May be empty, in which case the target Swift module's configuration's 'dependencies' will be used. + """ ) var input: String? } @@ -65,13 +65,15 @@ extension SwiftJava.ResolveCommand { var dependenciesToResolve: [JavaDependencyDescriptor] = [] if let input, let inputDependencies = parseDependencyDescriptor(input) { dependenciesToResolve.append(inputDependencies) - } + } if let dependencies = config.dependencies { dependenciesToResolve += dependencies } if dependenciesToResolve.isEmpty { - print("[warn][swift-java] Attempted to 'resolve' dependencies but no dependencies specified in swift-java.config or command input!") + print( + "[warn][swift-java] Attempted to 'resolve' dependencies but no dependencies specified in swift-java.config or command input!" + ) return } @@ -80,26 +82,29 @@ extension SwiftJava.ResolveCommand { // FIXME: disentangle the output directory from SwiftJava and then make it a required option in this Command guard let outputDirectory = self.commonOptions.outputDirectory else { - fatalError("error: Must specify --output-directory in 'resolve' mode! This option will become explicitly required") + fatalError( + "error: Must specify --output-directory in 'resolve' mode! This option will become explicitly required" + ) } try writeSwiftJavaClasspathFile( swiftModule: swiftModule, outputDirectory: outputDirectory, - resolvedClasspath: dependenciesClasspath) + resolvedClasspath: dependenciesClasspath + ) } - /// Resolves Java dependencies from swift-java.config and returns classpath information. - /// + /// /// - Parameters: /// - swiftModule: module name from --swift-module. e.g.: --swift-module MySwiftModule - /// - dependencies: parsed maven-style dependency descriptors (groupId:artifactId:version) + /// - dependencies: parsed maven-style dependency descriptors (groupId:artifactId:version) /// from Sources/MySwiftModule/swift-java.config "dependencies" array. /// - /// - Throws: + /// - Throws: func resolveDependencies( - swiftModule: String, dependencies: [JavaDependencyDescriptor] + swiftModule: String, + dependencies: [JavaDependencyDescriptor] ) async throws -> ResolvedDependencyClasspath { let deps = dependencies.map { $0.descriptionGradleStyle } print("[debug][swift-java] Resolve and fetch dependencies for: \(deps)") @@ -110,7 +115,10 @@ extension SwiftJava.ResolveCommand { let dependenciesClasspath = await resolveDependencies(workDir: workDir, dependencies: dependencies) let classpathEntries = dependenciesClasspath.split(separator: ":") - print("[info][swift-java] Resolved classpath for \(deps.count) dependencies of '\(swiftModule)', classpath entries: \(classpathEntries.count), ", terminator: "") + print( + "[info][swift-java] Resolved classpath for \(deps.count) dependencies of '\(swiftModule)', classpath entries: \(classpathEntries.count), ", + terminator: "" + ) print("done.".green) for entry in classpathEntries { @@ -120,14 +128,13 @@ extension SwiftJava.ResolveCommand { return ResolvedDependencyClasspath(for: dependencies, classpath: dependenciesClasspath) } - /// Resolves maven-style dependencies from swift-java.config under temporary project directory. - /// + /// /// - Parameter dependencies: maven-style dependencies to resolve /// - Returns: Colon-separated classpath func resolveDependencies(workDir: URL, dependencies: [JavaDependencyDescriptor]) async -> String { print("Create directory: \(workDir.absoluteString)") - + let resolverDir: URL do { resolverDir = try createTemporaryDirectory(in: workDir) @@ -140,7 +147,7 @@ extension SwiftJava.ResolveCommand { // We try! because it's easier to track down errors like this than when we bubble up the errors, // and don't get great diagnostics or backtraces due to how swiftpm plugin tools are executed. - + try! copyGradlew(to: resolverDir) try! printGradleProject(directory: resolverDir, dependencies: dependencies) @@ -165,14 +172,18 @@ extension SwiftJava.ResolveCommand { let classpathOutput: String if let found = outString.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) { classpathOutput = String(found) - } else if let found = errString.split(separator: "\n").first(where: { $0.hasPrefix(self.SwiftJavaClasspathPrefix) }) { + } else if let found = errString.split(separator: "\n").first(where: { + $0.hasPrefix(self.SwiftJavaClasspathPrefix) + }) { classpathOutput = String(found) } else { - let suggestDisablingSandbox = "It may be that the Sandbox has prevented dependency fetching, please re-run with '--disable-sandbox'." - fatalError("Gradle output had no SWIFT_JAVA_CLASSPATH! \(suggestDisablingSandbox). \n" + - "Command was: \(CommandLine.arguments.joined(separator: " ").bold)\n" + - "Output was: <<<\(outString)>>>;\n" + - "Err was: <<<\(errString)>>>") + let suggestDisablingSandbox = + "It may be that the Sandbox has prevented dependency fetching, please re-run with '--disable-sandbox'." + fatalError( + "Gradle output had no SWIFT_JAVA_CLASSPATH! \(suggestDisablingSandbox). \n" + + "Command was: \(CommandLine.arguments.joined(separator: " ").bold)\n" + + "Output was: <<<\(outString)>>>;\n" + "Err was: <<<\(errString)>>>" + ) } return String(classpathOutput.dropFirst(SwiftJavaClasspathPrefix.count)) @@ -184,7 +195,8 @@ extension SwiftJava.ResolveCommand { /// Creates Gradle project files (build.gradle, settings.gradle.kts) in temporary directory. func printGradleProject(directory: URL, dependencies: [JavaDependencyDescriptor]) throws { - let buildGradle = directory + let buildGradle = + directory .appendingPathComponent("build.gradle", isDirectory: false) let buildGradleText = @@ -206,7 +218,8 @@ extension SwiftJava.ResolveCommand { """ try buildGradleText.write(to: buildGradle, atomically: true, encoding: .utf8) - let settingsGradle = directory + let settingsGradle = + directory .appendingPathComponent("settings.gradle.kts", isDirectory: false) let settingsGradleText = """ @@ -214,9 +227,9 @@ extension SwiftJava.ResolveCommand { """ try settingsGradleText.write(to: settingsGradle, atomically: true, encoding: .utf8) } - - /// Creates {MySwiftModule}.swift.classpath in the --output-directory. - /// + + /// Creates {MySwiftModule}.swift.classpath in the --output-directory. + /// /// - Parameters: /// - swiftModule: Swift module name for classpath filename (--swift-module value) /// - outputDirectory: Directory path for classpath file (--output-directory value) @@ -225,7 +238,8 @@ extension SwiftJava.ResolveCommand { mutating func writeSwiftJavaClasspathFile( swiftModule: String, outputDirectory: String, - resolvedClasspath: ResolvedDependencyClasspath) throws { + resolvedClasspath: ResolvedDependencyClasspath + ) throws { // Convert the artifact name to a module name // e.g. reactive-streams -> ReactiveStreams @@ -253,7 +267,7 @@ extension SwiftJava.ResolveCommand { // copy gradlew & gradle.bat from root, throws error if there is no gradle setup. func copyGradlew(to resolverWorkDirectory: URL) throws { var searchDir = URL(fileURLWithPath: FileManager.default.currentDirectoryPath) - + while searchDir.pathComponents.count > 1 { let gradlewFile = searchDir.appendingPathComponent("gradlew") let gradlewExists = FileManager.default.fileExists(atPath: gradlewFile.path) @@ -261,29 +275,32 @@ extension SwiftJava.ResolveCommand { searchDir = searchDir.deletingLastPathComponent() continue } - + let gradlewBatFile = searchDir.appendingPathComponent("gradlew.bat") let gradlewBatExists = FileManager.default.fileExists(atPath: gradlewFile.path) - + let gradleDir = searchDir.appendingPathComponent("gradle") let gradleDirExists = FileManager.default.fileExists(atPath: gradleDir.path) guard gradleDirExists else { searchDir = searchDir.deletingLastPathComponent() continue } - + // TODO: gradle.bat as well try? FileManager.default.copyItem( at: gradlewFile, - to: resolverWorkDirectory.appendingPathComponent("gradlew")) + to: resolverWorkDirectory.appendingPathComponent("gradlew") + ) if gradlewBatExists { try? FileManager.default.copyItem( at: gradlewBatFile, - to: resolverWorkDirectory.appendingPathComponent("gradlew.bat")) + to: resolverWorkDirectory.appendingPathComponent("gradlew.bat") + ) } try? FileManager.default.copyItem( at: gradleDir, - to: resolverWorkDirectory.appendingPathComponent("gradle")) + to: resolverWorkDirectory.appendingPathComponent("gradle") + ) return } } @@ -292,7 +309,11 @@ extension SwiftJava.ResolveCommand { let uuid = UUID().uuidString let resolverDirectoryURL = directory.appendingPathComponent("swift-java-dependencies-\(uuid)") - try FileManager.default.createDirectory(at: resolverDirectoryURL, withIntermediateDirectories: true, attributes: nil) + try FileManager.default.createDirectory( + at: resolverDirectoryURL, + withIntermediateDirectories: true, + attributes: nil + ) return resolverDirectoryURL } @@ -319,4 +340,3 @@ struct ResolvedDependencyClasspath: CustomStringConvertible { "JavaClasspath(for: \(rootDependencies), classpath: \(classpath))" } } - diff --git a/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift b/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift index 0ebb81eeb..5cd1bd658 100644 --- a/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift +++ b/Sources/SwiftJavaTool/Commands/WrapJavaCommand.swift @@ -12,13 +12,13 @@ // //===----------------------------------------------------------------------===// -import Foundation import ArgumentParser +import Foundation +import JavaUtilJar import Logging -import SwiftJavaToolLib import SwiftJava -import JavaUtilJar import SwiftJavaConfigurationShared +import SwiftJavaToolLib extension SwiftJava { @@ -28,7 +28,8 @@ extension SwiftJava { static let configuration = CommandConfiguration( commandName: "wrap-java", - abstract: "Wrap Java classes with corresponding Swift bindings.") + abstract: "Wrap Java classes with corresponding Swift bindings." + ) @OptionGroup var commonOptions: SwiftJava.CommonOptions @OptionGroup var commonJVMOptions: SwiftJava.CommonJVMOptions @@ -42,10 +43,10 @@ extension SwiftJava { @Option( help: """ - A swift-java configuration file for a given Swift module name on which this module depends, - e.g., JavaKitJar=Sources/JavaKitJar/swift-java.config. There should be one of these options - for each Swift module that this module depends on (transitively) that contains wrapped Java sources. - """ + A swift-java configuration file for a given Swift module name on which this module depends, + e.g., JavaKitJar=Sources/JavaKitJar/swift-java.config. There should be one of these options + for each Swift module that this module depends on (transitively) that contains wrapped Java sources. + """ ) var dependsOn: [String] = [] @@ -81,7 +82,10 @@ extension SwiftJava.WrapJavaCommand { } var classpathEntries = self.configureCommandJVMClasspath( - searchDirs: classpathSearchDirs, config: config, log: Self.log) + searchDirs: classpathSearchDirs, + config: config, + log: Self.log + ) // Load all of the dependent configurations and associate them with Swift modules. let dependentConfigs = try loadDependentConfigs(dependsOn: self.dependsOn).map { moduleName, config in @@ -94,7 +98,9 @@ extension SwiftJava.WrapJavaCommand { // Include classpath entries which libs we depend on require... for (fromModule, config) in dependentConfigs { - print("[trace][swift-java] Add dependent config (\(fromModule)) classpath elements: \(config.classpathEntries.count)") + print( + "[trace][swift-java] Add dependent config (\(fromModule)) classpath elements: \(config.classpathEntries.count)" + ) // TODO: may need to resolve the dependent configs rather than just get their configs // TODO: We should cache the resolved classpaths as well so we don't do it many times for entry in config.classpathEntries { @@ -115,7 +121,7 @@ extension SwiftJava.WrapJavaCommand { } extension SwiftJava.WrapJavaCommand { - + mutating func generateWrappers( config: Configuration, dependentConfigs: [(String, Configuration)], @@ -205,8 +211,8 @@ extension SwiftJava.WrapJavaCommand { // Find all of the nested classes that weren't explicitly translated already. let nestedAndSuperclassNestedClasses = currentClass.getClasses() // watch out, this includes nested types from superclasses let nestedClasses: [JavaClass] = nestedAndSuperclassNestedClasses.compactMap { nestedClass in - guard let nestedClass else { - return nil + guard let nestedClass else { + return nil } // If this is a local class, we're done. @@ -219,7 +225,9 @@ extension SwiftJava.WrapJavaCommand { // and NOT any of the types contained in the super classes. That would violate our "current class" // nesting, because those are *actually* nested in the other class, not "the current one" (i.e. in a super class). guard javaClassName.hasPrefix(currentClassName) else { - log.trace("Skip super-class nested class '\(javaClassName)', is not member of \(currentClassName). Will be visited independently.") + log.trace( + "Skip super-class nested class '\(javaClassName)', is not member of \(currentClassName). Will be visited independently." + ) return nil } @@ -277,11 +285,11 @@ extension SwiftJava.WrapJavaCommand { let importDecls = translator.getImportDecls() let swiftFileText = """ - // Auto-generated by Java-to-Swift wrapper generator. - \(importDecls.map { $0.description }.joined()) - \(swiftClassDecls.map { $0.description }.joined(separator: "\n")) + // Auto-generated by Java-to-Swift wrapper generator. + \(importDecls.map { $0.description }.joined()) + \(swiftClassDecls.map { $0.description }.joined(separator: "\n")) - """ + """ try writeContents( swiftFileText, @@ -297,18 +305,19 @@ extension SwiftJava.WrapJavaCommand { let importDecls = translator.getImportDecls() let swiftFileText = """ - // Auto-generated by Java-to-Swift wrapper generator. - \(importDecls.map { $0.description }.joined()) - \(swiftClassDecls.map { $0.description }.joined(separator: "\n")) + // Auto-generated by Java-to-Swift wrapper generator. + \(importDecls.map { $0.description }.joined()) + \(swiftClassDecls.map { $0.description }.joined(separator: "\n")) - """ + """ var generatedFileOutputDir = self.actualOutputDirectory if self.swiftMatchPackageDirectoryStructure { generatedFileOutputDir?.append(path: javaClass.getPackageName().replacing(".", with: "/")) } - let swiftFileName = try translator.getSwiftTypeName(javaClass, preferValueTypes: false) + let swiftFileName = + try translator.getSwiftTypeName(javaClass, preferValueTypes: false) .swiftName.replacing(".", with: "+") + ".swift" try writeContents( swiftFileText, @@ -324,12 +333,12 @@ extension SwiftJava.WrapJavaCommand { /// Only look at public and protected methods here. private func shouldExtract(javaClass: JavaClass, config: Configuration) -> Bool { switch config.effectiveMinimumInputAccessLevelMode { - case .internal: - return javaClass.isPublic || javaClass.isProtected || javaClass.isPackage - case .package: - return javaClass.isPublic || javaClass.isProtected || javaClass.isPackage - case .public: - return javaClass.isPublic || javaClass.isProtected + case .internal: + return javaClass.isPublic || javaClass.isProtected || javaClass.isPackage + case .package: + return javaClass.isPublic || javaClass.isProtected || javaClass.isPackage + case .public: + return javaClass.isPublic || javaClass.isProtected } } diff --git a/Sources/SwiftJavaTool/CommonOptions.swift b/Sources/SwiftJavaTool/CommonOptions.swift index 4c48acfe6..18faef4cb 100644 --- a/Sources/SwiftJavaTool/CommonOptions.swift +++ b/Sources/SwiftJavaTool/CommonOptions.swift @@ -14,15 +14,15 @@ import ArgumentParser import Foundation -import SwiftJavaToolLib import JExtractSwiftLib -import SwiftJava -import JavaUtilJar import JavaNet -import SwiftSyntax +import JavaUtilJar import Logging +import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared +import SwiftJavaToolLib +import SwiftSyntax // - MARK: Common Options @@ -35,7 +35,7 @@ extension HasCommonOptions { setting = value } } - + func configure(_ setting: inout [T]?, append value: [T]?) { if let value { if setting == nil { @@ -56,7 +56,10 @@ extension SwiftJava { @Option(name: .shortAndLong, help: "The directory in which to output generated SwiftJava configuration files.") var outputDirectory: String? = nil - @Option(help: "Directory containing Swift files which should be extracted into Java bindings. Also known as 'jextract' mode. Must be paired with --output-java and --output-swift.") + @Option( + help: + "Directory containing Swift files which should be extracted into Java bindings. Also known as 'jextract' mode. Must be paired with --output-java and --output-swift." + ) var inputSwift: String? = nil @Option(name: .shortAndLong, help: "Configure the level of logs that should be printed") @@ -65,7 +68,11 @@ extension SwiftJava { @Option(name: .long, help: "While scanning a classpath, inspect ONLY types included in these packages") var filterInclude: [String] = [] - @Option(name: .long, help: "While scanning a classpath, skip types which match the filter prefix. You can exclude specific methods by using the `com.example.MyClass#method` format.") + @Option( + name: .long, + help: + "While scanning a classpath, skip types which match the filter prefix. You can exclude specific methods by using the `com.example.MyClass#method` format." + ) var filterExclude: [String] = [] @Option(help: "A path to a custom swift-java.config to use") @@ -101,11 +108,16 @@ extension HasCommonJVMOptions { /// swift-java.classpath files as configured. /// Parameters: /// - searchDirs: search directories where we can find swift.java.classpath files to include in the configuration - func configureCommandJVMClasspath(searchDirs: [Foundation.URL], config: Configuration, log: Logging.Logger) -> [String] { + func configureCommandJVMClasspath( + searchDirs: [Foundation.URL], + config: Configuration, + log: Logging.Logger + ) -> [String] { // Form a class path from all of our input sources: // * Command-line option --classpath let classpathOptionEntries: [String] = self.classpathEntries - let classpathFromEnv = ProcessInfo.processInfo.environment["CLASSPATH"]?.split(separator: ":").map(String.init) ?? [] + let classpathFromEnv = + ProcessInfo.processInfo.environment["CLASSPATH"]?.split(separator: ":").map(String.init) ?? [] log.debug("Base classpath from CLASSPATH environment: \(classpathFromEnv)") let classpathFromConfig: [String] = config.classpath?.split(separator: ":").map(String.init) ?? [] log.debug("Base classpath from config: \(classpathFromConfig)") diff --git a/Sources/SwiftJavaTool/ExcludedJDKTypes.swift b/Sources/SwiftJavaTool/ExcludedJDKTypes.swift index 1d24022f5..4d82ecfe6 100644 --- a/Sources/SwiftJavaTool/ExcludedJDKTypes.swift +++ b/Sources/SwiftJavaTool/ExcludedJDKTypes.swift @@ -31,7 +31,7 @@ extension SwiftJava { } } - for exclude in commonOptions.filterExclude { + for exclude in commonOptions.filterExclude { if javaCanonicalName.hasPrefix(exclude) { return false } @@ -39,4 +39,4 @@ extension SwiftJava { return true } -} \ No newline at end of file +} diff --git a/Sources/SwiftJavaTool/Java/JavaClassLoader.swift b/Sources/SwiftJavaTool/Java/JavaClassLoader.swift index 276508855..35d11f5ab 100644 --- a/Sources/SwiftJavaTool/Java/JavaClassLoader.swift +++ b/Sources/SwiftJavaTool/Java/JavaClassLoader.swift @@ -12,10 +12,10 @@ // //===----------------------------------------------------------------------===// -import SwiftJavaToolLib -import SwiftJavaShared import CSwiftJavaJNI import SwiftJava +import SwiftJavaShared +import SwiftJavaToolLib // FIXME: do we need this here or can we rely on the generated one? @JavaClass("java.lang.ClassLoader") @@ -27,4 +27,4 @@ public struct ClassLoader { extension JavaClass { @JavaStaticMethod public func getSystemClassLoader() -> ClassLoader? -} \ No newline at end of file +} diff --git a/Sources/SwiftJavaTool/SwiftJava.swift b/Sources/SwiftJavaTool/SwiftJava.swift index fab4f20b4..65b27b28d 100644 --- a/Sources/SwiftJavaTool/SwiftJava.swift +++ b/Sources/SwiftJavaTool/SwiftJava.swift @@ -14,16 +14,16 @@ import ArgumentParser import Foundation -import SwiftJavaToolLib import JExtractSwiftLib -import SwiftJava -import JavaUtilJar -import JavaNet import JavaLangReflect -import SwiftSyntax -import SwiftSyntaxBuilder +import JavaNet +import JavaUtilJar +import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared +import SwiftJavaToolLib +import SwiftSyntax +import SwiftSyntaxBuilder /// Command-line utility to drive the export of Java classes into Swift types. @main @@ -36,8 +36,9 @@ struct SwiftJava: AsyncParsableCommand { ConfigureCommand.self, ResolveCommand.self, WrapJavaCommand.self, - JExtractCommand.self - ]) + JExtractCommand.self, + ] + ) public static func main() async { do { @@ -99,4 +100,3 @@ extension JavaToSwiftError: CustomStringConvertible { } } } - diff --git a/Sources/SwiftJavaTool/SwiftJavaBaseAsyncParsableCommand.swift b/Sources/SwiftJavaTool/SwiftJavaBaseAsyncParsableCommand.swift index 92818e43a..00a821131 100644 --- a/Sources/SwiftJavaTool/SwiftJavaBaseAsyncParsableCommand.swift +++ b/Sources/SwiftJavaTool/SwiftJavaBaseAsyncParsableCommand.swift @@ -14,17 +14,17 @@ import ArgumentParser import Foundation -import SwiftJavaToolLib import JExtractSwiftLib -import SwiftJava -import JavaUtilJar -import JavaNet import JavaLangReflect -import SwiftSyntax -import SwiftSyntaxBuilder +import JavaNet +import JavaUtilJar +import Logging +import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared -import Logging +import SwiftJavaToolLib +import SwiftSyntax +import SwiftSyntaxBuilder protocol SwiftJavaBaseAsyncParsableCommand: AsyncParsableCommand { @@ -72,7 +72,8 @@ extension SwiftJavaBaseAsyncParsableCommand { _ contents: String, outputDirectory: Foundation.URL?, to filename: String, - description: String) throws { + description: String + ) throws { guard let outputDir = outputDirectory else { print("// \(filename) - \(description)") print(contents) @@ -97,7 +98,6 @@ extension SwiftJavaBaseAsyncParsableCommand { } } - extension SwiftJavaBaseAsyncParsableCommand { var log: Logging.Logger { // FIXME: replace with stored property inside specific commands .init(label: "swift-java") @@ -108,7 +108,7 @@ extension SwiftJavaBaseAsyncParsableCommand { self.commonOptions.logLevel } set { - self.commonOptions.logLevel = newValue + self.commonOptions.logLevel = newValue } } @@ -124,8 +124,8 @@ extension SwiftJavaBaseAsyncParsableCommand { if outputDirectory == "-" { return nil } -// print("[debug][swift-java] Module base directory based on outputDirectory!") -// return URL(fileURLWithPath: outputDirectory) + // print("[debug][swift-java] Module base directory based on outputDirectory!") + // return URL(fileURLWithPath: outputDirectory) } // Put the result into Sources/\(swiftModule). diff --git a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift index f7c4a0939..045266202 100644 --- a/Sources/SwiftJavaToolLib/JavaClassTranslator.swift +++ b/Sources/SwiftJavaToolLib/JavaClassTranslator.swift @@ -12,12 +12,12 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import JavaLangReflect -import SwiftSyntax +import Logging import OrderedCollections +import SwiftJava import SwiftJavaConfigurationShared -import Logging +import SwiftSyntax /// Utility type that translates a single Java class into its corresponding /// Swift type and any additional helper types or functions. @@ -26,7 +26,7 @@ struct JavaClassTranslator { /// needed for translation. let translator: JavaTranslator - var log: Logger { + var log: Logger { translator.log } @@ -91,7 +91,7 @@ struct JavaClassTranslator { /// Whether the Java class we're translating is actually an interface. var isInterface: Bool { - return javaClass.isInterface() + javaClass.isInterface() } /// The name of the enclosing Swift type, if there is one. @@ -163,8 +163,9 @@ struct JavaClassTranslator { self.effectiveJavaSuperclass = javaSuperclass self.swiftSuperclass = SwiftJavaParameterizedType( - name: swiftSuperclassName, - typeArguments: swiftSuperclassTypeArgs) + name: swiftSuperclassName, + typeArguments: swiftSuperclassTypeArgs + ) } else { self.effectiveJavaSuperclass = nil self.swiftSuperclass = nil @@ -208,7 +209,8 @@ struct JavaClassTranslator { } // Gather methods. - let methods = translateAsClass + let methods = + translateAsClass ? javaClass.getDeclaredMethods() : javaClass.getMethods() for method in methods { @@ -221,9 +223,9 @@ struct JavaClassTranslator { // Skip any methods that are expected to be implemented in Swift. We will // visit them in the second pass, over the *declared* methods, because // we want to see non-public methods as well. - let implementedInSwift = method.isNative && - method.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) && - translator.swiftNativeImplementations.contains(javaClass.getName()) + let implementedInSwift = + method.isNative && method.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) + && translator.swiftNativeImplementations.contains(javaClass.getName()) if implementedInSwift { continue } @@ -271,7 +273,7 @@ extension JavaClassTranslator { let className = split.first! let excludedName = split.dropFirst().first! - + self.log.warning("Exclude filter: \(exclude) ||| \(javaClassName) / \(javaMemberName)") if javaClassName.starts(with: className) { @@ -286,12 +288,12 @@ extension JavaClassTranslator { } switch self.translator.config.effectiveMinimumInputAccessLevelMode { - case .internal: - return method.isPublic || method.isProtected || method.isPackage - case .package: - return method.isPublic || method.isProtected || method.isPackage - case .public: - return method.isPublic || method.isProtected + case .internal: + return method.isPublic || method.isProtected || method.isPackage + case .package: + return method.isPublic || method.isProtected || method.isPackage + case .public: + return method.isPublic || method.isProtected } } @@ -299,8 +301,7 @@ extension JavaClassTranslator { private mutating func addField(_ field: Field) { // Don't include inherited fields when translating to a class. // This applies to both instance and static fields to avoid duplicates - if translateAsClass && - !field.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) { + if translateAsClass && !field.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) { return } @@ -361,7 +362,9 @@ extension JavaClassTranslator { do { return try renderField(field) } catch { - translator.logUntranslated("Unable to translate '\(javaClass.getName())' static field '\(field.getName())': \(error)") + translator.logUntranslated( + "Unable to translate '\(javaClass.getName())' static field '\(field.getName())': \(error)" + ) return nil } } @@ -384,7 +387,9 @@ extension JavaClassTranslator { do { return try renderMethod(method, implementedInSwift: false) } catch { - translator.logUntranslated("Unable to translate '\(javaClass.getName())' method '\(method.getName())': \(error)") + translator.logUntranslated( + "Unable to translate '\(javaClass.getName())' method '\(method.getName())': \(error)" + ) return nil } } @@ -399,18 +404,18 @@ extension JavaClassTranslator { let inheritanceClause: String if translateAsClass { extendsClause = "" - inheritanceClause = + inheritanceClause = if let swiftSuperclass, swiftSuperclass.typeArguments.isEmpty { - ": \(swiftSuperclass.name)" + ": \(swiftSuperclass.name)" } else if let swiftSuperclass { - ": \(swiftSuperclass.name)<\(swiftSuperclass.typeArguments.joined(separator: ", "))>" - } else { - "" + ": \(swiftSuperclass.name)<\(swiftSuperclass.typeArguments.joined(separator: ", "))>" + } else { + "" } } else { - extendsClause = + extendsClause = if let swiftSuperclass { - ", extends: \(swiftSuperclass.render()).self" + ", extends: \(swiftSuperclass.render()).self" } else { "" } @@ -426,15 +431,15 @@ extension JavaClassTranslator { interfacesStr = ", \(prefix): \(swiftInterfaces.map { "\($0).self" }.joined(separator: ", "))" } - let genericParameterClause = - if genericParameters.isEmpty { + let genericParameterClause = + if genericParameters.isEmpty { "" } else { "<\(genericParameters.joined(separator: ", "))>" } // Emit the struct declaration describing the java class. - let classOrInterface: String = isInterface ? "JavaInterface" : "JavaClass"; + let classOrInterface: String = isInterface ? "JavaInterface" : "JavaClass" let introducer = translateAsClass ? "open class" : "public struct" var classDecl: DeclSyntax = """ @@ -461,17 +466,19 @@ extension JavaClassTranslator { /// Render any nested classes that will not be rendered separately. func renderNestedClasses() -> [DeclSyntax] { - return nestedClasses + nestedClasses .sorted { $0.getName() < $1.getName() }.compactMap { clazz in - do { - return try translator.translateClass(clazz) - } catch { - translator.logUntranslated("Unable to translate '\(javaClass.getName())' nested class '\(clazz.getName())': \(error)") - return nil - } - }.flatMap(\.self) + do { + return try translator.translateClass(clazz) + } catch { + translator.logUntranslated( + "Unable to translate '\(javaClass.getName())' nested class '\(clazz.getName())': \(error)" + ) + return nil + } + }.flatMap(\.self) } /// Render the extension of JavaClass that collects all of the static @@ -506,12 +513,15 @@ extension JavaClassTranslator { // Translate each static method. do { return try renderMethod( - method, implementedInSwift: /*FIXME:*/false, + method, + implementedInSwift: /*FIXME:*/ false, genericParameters: genericParameters, whereClause: staticMemberWhereClause ) } catch { - translator.logUntranslated("Unable to translate '\(javaClass.getName())' static method '\(method.getName())': \(error)") + translator.logUntranslated( + "Unable to translate '\(javaClass.getName())' static method '\(method.getName())': \(error)" + ) return nil } } @@ -553,7 +563,9 @@ extension JavaClassTranslator { implementedInSwift: true ) } catch { - translator.logUntranslated("Unable to translate '\(javaClass.getName())' method '\(method.getName())': \(error)") + translator.logUntranslated( + "Unable to translate '\(javaClass.getName())' method '\(method.getName())': \(error)" + ) return nil } } @@ -613,7 +625,7 @@ extension JavaClassTranslator { let accessModifier = javaConstructor.isPublic ? "public " : "" let convenienceModifier = translateAsClass ? "convenience " : "" let nonoverrideAttribute = translateAsClass ? "@_nonoverride " : "" - + // FIXME: handle generics in constructors return """ @JavaMethod @@ -666,11 +678,11 @@ extension JavaClassTranslator { method: Method ) -> OrderedSet { var allGenericParameters = OrderedSet(genericParameters) - + let typeParameters = method.getTypeParameters() for typeParameter in typeParameters { guard let typeParameter else { continue } - + guard genericParameterIsUsedInSignature(typeParameter, in: method) else { continue } @@ -690,7 +702,7 @@ extension JavaClassTranslator { ) throws -> DeclSyntax { // Map the generic params on the method. let allGenericParameters = collectMethodGenericParameters(genericParameters: genericParameters, method: javaMethod) - let genericParameterClauseStr = + let genericParameterClauseStr = if allGenericParameters.isEmpty { "" } else { @@ -704,11 +716,11 @@ extension JavaClassTranslator { // Map the result type. let resultTypeStr: String let resultType = try translator.getSwiftReturnTypeNameAsString( - method: javaMethod, - preferValueTypes: true, + method: javaMethod, + preferValueTypes: true, outerOptional: .implicitlyUnwrappedOptional ) - let hasTypeEraseGenericResultType: Bool = + let hasTypeEraseGenericResultType: Bool = isTypeErased(javaMethod.getGenericReturnType()) // FIXME: cleanup the checking here @@ -725,7 +737,7 @@ extension JavaClassTranslator { // --- Handle docs for the generated method. // Include the original Java signature - let docsString = + let docsString = """ /// Java method `\(javaMethod.getName())`. /// @@ -737,45 +749,51 @@ extension JavaClassTranslator { // Compute the parameters for '@...JavaMethod(...)' let methodAttribute: AttributeSyntax - if implementedInSwift { - methodAttribute = "" - } else { - var methodAttributeStr = - if javaMethod.isStatic { - "@JavaStaticMethod" - } else { - "@JavaMethod" - } - // Do we need to record any generic information, in order to enable type-erasure for the upcalls? - var parameters: [String] = [] - // If the method name is "init", we need to explicitly specify it in the annotation - // because "init" is a Swift keyword and will be escaped in the function name via `init` - if javaMethod.getName() == "init" { - parameters.append("\"init\"") - } - if hasTypeEraseGenericResultType { - parameters.append("typeErasedResult: \"\(resultType)\"") - } - // TODO: generic parameters? - - if !parameters.isEmpty { - methodAttributeStr += "(" - methodAttributeStr.append(parameters.joined(separator: ", ")) - methodAttributeStr += ")" + if implementedInSwift { + methodAttribute = "" + } else { + var methodAttributeStr = + if javaMethod.isStatic { + "@JavaStaticMethod" + } else { + "@JavaMethod" } - methodAttributeStr += "\n" - methodAttribute = "\(raw: methodAttributeStr)" + // Do we need to record any generic information, in order to enable type-erasure for the upcalls? + var parameters: [String] = [] + // If the method name is "init", we need to explicitly specify it in the annotation + // because "init" is a Swift keyword and will be escaped in the function name via `init` + if javaMethod.getName() == "init" { + parameters.append("\"init\"") + } + if hasTypeEraseGenericResultType { + parameters.append("typeErasedResult: \"\(resultType)\"") } + // TODO: generic parameters? - let accessModifier = implementedInSwift ? "" - : (javaMethod.isStatic || !translateAsClass) ? "public " - : "open " - let overrideOpt = (translateAsClass && !javaMethod.isStatic && isOverride(javaMethod)) + if !parameters.isEmpty { + methodAttributeStr += "(" + methodAttributeStr.append(parameters.joined(separator: ", ")) + methodAttributeStr += ")" + } + methodAttributeStr += "\n" + methodAttribute = "\(raw: methodAttributeStr)" + } + + let accessModifier = + implementedInSwift + ? "" + : (javaMethod.isStatic || !translateAsClass) + ? "public " + : "open " + let overrideOpt = + (translateAsClass && !javaMethod.isStatic && isOverride(javaMethod)) ? "override " : "" // FIXME: refactor this so we don't have to duplicate the method signatures - if resultType.optionalWrappedType() != nil || parameters.contains(where: { $0.type.trimmedDescription.optionalWrappedType() != nil }) { + if resultType.optionalWrappedType() != nil + || parameters.contains(where: { $0.type.trimmedDescription.optionalWrappedType() != nil }) + { let parameters = parameters.map { param -> (clause: FunctionParameterSyntax, passedArg: String) in let name = param.secondName!.trimmedDescription @@ -787,25 +805,26 @@ extension JavaClassTranslator { } let resultOptional: String = resultType.optionalWrappedType() ?? resultType - let baseBody: ExprSyntax = "\(raw: javaMethod.throwsCheckedException ? "try " : "")\(raw: swiftMethodName)(\(raw: parameters.map(\.passedArg).joined(separator: ", ")))" - let body: ExprSyntax = + let baseBody: ExprSyntax = + "\(raw: javaMethod.throwsCheckedException ? "try " : "")\(raw: swiftMethodName)(\(raw: parameters.map(\.passedArg).joined(separator: ", ")))" + let body: ExprSyntax = if resultType.optionalWrappedType() != nil { "Optional(javaOptional: \(baseBody))" } else { baseBody } - return + return """ \(raw: docsString) \(methodAttribute)\(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftMethodName)\(raw: genericParameterClauseStr)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause) - + \(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftOptionalMethodName)\(raw: genericParameterClauseStr)(\(raw: parameters.map(\.clause.description).joined(separator: ", ")))\(raw: throwsStr) -> \(raw: resultOptional)\(raw: whereClause) { \(body) } """ } else { - return + return """ \(raw: docsString) \(methodAttribute)\(raw: accessModifier)\(raw: overrideOpt)func \(raw: swiftMethodName)\(raw: genericParameterClauseStr)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause) @@ -821,36 +840,37 @@ extension JavaClassTranslator { preferValueTypes: true, outerOptional: .implicitlyUnwrappedOptional ) - let fieldAttribute: AttributeSyntax = javaField.isStatic ? "@JavaStaticField" : "@JavaField"; + let fieldAttribute: AttributeSyntax = javaField.isStatic ? "@JavaStaticField" : "@JavaField" let swiftFieldName = javaField.getName().escapedSwiftName if let optionalType = typeName.optionalWrappedType() { - let setter = if !javaField.isFinal { - """ - - set { - \(swiftFieldName) = newValue.toJavaOptional() + let setter = + if !javaField.isFinal { + """ + + set { + \(swiftFieldName) = newValue.toJavaOptional() + } + """ + } else { + "" } - """ - } else { - "" - } return """ - \(fieldAttribute)(isFinal: \(raw: javaField.isFinal)) - public var \(raw: swiftFieldName): \(raw: typeName) - - - public var \(raw: swiftFieldName)Optional: \(raw: optionalType) { - get { - Optional(javaOptional: \(raw: swiftFieldName)) - }\(raw: setter) - } - """ + \(fieldAttribute)(isFinal: \(raw: javaField.isFinal)) + public var \(raw: swiftFieldName): \(raw: typeName) + + + public var \(raw: swiftFieldName)Optional: \(raw: optionalType) { + get { + Optional(javaOptional: \(raw: swiftFieldName)) + }\(raw: setter) + } + """ } else { return """ - \(fieldAttribute)(isFinal: \(raw: javaField.isFinal)) - public var \(raw: swiftFieldName): \(raw: typeName) - """ + \(fieldAttribute)(isFinal: \(raw: javaField.isFinal)) + public var \(raw: swiftFieldName): \(raw: typeName) + """ } } @@ -860,15 +880,15 @@ extension JavaClassTranslator { } let extensionSyntax: DeclSyntax = """ - public enum \(raw: name): Equatable { - \(raw: enumConstants.map { "case \($0.getName())" }.joined(separator: "\n")) - } - """ + public enum \(raw: name): Equatable { + \(raw: enumConstants.map { "case \($0.getName())" }.joined(separator: "\n")) + } + """ let mappingSyntax: DeclSyntax = """ - public var enumValue: \(raw: name)! { - let classObj = self.javaClass - \(raw: enumConstants.map { + public var enumValue: \(raw: name)! { + let classObj = self.javaClass + \(raw: enumConstants.map { // The equals method takes a java object, so we need to cast it here """ if self.equals(classObj.\($0.getName())?.as(JavaObject.self)) { @@ -876,36 +896,36 @@ extension JavaClassTranslator { } """ }.joined(separator: " else ")) else { - return nil + return nil + } } - } - """ + """ let convenienceModifier = translateAsClass ? "convenience " : "" let initSyntax: DeclSyntax = """ - public \(raw: convenienceModifier)init(_ enumValue: \(raw: name), environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - let classObj = try! JavaClass<\(raw: swiftInnermostTypeName)>(environment: _environment) - switch enumValue { - \(raw: enumConstants.map { - return """ + public \(raw: convenienceModifier)init(_ enumValue: \(raw: name), environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + let classObj = try! JavaClass<\(raw: swiftInnermostTypeName)>(environment: _environment) + switch enumValue { + \(raw: enumConstants.map { + """ case .\($0.getName()): if let \($0.getName()) = classObj.\($0.getName()) { \(translateAsClass ? "self.init(javaHolder: \($0.getName()).javaHolder)" : "self = \($0.getName())") } else { - fatalError("Enum value \($0.getName()) was unexpectedly nil, please re-run swift-java on the most updated Java class") + fatalError("Enum value \($0.getName()) was unexpectedly nil, please re-run swift-java on the most updated Java class") } """ - }.joined(separator: "\n")) + }.joined(separator: "\n")) + } } - } - """ + """ return [extensionSyntax, mappingSyntax, initSyntax] } @@ -935,7 +955,7 @@ extension JavaClassTranslator { private func translateJavaParameters( _ parameters: [Parameter?] ) throws -> [FunctionParameterSyntax] { - return try parameters.compactMap { javaParameter in + try parameters.compactMap { javaParameter in guard let javaParameter else { return nil } let typeName = try translator.getSwiftTypeNameAsString( @@ -1008,8 +1028,11 @@ extension JavaClassTranslator { // If this superclass declares a method with the same parameter types, // we have an override. - guard let overriddenMethod = try currentSuperclassNonOpt - .getDeclaredMethod(method.getName(), method.getParameterTypes()) else { + guard + let overriddenMethod = + try currentSuperclassNonOpt + .getDeclaredMethod(method.getName(), method.getParameterTypes()) + else { continue } @@ -1048,4 +1071,3 @@ extension [Type?] { return true } } - diff --git a/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift b/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift index 1d847276d..087d6969c 100644 --- a/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift +++ b/Sources/SwiftJavaToolLib/JavaGenericsSupport.swift @@ -42,7 +42,7 @@ func getGenericJavaTypeOriginInfo(_ type: Type?, from method: Method) -> [Generi } var methodTypeVars = method.getTypeParameters() - + // TODO: also handle nested classes here... var classTypeVars = method.getDeclaringClass().getTypeParameters() @@ -89,8 +89,8 @@ func isGenericJavaType(_ type: Type?) -> Bool { } /// Check if a type is type-erased att runtime. -/// -/// E.g. in a method returning a generic `T` the T is type erased and must +/// +/// E.g. in a method returning a generic `T` the T is type erased and must /// be represented as a `java.lang.Object` instead. func isTypeErased(_ type: Type?) -> Bool { guard let type else { diff --git a/Sources/SwiftJavaToolLib/JavaHomeSupport.swift b/Sources/SwiftJavaToolLib/JavaHomeSupport.swift index 21a463b41..70671a3bb 100644 --- a/Sources/SwiftJavaToolLib/JavaHomeSupport.swift +++ b/Sources/SwiftJavaToolLib/JavaHomeSupport.swift @@ -50,7 +50,6 @@ public func findJavaHome() -> String { return home } - if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1" && ProcessInfo.processInfo.environment["SPI_BUILD"] == nil { @@ -73,7 +72,7 @@ public func getJavaHomeFromLibexecJavaHome() -> String? { let pipe = Pipe() task.standardOutput = pipe - task.standardError = pipe // Redirect standard error to the same pipe for simplicity + task.standardError = pipe // Redirect standard error to the same pipe for simplicity do { try task.run() @@ -81,7 +80,8 @@ public func getJavaHomeFromLibexecJavaHome() -> String? { let data = pipe.fileHandleForReading.readDataToEndOfFile() let output = String(data: data, encoding: .utf8)?.trimmingCharacters( - in: .whitespacesAndNewlines) + in: .whitespacesAndNewlines + ) if task.terminationStatus == 0 { return output @@ -89,7 +89,9 @@ public func getJavaHomeFromLibexecJavaHome() -> String? { print("java_home terminated with status: \(task.terminationStatus)") // Optionally, log the error output for debugging if let errorOutput = String( - data: pipe.fileHandleForReading.readDataToEndOfFile(), encoding: .utf8) { + data: pipe.fileHandleForReading.readDataToEndOfFile(), + encoding: .utf8 + ) { print("Error output: \(errorOutput)") } return nil @@ -125,13 +127,15 @@ func getJavaHomeFromPath() -> String? { guard task.terminationStatus == 0 else { return nil } let data = pipe.fileHandleForReading.readDataToEndOfFile() - guard let javaPath = String(data: data, encoding: .utf8)? - .trimmingCharacters(in: .whitespacesAndNewlines), + guard + let javaPath = String(data: data, encoding: .utf8)? + .trimmingCharacters(in: .whitespacesAndNewlines), !javaPath.isEmpty else { return nil } let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath() - return resolved + return + resolved .deletingLastPathComponent() .deletingLastPathComponent() .path diff --git a/Sources/SwiftJavaToolLib/JavaParameterizedType.swift b/Sources/SwiftJavaToolLib/JavaParameterizedType.swift index a1b2c6b60..b9b980769 100644 --- a/Sources/SwiftJavaToolLib/JavaParameterizedType.swift +++ b/Sources/SwiftJavaToolLib/JavaParameterizedType.swift @@ -34,5 +34,4 @@ struct SwiftJavaParameterizedType { } } - } diff --git a/Sources/SwiftJavaToolLib/JavaTranslator+Configuration.swift b/Sources/SwiftJavaToolLib/JavaTranslator+Configuration.swift index 655c67650..91957dfa4 100644 --- a/Sources/SwiftJavaToolLib/JavaTranslator+Configuration.swift +++ b/Sources/SwiftJavaToolLib/JavaTranslator+Configuration.swift @@ -23,7 +23,7 @@ extension JavaTranslator { guard let classes = config.classes else { return } - + for (javaClassName, swiftName) in classes { translatedClasses[javaClassName] = SwiftTypeName(module: swiftModule, name: swiftName) } diff --git a/Sources/SwiftJavaToolLib/JavaTranslator+Validation.swift b/Sources/SwiftJavaToolLib/JavaTranslator+Validation.swift index 8071c36ad..397c4f82c 100644 --- a/Sources/SwiftJavaToolLib/JavaTranslator+Validation.swift +++ b/Sources/SwiftJavaToolLib/JavaTranslator+Validation.swift @@ -40,9 +40,9 @@ package struct SwiftTypeName: Hashable, CustomStringConvertible { } } -package extension JavaTranslator { +extension JavaTranslator { - struct SwiftToJavaMapping: Equatable { + package struct SwiftToJavaMapping: Equatable { let swiftType: SwiftTypeName let javaTypes: [JavaFullyQualifiedTypeName] @@ -52,7 +52,7 @@ package extension JavaTranslator { } } - enum ValidationError: Error, CustomStringConvertible { + package enum ValidationError: Error, CustomStringConvertible { case multipleClassesMappedToSameName(swiftToJavaMapping: [SwiftToJavaMapping]) package var description: String { @@ -67,21 +67,26 @@ package extension JavaTranslator { private func mappingDescription(mapping: SwiftToJavaMapping) -> String { let javaTypes = mapping.javaTypes.map { "'\($0)'" }.joined(separator: ", ") - return "Swift module: '\(mapping.swiftType.swiftModule ?? "")', type: '\(mapping.swiftType.swiftType)', Java Types: \(javaTypes)" + return + "Swift module: '\(mapping.swiftType.swiftModule ?? "")', type: '\(mapping.swiftType.swiftType)', Java Types: \(javaTypes)" } } - func validateClassConfiguration() throws(ValidationError) { + package func validateClassConfiguration() throws(ValidationError) { // Group all classes by swift name - let groupedDictionary: [SwiftTypeName: [(JavaFullyQualifiedTypeName, SwiftTypeName)]] = Dictionary(grouping: translatedClasses, by: { - // SwiftTypeName(swiftType: $0.value.swiftType, swiftModule: $0.value.swiftModule) - $0.value - }) + let groupedDictionary: [SwiftTypeName: [(JavaFullyQualifiedTypeName, SwiftTypeName)]] = Dictionary( + grouping: translatedClasses, + by: { + // SwiftTypeName(swiftType: $0.value.swiftType, swiftModule: $0.value.swiftModule) + $0.value + } + ) // Find all that are mapped to multiple names - let multipleClassesMappedToSameName: [SwiftTypeName: [(JavaFullyQualifiedTypeName, SwiftTypeName)]] = groupedDictionary.filter { + let multipleClassesMappedToSameName: [SwiftTypeName: [(JavaFullyQualifiedTypeName, SwiftTypeName)]] = + groupedDictionary.filter { (key: SwiftTypeName, value: [(JavaFullyQualifiedTypeName, SwiftTypeName)]) in - value.count > 1 - } + value.count > 1 + } if !multipleClassesMappedToSameName.isEmpty { // Convert them to swift object and throw diff --git a/Sources/SwiftJavaToolLib/JavaTranslator.swift b/Sources/SwiftJavaToolLib/JavaTranslator.swift index 80b9f1a21..02200f45c 100644 --- a/Sources/SwiftJavaToolLib/JavaTranslator.swift +++ b/Sources/SwiftJavaToolLib/JavaTranslator.swift @@ -12,15 +12,15 @@ // //===----------------------------------------------------------------------===// -import SwiftJava +import Foundation import JavaLangReflect import JavaTypes +import Logging import SwiftBasicFormat -import SwiftSyntax +import SwiftJava import SwiftJavaConfigurationShared +import SwiftSyntax import SwiftSyntaxBuilder -import Foundation -import Logging /// Utility that translates Java classes into Swift source code to access /// those Java classes. @@ -43,7 +43,7 @@ package class JavaTranslator { /// Swift type name and its Swift module. package var translatedClasses: [JavaFullyQualifiedTypeName: SwiftTypeName] = [ "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), - "byte[]": SwiftTypeName(module: nil, name: "[UInt8]") + "byte[]": SwiftTypeName(module: nil, name: "[UInt8]"), ] /// A mapping from the name of each known Java class with the Swift value type @@ -54,7 +54,7 @@ package class JavaTranslator { /// an AnyJavaObject-conforming type) whereas the entry here should map to /// a value type. package let translatedToValueTypes: [JavaFullyQualifiedTypeName: SwiftTypeName] = [ - "java.lang.String": SwiftTypeName(module: "SwiftJava", name: "String"), + "java.lang.String": SwiftTypeName(module: "SwiftJava", name: "String") ] /// The set of Swift modules that need to be imported to make the generated @@ -84,7 +84,7 @@ package class JavaTranslator { self.environment = environment self.translateAsClass = translateAsClass self.format = format - + var l = Logger(label: "swift-java") l.logLevel = .init(rawValue: (config.logLevel ?? .info).rawValue)! self.log = l @@ -139,9 +139,10 @@ extension JavaTranslator { return try getSwiftTypeNameAsString( method: method, - genericReturnType!, - preferValueTypes: preferValueTypes, - outerOptional: outerOptional) + genericReturnType!, + preferValueTypes: preferValueTypes, + outerOptional: outerOptional + ) } /// Turn a Java type into a string. @@ -211,8 +212,13 @@ extension JavaTranslator { let typeArguments: [String] = try parameterizedType.getActualTypeArguments().compactMap { typeArg in guard let typeArg else { return nil } - - let mappedSwiftName = try getSwiftTypeNameAsString(method: method, typeArg, preferValueTypes: false, outerOptional: .nonoptional) + + let mappedSwiftName = try getSwiftTypeNameAsString( + method: method, + typeArg, + preferValueTypes: false, + outerOptional: .nonoptional + ) // FIXME: improve the get instead... if mappedSwiftName == nil || mappedSwiftName == "JavaObject" { @@ -239,7 +245,7 @@ extension JavaTranslator { let (swiftName, isOptional) = try getSwiftTypeName(javaClass, preferValueTypes: preferValueTypes) let resultString = if isOptional { - outerOptional.adjustTypeName(swiftName) + outerOptional.adjustTypeName(swiftName) } else { swiftName } @@ -276,7 +282,7 @@ extension JavaTranslator { if preferValueTypes, let translatedValueType = translatedToValueTypes[name] { // Note that we need to import this Swift module. if translatedValueType.swiftModule != swiftModuleName { - guard let module = translatedValueType.swiftModule else { + guard let module = translatedValueType.swiftModule else { preconditionFailure("Translated value type must have Swift module, but was nil! Type: \(translatedValueType)") } importedSwiftModules.insert(module) @@ -308,7 +314,7 @@ extension JavaTranslator { /// can produce multiple declarations, such as a separate extension of /// JavaClass to house static methods. package func translateClass(_ javaClass: JavaClass) throws -> [DeclSyntax] { - return try JavaClassTranslator(javaClass: javaClass, translator: self).render() + try JavaClassTranslator(javaClass: javaClass, translator: self).render() } } diff --git a/Sources/SwiftJavaToolLib/JavaType+Equality.swift b/Sources/SwiftJavaToolLib/JavaType+Equality.swift index b3d4a37a4..88a1840c3 100644 --- a/Sources/SwiftJavaToolLib/JavaType+Equality.swift +++ b/Sources/SwiftJavaToolLib/JavaType+Equality.swift @@ -12,26 +12,28 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import JavaLangReflect -import SwiftSyntax -import SwiftJavaConfigurationShared import Logging +import SwiftJava +import SwiftJavaConfigurationShared +import SwiftSyntax extension Type { /// Adjust the given type to use its bounds, mirroring what we do in /// mapping Java types into Swift. func adjustToJavaBounds(adjusted: inout Bool) -> Type { if let typeVariable = self.as(TypeVariable.self), - typeVariable.getBounds().count == 1, - let bound = typeVariable.getBounds()[0] { + typeVariable.getBounds().count == 1, + let bound = typeVariable.getBounds()[0] + { adjusted = true return bound } if let wildcardType = self.as(WildcardType.self), wildcardType.getUpperBounds().count == 1, - let bound = wildcardType.getUpperBounds()[0] { + let bound = wildcardType.getUpperBounds()[0] + { adjusted = true return bound } @@ -56,20 +58,23 @@ extension Type { // If both are classes, check for equivalence. if let selfClass = self.as(JavaClass.self), - let otherClass = other.as(JavaClass.self) { + let otherClass = other.as(JavaClass.self) + { return selfClass.equals(otherClass.as(JavaObject.self)) } // If both are arrays, check that their component types are equivalent. if let selfArray = self.as(GenericArrayType.self), - let otherArray = other.as(GenericArrayType.self) { + let otherArray = other.as(GenericArrayType.self) + { return selfArray.getGenericComponentType().isEqualTo(otherArray.getGenericComponentType()) } // If both are parameterized types, check their raw type and type // arguments for equivalence. if let selfParameterizedType = self.as(ParameterizedType.self), - let otherParameterizedType = other.as(ParameterizedType.self) { + let otherParameterizedType = other.as(ParameterizedType.self) + { if !selfParameterizedType.getRawType().isEqualTo(otherParameterizedType.getRawType()) { return false } @@ -81,15 +86,17 @@ extension Type { // If both are type variables, compare their bounds. // FIXME: This is a hack. if let selfTypeVariable = self.as(TypeVariable.self), - let otherTypeVariable = other.as(TypeVariable.self) { + let otherTypeVariable = other.as(TypeVariable.self) + { return selfTypeVariable.getBounds().allTypesEqual(otherTypeVariable.getBounds()) } // If both are wildcards, compare their upper and lower bounds. if let selfWildcard = self.as(WildcardType.self), - let otherWildcard = other.as(WildcardType.self) { + let otherWildcard = other.as(WildcardType.self) + { return selfWildcard.getUpperBounds().allTypesEqual(otherWildcard.getUpperBounds()) - && selfWildcard.getLowerBounds().allTypesEqual(otherWildcard.getLowerBounds()) + && selfWildcard.getLowerBounds().allTypesEqual(otherWildcard.getLowerBounds()) } return false @@ -112,7 +119,8 @@ extension Type { // If both are classes, check for subclassing. if let selfClass = self.as(JavaClass.self), - let otherClass = other.as(JavaClass.self) { + let otherClass = other.as(JavaClass.self) + { // If either is a Java array, then this cannot be a subtype relationship // in Swift. if selfClass.isArray() || otherClass.isArray() { @@ -124,9 +132,11 @@ extension Type { // Anything object-like is a subclass of java.lang.Object if let otherClass = other.as(JavaClass.self), - otherClass.getName() == "java.lang.Object" { - if self.is(GenericArrayType.self) || self.is(ParameterizedType.self) || - self.is(WildcardType.self) || self.is(TypeVariable.self) { + otherClass.getName() == "java.lang.Object" + { + if self.is(GenericArrayType.self) || self.is(ParameterizedType.self) || self.is(WildcardType.self) + || self.is(TypeVariable.self) + { return true } } diff --git a/Sources/SwiftJavaToolLib/MethodVariance.swift b/Sources/SwiftJavaToolLib/MethodVariance.swift index c130a75c9..e2601d5bd 100644 --- a/Sources/SwiftJavaToolLib/MethodVariance.swift +++ b/Sources/SwiftJavaToolLib/MethodVariance.swift @@ -11,8 +11,9 @@ // SPDX-License-Identifier: Apache-2.0 // //===----------------------------------------------------------------------===// -import SwiftJava + import JavaLangReflect +import SwiftJava /// Captures the relationship between two methods by comparing their parameter /// and result types. @@ -37,9 +38,9 @@ enum MethodVariance { init(_ first: Method, _ second: Method) { // If there are obvious differences, note that these are unrelated. - if first.getName() != second.getName() || - first.isStatic != second.isStatic || - first.getParameterCount() != second.getParameterCount() { + if first.getName() != second.getName() || first.isStatic != second.isStatic + || first.getParameterCount() != second.getParameterCount() + { self = .unrelated return } diff --git a/Sources/SwiftJavaToolLib/StringExtras.swift b/Sources/SwiftJavaToolLib/StringExtras.swift index c3ac5390f..37cf4ffae 100644 --- a/Sources/SwiftJavaToolLib/StringExtras.swift +++ b/Sources/SwiftJavaToolLib/StringExtras.swift @@ -42,7 +42,7 @@ extension String { /// Replace all occurrences of one character in the string with another. public func replacing(_ character: Character, with replacement: Character) -> String { - return replacingOccurrences(of: String(character), with: String(replacement)) + replacingOccurrences(of: String(character), with: String(replacement)) } public func optionalWrappedType() -> String? { diff --git a/Sources/SwiftRuntimeFunctions/SwiftRuntimeFunctions.swift b/Sources/SwiftRuntimeFunctions/SwiftRuntimeFunctions.swift index 577617077..f083232b9 100644 --- a/Sources/SwiftRuntimeFunctions/SwiftRuntimeFunctions.swift +++ b/Sources/SwiftRuntimeFunctions/SwiftRuntimeFunctions.swift @@ -32,7 +32,6 @@ public func _swiftjava_swift_retainCount(object: UnsafeMutableRawPointer) -> Int @_silgen_name("swift_isUniquelyReferenced") public func _swiftjava_swift_isUniquelyReferenced(object: UnsafeMutableRawPointer) -> Bool - @_alwaysEmitIntoClient @_transparent func _swiftjava_withHeapObject( of object: AnyObject, diff --git a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift index c6d05bfc3..30cd617c6 100644 --- a/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift +++ b/Tests/JExtractSwiftTests/Asserts/TextAssertions.swift @@ -13,8 +13,9 @@ //===----------------------------------------------------------------------===// import JExtractSwiftLib -import Testing import SwiftJavaConfigurationShared +import Testing + import struct Foundation.CharacterSet enum RenderKind { @@ -92,12 +93,12 @@ func assertOutput( var matchingOutputOffset: Int? = nil let expectedInitialMatchingLines = expectedLines[0.. (lineOffset+detectChunkByInitialLines) { - let textLinesAtOffset = gotLines[lineOffset.. (lineOffset + detectChunkByInitialLines) { + let textLinesAtOffset = gotLines[lineOffset.. [UInt8] """ - + var config = Configuration() config.logLevel = .trace - + + try assertOutput( + input: text, + mode, + .java, + expectedChunks: expectedJavaChunks + ) + try assertOutput( - input: text, - mode, .java, - expectedChunks: expectedJavaChunks) - - try assertOutput( - input: text, - mode, .swift, - expectedChunks: expectedSwiftChunks) + input: text, + mode, + .swift, + expectedChunks: expectedSwiftChunks + ) } -} \ No newline at end of file +} diff --git a/Tests/JExtractSwiftTests/CTypeTests.swift b/Tests/JExtractSwiftTests/CTypeTests.swift index a2339e34a..1f7574aa8 100644 --- a/Tests/JExtractSwiftTests/CTypeTests.swift +++ b/Tests/JExtractSwiftTests/CTypeTests.swift @@ -54,7 +54,7 @@ struct CTypeTests { type: .integral(.signed(bits: 8)) ) ) - ) + ), ], isVariadic: true ) @@ -100,7 +100,7 @@ struct CTypeTests { .qualified(const: false, volatile: true, type: .void) ) ) - ) + ) #expect(ptrptr.description == "volatile void *const *") } } diff --git a/Tests/JExtractSwiftTests/ClassPrintingTests.swift b/Tests/JExtractSwiftTests/ClassPrintingTests.swift index 12b11d387..6162d0e3e 100644 --- a/Tests/JExtractSwiftTests/ClassPrintingTests.swift +++ b/Tests/JExtractSwiftTests/ClassPrintingTests.swift @@ -41,19 +41,25 @@ struct ClassPrintingTests { @Test("Import: class layout") func class_layout() throws { - try assertOutput(input: class_interfaceFile, .ffm, .java, swiftModuleName: "__FakeModule", expectedChunks: [ - """ - public static final SwiftAnyType TYPE_METADATA = - new SwiftAnyType(SwiftRuntime.swiftjava.getType("__FakeModule", "MySwiftClass")); - public final SwiftAnyType $swiftType() { - return TYPE_METADATA; - } - - public static final GroupLayout $LAYOUT = (GroupLayout) SwiftValueWitnessTable.layoutOfSwiftType(TYPE_METADATA.$memorySegment()); - public final GroupLayout $layout() { - return $LAYOUT; - } - """ - ]) + try assertOutput( + input: class_interfaceFile, + .ffm, + .java, + swiftModuleName: "__FakeModule", + expectedChunks: [ + """ + public static final SwiftAnyType TYPE_METADATA = + new SwiftAnyType(SwiftRuntime.swiftjava.getType("__FakeModule", "MySwiftClass")); + public final SwiftAnyType $swiftType() { + return TYPE_METADATA; + } + + public static final GroupLayout $LAYOUT = (GroupLayout) SwiftValueWitnessTable.layoutOfSwiftType(TYPE_METADATA.$memorySegment()); + public final GroupLayout $layout() { + return $LAYOUT; + } + """ + ] + ) } } diff --git a/Tests/JExtractSwiftTests/DataImportTests.swift b/Tests/JExtractSwiftTests/DataImportTests.swift index 111076c20..45c73b765 100644 --- a/Tests/JExtractSwiftTests/DataImportTests.swift +++ b/Tests/JExtractSwiftTests/DataImportTests.swift @@ -17,16 +17,16 @@ import Testing final class DataImportTests { private static let ifConfigImport = """ - #if canImport(FoundationEssentials) - import FoundationEssentials - #else - import Foundation - #endif - """ + #if canImport(FoundationEssentials) + import FoundationEssentials + #else + import Foundation + #endif + """ private static let foundationData_interfaceFile = """ import Foundation - + public func receiveData(dat: Data) public func returnData() -> Data """ @@ -34,14 +34,14 @@ final class DataImportTests { private static let foundationDataProtocol_interfaceFile = """ import Foundation - + public func receiveDataProtocol(dat: some DataProtocol, dat2: T?) """ private static let essentialsData_interfaceFile = """ import FoundationEssentials - + public func receiveData(dat: Data) public func returnData() -> Data """ @@ -49,13 +49,13 @@ final class DataImportTests { private static let essentialsDataProtocol_interfaceFile = """ import FoundationEssentials - + public func receiveDataProtocol(dat: some DataProtocol, dat2: T?) """ private static let ifConfigData_interfaceFile = """ \(ifConfigImport) - + public func receiveData(dat: Data) public func returnData() -> Data """ @@ -63,18 +63,23 @@ final class DataImportTests { private static let ifConfigDataProtocol_interfaceFile = """ \(ifConfigImport) - + public func receiveDataProtocol(dat: some DataProtocol, dat2: T?) """ - @Test("Import Data: Swift thunks", arguments: zip( - [Self.foundationData_interfaceFile, Self.essentialsData_interfaceFile, Self.ifConfigData_interfaceFile], - ["import Foundation", "import FoundationEssentials", Self.ifConfigImport] - )) + @Test( + "Import Data: Swift thunks", + arguments: zip( + [Self.foundationData_interfaceFile, Self.essentialsData_interfaceFile, Self.ifConfigData_interfaceFile], + ["import Foundation", "import FoundationEssentials", Self.ifConfigImport] + ) + ) func data_swiftThunk(fileContent: String, expectedImportChunk: String) throws { try assertOutput( - input: fileContent, .ffm, .swift, + input: fileContent, + .ffm, + .swift, detectChunkByInitialLines: 10, expectedChunks: [ expectedImportChunk, @@ -123,13 +128,18 @@ final class DataImportTests { ] ) } - - @Test("Import Data: JavaBindings", arguments: [ - Self.foundationData_interfaceFile, Self.essentialsData_interfaceFile, Self.ifConfigData_interfaceFile - ]) + + @Test( + "Import Data: JavaBindings", + arguments: [ + Self.foundationData_interfaceFile, Self.essentialsData_interfaceFile, Self.ifConfigData_interfaceFile, + ] + ) func data_javaBindings(fileContent: String) throws { try assertOutput( - input: fileContent, .ffm, .java, + input: fileContent, + .ffm, + .java, expectedChunks: [ """ /** @@ -209,7 +219,6 @@ final class DataImportTests { } """, - """ /** * {@snippet lang=c : @@ -352,7 +361,6 @@ final class DataImportTests { } """, - """ /** * Downcall to Swift: @@ -366,18 +374,26 @@ final class DataImportTests { swiftjava_SwiftModule_Data_withUnsafeBytes__.call(withUnsafeBytes.$toUpcallStub(body, arena$), this.$memorySegment()); } } - """ + """, ] ) } - @Test("Import DataProtocol: Swift thunks", arguments: zip( - [Self.foundationDataProtocol_interfaceFile, Self.essentialsDataProtocol_interfaceFile, Self.ifConfigDataProtocol_interfaceFile], - ["import Foundation", "import FoundationEssentials", Self.ifConfigImport] - )) + @Test( + "Import DataProtocol: Swift thunks", + arguments: zip( + [ + Self.foundationDataProtocol_interfaceFile, Self.essentialsDataProtocol_interfaceFile, + Self.ifConfigDataProtocol_interfaceFile, + ], + ["import Foundation", "import FoundationEssentials", Self.ifConfigImport] + ) + ) func dataProtocol_swiftThunk(fileContent: String, expectedImportChunk: String) throws { try assertOutput( - input: fileContent, .ffm, .swift, + input: fileContent, + .ffm, + .swift, expectedChunks: [ expectedImportChunk, """ @@ -390,18 +406,24 @@ final class DataImportTests { // Just to make sure 'Data' is imported. """ @_cdecl("swiftjava_getType_SwiftModule_Data") - """ + """, ] ) } - @Test("Import DataProtocol: JavaBindings", arguments: [ - Self.foundationDataProtocol_interfaceFile, Self.essentialsDataProtocol_interfaceFile, Self.ifConfigDataProtocol_interfaceFile - ]) + @Test( + "Import DataProtocol: JavaBindings", + arguments: [ + Self.foundationDataProtocol_interfaceFile, Self.essentialsDataProtocol_interfaceFile, + Self.ifConfigDataProtocol_interfaceFile, + ] + ) func dataProtocol_javaBindings(fileContent: String) throws { try assertOutput( - input: fileContent, .ffm, .java, + input: fileContent, + .ffm, + .java, expectedChunks: [ """ /** @@ -445,7 +467,7 @@ final class DataImportTests { // Just to make sure 'Data' is imported. """ public final class Data extends FFMSwiftInstance implements SwiftValue { - """ + """, ] ) } @@ -460,7 +482,9 @@ final class DataImportTests { """ try assertOutput( - input: text, .jni, .java, + input: text, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -468,17 +492,21 @@ final class DataImportTests { SwiftModule.$acceptData(data.$memoryAddress()); } """ - ]) + ] + ) try assertOutput( - input: text, .jni, .swift, + input: text, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @_cdecl("Java_com_example_swift_SwiftModule__00024acceptData__J") public func Java_com_example_swift_SwiftModule__00024acceptData__J(environment: UnsafeMutablePointer!, thisClass: jclass, data: jlong) { """ - ]) + ] + ) } @Test("Import Data: JNI return Data") @@ -489,21 +517,27 @@ final class DataImportTests { """ try assertOutput( - input: text, .jni, .java, + input: text, + .jni, + .java, expectedChunks: [ """ public static Data returnData(SwiftArena swiftArena$) { """ - ]) + ] + ) try assertOutput( - input: text, .jni, .swift, + input: text, + .jni, + .swift, expectedChunks: [ """ @_cdecl("Java_com_example_swift_SwiftModule__00024returnData__") public func Java_com_example_swift_SwiftModule__00024returnData__(environment: UnsafeMutablePointer!, thisClass: jclass) -> jlong { """ - ]) + ] + ) } @Test("Import Data: JNI Data class") @@ -514,7 +548,9 @@ final class DataImportTests { """ try assertOutput( - input: text, .jni, .java, + input: text, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ "public final class Data implements JNISwiftInstance, DataProtocol {", @@ -524,10 +560,11 @@ final class DataImportTests { "public byte[] toByteArray() {", "private static native byte[] $toByteArray(long selfPointer);", - + "public byte[] toByteArrayIndirectCopy() {", - "private static native byte[] $toByteArrayIndirectCopy(long selfPointer);" - ]) + "private static native byte[] $toByteArrayIndirectCopy(long selfPointer);", + ] + ) } } diff --git a/Tests/JExtractSwiftTests/DateTests.swift b/Tests/JExtractSwiftTests/DateTests.swift index 564c1b218..b2a7be08a 100644 --- a/Tests/JExtractSwiftTests/DateTests.swift +++ b/Tests/JExtractSwiftTests/DateTests.swift @@ -40,27 +40,35 @@ struct DateTests { ) ] ) - func func_accept_date(mode: JExtractGenerationMode, expectedJavaChunks: [String], expectedSwiftChunks: [String]) throws { + func func_accept_date( + mode: JExtractGenerationMode, + expectedJavaChunks: [String], + expectedSwiftChunks: [String] + ) throws { let text = """ import Foundation - + public func acceptDate(date: Date) """ try assertOutput( - input: text, - mode, .java, + input: text, + mode, + .java, detectChunkByInitialLines: 1, - expectedChunks: expectedJavaChunks) - - try assertOutput( - input: text, - mode, .swift, + expectedChunks: expectedJavaChunks + ) + + try assertOutput( + input: text, + mode, + .swift, detectChunkByInitialLines: 1, - expectedChunks: expectedSwiftChunks) - } - + expectedChunks: expectedSwiftChunks + ) + } + @Test( "Import: return Date", arguments: [ @@ -82,22 +90,30 @@ struct DateTests { ) ] ) - func func_return_Date(mode: JExtractGenerationMode, expectedJavaChunks: [String], expectedSwiftChunks: [String]) throws { + func func_return_Date( + mode: JExtractGenerationMode, + expectedJavaChunks: [String], + expectedSwiftChunks: [String] + ) throws { let text = """ import Foundation public func returnDate() -> Date """ - + try assertOutput( - input: text, - mode, .java, - expectedChunks: expectedJavaChunks) - - try assertOutput( - input: text, - mode, .swift, - expectedChunks: expectedSwiftChunks) + input: text, + mode, + .java, + expectedChunks: expectedJavaChunks + ) + + try assertOutput( + input: text, + mode, + .swift, + expectedChunks: expectedSwiftChunks + ) } @Test( @@ -121,7 +137,7 @@ struct DateTests { """, """ public java.time.Instant toInstant() { - """ + """, ], /* expected Swift chunks */ [ @@ -132,7 +148,7 @@ struct DateTests { """ @_cdecl("Java_com_example_swift_Date__00024getTimeIntervalSince1970__J") public func Java_com_example_swift_Date__00024getTimeIntervalSince1970__J(environment: UnsafeMutablePointer!, thisClass: jclass, self: jlong) -> jdouble { - """ + """, ] ) ] @@ -146,12 +162,16 @@ struct DateTests { try assertOutput( input: text, - mode, .java, - expectedChunks: expectedJavaChunks) + mode, + .java, + expectedChunks: expectedJavaChunks + ) - try assertOutput( + try assertOutput( input: text, - mode, .swift, - expectedChunks: expectedSwiftChunks) + mode, + .swift, + expectedChunks: expectedSwiftChunks + ) } } diff --git a/Tests/JExtractSwiftTests/ExtensionImportTests.swift b/Tests/JExtractSwiftTests/ExtensionImportTests.swift index 2bad2c7b8..a960545d6 100644 --- a/Tests/JExtractSwiftTests/ExtensionImportTests.swift +++ b/Tests/JExtractSwiftTests/ExtensionImportTests.swift @@ -28,7 +28,9 @@ final class ExtensionImportTests { @Test("Import extensions: Swift thunks") func data_swiftThunk() throws { try assertOutput( - input: interfaceFile, .ffm, .swift, + input: interfaceFile, + .ffm, + .swift, expectedChunks: [ """ @_cdecl("swiftjava_getType_SwiftModule_MyStruct") @@ -41,7 +43,7 @@ final class ExtensionImportTests { public func swiftjava_SwiftModule_MyStruct_methodInExtension(_ self: UnsafeRawPointer) { self.assumingMemoryBound(to: MyStruct.self).pointee.methodInExtension() } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/FFM/FFMSubscriptsTests.swift b/Tests/JExtractSwiftTests/FFM/FFMSubscriptsTests.swift index 7147a5524..340010fda 100644 --- a/Tests/JExtractSwiftTests/FFM/FFMSubscriptsTests.swift +++ b/Tests/JExtractSwiftTests/FFM/FFMSubscriptsTests.swift @@ -18,147 +18,167 @@ import Testing @Suite struct FFMSubscriptsTests { private let noParamsSubscriptSource = """ - public struct MyStruct { - private var testVariable: Double = 0 + public struct MyStruct { + private var testVariable: Double = 0 - public subscript() -> Double { - get { return testVariable } - set { testVariable = newValue } + public subscript() -> Double { + get { return testVariable } + set { testVariable = newValue } + } } - } - """ + """ private let subscriptWithParamsSource = """ - public struct MyStruct { - private var testVariable: [Int32] = [] + public struct MyStruct { + private var testVariable: [Int32] = [] - public subscript(index: Int32) -> Int32 { - get { return testVariable[Int(index)] } - set { testVariable[Int(index)] = newValue } + public subscript(index: Int32) -> Int32 { + get { return testVariable[Int(index)] } + set { testVariable[Int(index)] = newValue } + } } - } - """ + """ @Test("Test generation of JavaClass for subscript with no parameters") func generatesJavaClassForNoParams() throws { - try assertOutput(input: noParamsSubscriptSource, .ffm, .java, expectedChunks: [ - """ - private static class swiftjava_SwiftModule_MyStruct_subscript$get { - private static final FunctionDescriptor DESC = FunctionDescriptor.of( - /* -> */SwiftValueLayout.SWIFT_DOUBLE, - /* self: */SwiftValueLayout.SWIFT_POINTER - ); - """, - """ - private static final MemorySegment ADDR = - SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$get"); - """, - """ - private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); - public static double call(java.lang.foreign.MemorySegment self) { - try { - if (CallTraces.TRACE_DOWNCALLS) { - CallTraces.traceDowncall(self); - } - return (double) HANDLE.invokeExact(self); - } catch (Throwable ex$) { - throw new AssertionError("should not reach here", ex$); - } - } - """, - """ - public double getSubscript() { - $ensureAlive(); - return swiftjava_SwiftModule_MyStruct_subscript$get.call(this.$memorySegment()); - """, - ]) - try assertOutput(input: noParamsSubscriptSource, .ffm, .java, expectedChunks: [ - """ - private static class swiftjava_SwiftModule_MyStruct_subscript$set { - private static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid( - /* newValue: */SwiftValueLayout.SWIFT_DOUBLE, - /* self: */SwiftValueLayout.SWIFT_POINTER - ); + try assertOutput( + input: noParamsSubscriptSource, + .ffm, + .java, + expectedChunks: [ + """ + private static class swiftjava_SwiftModule_MyStruct_subscript$get { + private static final FunctionDescriptor DESC = FunctionDescriptor.of( + /* -> */SwiftValueLayout.SWIFT_DOUBLE, + /* self: */SwiftValueLayout.SWIFT_POINTER + ); + """, + """ private static final MemorySegment ADDR = - SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$set"); + SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$get"); + """, + """ private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); - public static void call(double newValue, java.lang.foreign.MemorySegment self) { + public static double call(java.lang.foreign.MemorySegment self) { try { if (CallTraces.TRACE_DOWNCALLS) { - CallTraces.traceDowncall(newValue, self); + CallTraces.traceDowncall(self); } - HANDLE.invokeExact(newValue, self); + return (double) HANDLE.invokeExact(self); } catch (Throwable ex$) { throw new AssertionError("should not reach here", ex$); } } - """, - """ - public void setSubscript(double newValue) { - $ensureAlive(); - swiftjava_SwiftModule_MyStruct_subscript$set.call(newValue, this.$memorySegment()); - """ - ]) + """, + """ + public double getSubscript() { + $ensureAlive(); + return swiftjava_SwiftModule_MyStruct_subscript$get.call(this.$memorySegment()); + """, + ] + ) + try assertOutput( + input: noParamsSubscriptSource, + .ffm, + .java, + expectedChunks: [ + """ + private static class swiftjava_SwiftModule_MyStruct_subscript$set { + private static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid( + /* newValue: */SwiftValueLayout.SWIFT_DOUBLE, + /* self: */SwiftValueLayout.SWIFT_POINTER + ); + private static final MemorySegment ADDR = + SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$set"); + private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); + public static void call(double newValue, java.lang.foreign.MemorySegment self) { + try { + if (CallTraces.TRACE_DOWNCALLS) { + CallTraces.traceDowncall(newValue, self); + } + HANDLE.invokeExact(newValue, self); + } catch (Throwable ex$) { + throw new AssertionError("should not reach here", ex$); + } + } + """, + """ + public void setSubscript(double newValue) { + $ensureAlive(); + swiftjava_SwiftModule_MyStruct_subscript$set.call(newValue, this.$memorySegment()); + """, + ] + ) } @Test("Test generation of JavaClass for subscript with parameters") func generatesJavaClassForParameters() throws { - try assertOutput(input: subscriptWithParamsSource, .ffm, .java, expectedChunks: [ - """ - private static class swiftjava_SwiftModule_MyStruct_subscript$get { - private static final FunctionDescriptor DESC = FunctionDescriptor.of( - /* -> */SwiftValueLayout.SWIFT_INT32, - /* index: */SwiftValueLayout.SWIFT_INT32, - /* self: */SwiftValueLayout.SWIFT_POINTER - ); - private static final MemorySegment ADDR = - SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$get"); - private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); - public static int call(int index, java.lang.foreign.MemorySegment self) { - try { - if (CallTraces.TRACE_DOWNCALLS) { - CallTraces.traceDowncall(index, self); + try assertOutput( + input: subscriptWithParamsSource, + .ffm, + .java, + expectedChunks: [ + """ + private static class swiftjava_SwiftModule_MyStruct_subscript$get { + private static final FunctionDescriptor DESC = FunctionDescriptor.of( + /* -> */SwiftValueLayout.SWIFT_INT32, + /* index: */SwiftValueLayout.SWIFT_INT32, + /* self: */SwiftValueLayout.SWIFT_POINTER + ); + private static final MemorySegment ADDR = + SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$get"); + private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); + public static int call(int index, java.lang.foreign.MemorySegment self) { + try { + if (CallTraces.TRACE_DOWNCALLS) { + CallTraces.traceDowncall(index, self); + } + return (int) HANDLE.invokeExact(index, self); + } catch (Throwable ex$) { + throw new AssertionError("should not reach here", ex$); } - return (int) HANDLE.invokeExact(index, self); - } catch (Throwable ex$) { - throw new AssertionError("should not reach here", ex$); } - } - """, - """ - public int getSubscript(int index) { - $ensureAlive(); - return swiftjava_SwiftModule_MyStruct_subscript$get.call(index, this.$memorySegment()); - """, - ]) - try assertOutput(input: subscriptWithParamsSource, .ffm, .java, expectedChunks: [ - """ - private static class swiftjava_SwiftModule_MyStruct_subscript$set { - private static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid( - /* index: */SwiftValueLayout.SWIFT_INT32, - /* newValue: */SwiftValueLayout.SWIFT_INT32, - /* self: */SwiftValueLayout.SWIFT_POINTER - ); - private static final MemorySegment ADDR = - SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$set"); - private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); - public static void call(int index, int newValue, java.lang.foreign.MemorySegment self) { - try { - if (CallTraces.TRACE_DOWNCALLS) { - CallTraces.traceDowncall(index, newValue, self); + """, + """ + public int getSubscript(int index) { + $ensureAlive(); + return swiftjava_SwiftModule_MyStruct_subscript$get.call(index, this.$memorySegment()); + """, + ] + ) + try assertOutput( + input: subscriptWithParamsSource, + .ffm, + .java, + expectedChunks: [ + """ + private static class swiftjava_SwiftModule_MyStruct_subscript$set { + private static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid( + /* index: */SwiftValueLayout.SWIFT_INT32, + /* newValue: */SwiftValueLayout.SWIFT_INT32, + /* self: */SwiftValueLayout.SWIFT_POINTER + ); + private static final MemorySegment ADDR = + SwiftModule.findOrThrow("swiftjava_SwiftModule_MyStruct_subscript$set"); + private static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC); + public static void call(int index, int newValue, java.lang.foreign.MemorySegment self) { + try { + if (CallTraces.TRACE_DOWNCALLS) { + CallTraces.traceDowncall(index, newValue, self); + } + HANDLE.invokeExact(index, newValue, self); + } catch (Throwable ex$) { + throw new AssertionError("should not reach here", ex$); } - HANDLE.invokeExact(index, newValue, self); - } catch (Throwable ex$) { - throw new AssertionError("should not reach here", ex$); } - } - """, - """ - public void setSubscript(int index, int newValue) { - $ensureAlive(); - swiftjava_SwiftModule_MyStruct_subscript$set.call(index, newValue, this.$memorySegment()); - """, - ]) + """, + """ + public void setSubscript(int index, int newValue) { + $ensureAlive(); + swiftjava_SwiftModule_MyStruct_subscript$set.call(index, newValue, this.$memorySegment()); + """, + ] + ) } @Test("Test generation of Swift thunks for subscript without parameters") @@ -179,7 +199,7 @@ struct FFMSubscriptsTests { public func swiftjava_SwiftModule_MyStruct_subscript$set(_ newValue: Double, _ self: UnsafeMutableRawPointer) { self.assumingMemoryBound(to: MyStruct.self).pointee[] = newValue } - """ + """, ] ) } @@ -202,7 +222,7 @@ struct FFMSubscriptsTests { public func swiftjava_SwiftModule_MyStruct_subscript$set(_ index: Int32, _ newValue: Int32, _ self: UnsafeMutableRawPointer) { self.assumingMemoryBound(to: MyStruct.self).pointee[index] = newValue } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/FFMNestedTypesTests.swift b/Tests/JExtractSwiftTests/FFMNestedTypesTests.swift index 5bb422eaa..4c5171c5b 100644 --- a/Tests/JExtractSwiftTests/FFMNestedTypesTests.swift +++ b/Tests/JExtractSwiftTests/FFMNestedTypesTests.swift @@ -49,8 +49,6 @@ final class FFMNestedTypesTests { fatalError("Didn't import nested type!") } - - } -} \ No newline at end of file +} diff --git a/Tests/JExtractSwiftTests/FoundationImportTests.swift b/Tests/JExtractSwiftTests/FoundationImportTests.swift index f961882f6..b7c772943 100644 --- a/Tests/JExtractSwiftTests/FoundationImportTests.swift +++ b/Tests/JExtractSwiftTests/FoundationImportTests.swift @@ -13,15 +13,17 @@ //===----------------------------------------------------------------------===// import JExtractSwiftLib -import Testing import SwiftJavaConfigurationShared +import Testing struct FoundationImportTests { @Test("Import Foundation", arguments: [JExtractGenerationMode.jni, JExtractGenerationMode.ffm]) func import_foundation(mode: JExtractGenerationMode) throws { try assertOutput( - input: "import Foundation", mode, .swift, + input: "import Foundation", + mode, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ "import Foundation" @@ -33,7 +35,9 @@ struct FoundationImportTests { func import_foundationEssentials(mode: JExtractGenerationMode) throws { try assertOutput( - input: "import FoundationEssentials", mode, .swift, + input: "import FoundationEssentials", + mode, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ "import FoundationEssentials" @@ -53,7 +57,9 @@ struct FoundationImportTests { """ try assertOutput( - input: ifConfigImport, mode, .swift, + input: ifConfigImport, + mode, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ ifConfigImport diff --git a/Tests/JExtractSwiftTests/FunctionLoweringTests.swift b/Tests/JExtractSwiftTests/FunctionLoweringTests.swift index ba1aad064..c26d68ecc 100644 --- a/Tests/JExtractSwiftTests/FunctionLoweringTests.swift +++ b/Tests/JExtractSwiftTests/FunctionLoweringTests.swift @@ -20,30 +20,32 @@ import Testing final class FunctionLoweringTests { @Test("Lowering buffer pointers") func loweringBufferPointers() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func f(x: Int, y: Swift.Float, z: UnsafeBufferPointer) { } """, expectedCDecl: """ - @_cdecl("c_f") - public func c_f(_ x: Int, _ y: Float, _ z_pointer: UnsafeRawPointer, _ z_count: Int) { - f(x: x, y: y, z: UnsafeBufferPointer(start: z_pointer.assumingMemoryBound(to: Bool.self), count: z_count)) - } - """, + @_cdecl("c_f") + public func c_f(_ x: Int, _ y: Float, _ z_pointer: UnsafeRawPointer, _ z_count: Int) { + f(x: x, y: y, z: UnsafeBufferPointer(start: z_pointer.assumingMemoryBound(to: Bool.self), count: z_count)) + } + """, expectedCFunction: "void c_f(ptrdiff_t x, float y, const void *z_pointer, ptrdiff_t z_count)" ) } @Test("Lowering tuples") func loweringTuples() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func f(t: (Int, (Float, Double)), z: UnsafePointer) -> Int { } """, expectedCDecl: """ - @_cdecl("c_f") - public func c_f(_ t_0: Int, _ t_1_0: Float, _ t_1_1: Double, _ z: UnsafePointer) -> Int { - return f(t: (t_0, (t_1_0, t_1_1)), z: z) - } - """, + @_cdecl("c_f") + public func c_f(_ t_0: Int, _ t_1_0: Float, _ t_1_1: Double, _ z: UnsafePointer) -> Int { + return f(t: (t_0, (t_1_0, t_1_1)), z: z) + } + """, expectedCFunction: "ptrdiff_t c_f(ptrdiff_t t_0, float t_1_0, double t_1_1, const ptrdiff_t *z)" ) } @@ -54,263 +56,278 @@ final class FunctionLoweringTests { func takeString(str: String) {} """, expectedCDecl: """ - @_cdecl("c_takeString") - public func c_takeString(_ str: UnsafePointer) { - takeString(str: String(cString: str)) - } - """, + @_cdecl("c_takeString") + public func c_takeString(_ str: UnsafePointer) { + takeString(str: String(cString: str)) + } + """, expectedCFunction: """ - void c_takeString(const int8_t *str) - """) + void c_takeString(const int8_t *str) + """ + ) } @Test("Lowering functions involving inout") func loweringInoutParameters() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func shift(point: inout Point, by delta: (Double, Double)) { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_shift") - public func c_shift(_ point: UnsafeMutableRawPointer, _ delta_0: Double, _ delta_1: Double) { - shift(point: &point.assumingMemoryBound(to: Point.self).pointee, by: (delta_0, delta_1)) - } - """, + @_cdecl("c_shift") + public func c_shift(_ point: UnsafeMutableRawPointer, _ delta_0: Double, _ delta_1: Double) { + shift(point: &point.assumingMemoryBound(to: Point.self).pointee, by: (delta_0, delta_1)) + } + """, expectedCFunction: "void c_shift(void *point, double delta_0, double delta_1)" ) } @Test("Lowering methods") func loweringMethods() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func shifted(by delta: (Double, Double)) -> Point { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_shifted") - public func c_shifted(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Point.self).initialize(to: self.assumingMemoryBound(to: Point.self).pointee.shifted(by: (delta_0, delta_1))) - } - """, + @_cdecl("c_shifted") + public func c_shifted(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Point.self).initialize(to: self.assumingMemoryBound(to: Point.self).pointee.shifted(by: (delta_0, delta_1))) + } + """, expectedCFunction: "void c_shifted(double delta_0, double delta_1, const void *self, void *_result)" ) } @Test("Lowering mutating methods") func loweringMutatingMethods() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ mutating func shift(by delta: (Double, Double)) { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_shift") - public func c_shift(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeMutableRawPointer) { - self.assumingMemoryBound(to: Point.self).pointee.shift(by: (delta_0, delta_1)) - } - """, + @_cdecl("c_shift") + public func c_shift(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeMutableRawPointer) { + self.assumingMemoryBound(to: Point.self).pointee.shift(by: (delta_0, delta_1)) + } + """, expectedCFunction: "void c_shift(double delta_0, double delta_1, void *self)" ) } @Test("Lowering instance methods of classes") func loweringInstanceMethodsOfClass() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func shift(by delta: (Double, Double)) { } """, sourceFile: """ - class Point { } - """, + class Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_shift") - public func c_shift(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer) { - self.assumingMemoryBound(to: Point.self).pointee.shift(by: (delta_0, delta_1)) - } - """, + @_cdecl("c_shift") + public func c_shift(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer) { + self.assumingMemoryBound(to: Point.self).pointee.shift(by: (delta_0, delta_1)) + } + """, expectedCFunction: "void c_shift(double delta_0, double delta_1, const void *self)" ) } @Test("Lowering static methods") func loweringStaticMethods() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ static func scaledUnit(by value: Double) -> Point { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_scaledUnit") - public func c_scaledUnit(_ value: Double, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Point.self).initialize(to: Point.scaledUnit(by: value)) - } - """, + @_cdecl("c_scaledUnit") + public func c_scaledUnit(_ value: Double, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Point.self).initialize(to: Point.scaledUnit(by: value)) + } + """, expectedCFunction: "void c_scaledUnit(double value, void *_result)" ) - try assertLoweredFunction(""" + try assertLoweredFunction( + """ static func randomPerson(seed: Double) -> Person { } """, sourceFile: """ - class Person { } - """, + class Person { } + """, enclosingType: "Person", expectedCDecl: """ - @_cdecl("c_randomPerson") - public func c_randomPerson(_ seed: Double, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Person.self).initialize(to: Person.randomPerson(seed: seed)) - } - """, + @_cdecl("c_randomPerson") + public func c_randomPerson(_ seed: Double, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Person.self).initialize(to: Person.randomPerson(seed: seed)) + } + """, expectedCFunction: "void c_randomPerson(double seed, void *_result)" ) } @Test("Lowering initializers") func loweringInitializers() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ init(scaledBy value: Double) { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_init") - public func c_init(_ value: Double, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Point.self).initialize(to: Point(scaledBy: value)) - } - """, + @_cdecl("c_init") + public func c_init(_ value: Double, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Point.self).initialize(to: Point(scaledBy: value)) + } + """, expectedCFunction: "void c_init(double value, void *_result)" ) - try assertLoweredFunction(""" + try assertLoweredFunction( + """ init(seed: Double) { } """, sourceFile: """ - class Person { } - """, + class Person { } + """, enclosingType: "Person", expectedCDecl: """ - @_cdecl("c_init") - public func c_init(_ seed: Double, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Person.self).initialize(to: Person(seed: seed)) - } - """, + @_cdecl("c_init") + public func c_init(_ seed: Double, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Person.self).initialize(to: Person(seed: seed)) + } + """, expectedCFunction: "void c_init(double seed, void *_result)" ) } @Test("Lowering metatypes") func lowerMetatype() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func f(t: Int.Type) { } """, expectedCDecl: """ - @_cdecl("c_f") - public func c_f(_ t: UnsafeRawPointer) { - f(t: unsafeBitCast(t, to: Int.self)) - } - """, + @_cdecl("c_f") + public func c_f(_ t: UnsafeRawPointer) { + f(t: unsafeBitCast(t, to: Int.self)) + } + """, expectedCFunction: "void c_f(const void *t)" ) - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func f() -> Int.Type { } """, expectedCDecl: """ - @_cdecl("c_f") - public func c_f() -> UnsafeRawPointer { - return unsafeBitCast(f(), to: UnsafeRawPointer.self) - } - """, + @_cdecl("c_f") + public func c_f() -> UnsafeRawPointer { + return unsafeBitCast(f(), to: UnsafeRawPointer.self) + } + """, expectedCFunction: "const void *c_f(void)" ) } @Test("Lowering class returns") func lowerClassReturns() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func shifted(by delta: (Double, Double)) -> Point { } """, sourceFile: """ - class Point { } - """, + class Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_shifted") - public func c_shifted(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer, _ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Point.self).initialize(to: self.assumingMemoryBound(to: Point.self).pointee.shifted(by: (delta_0, delta_1))) - } - """, + @_cdecl("c_shifted") + public func c_shifted(_ delta_0: Double, _ delta_1: Double, _ self: UnsafeRawPointer, _ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Point.self).initialize(to: self.assumingMemoryBound(to: Point.self).pointee.shifted(by: (delta_0, delta_1))) + } + """, expectedCFunction: "void c_shifted(double delta_0, double delta_1, const void *self, void *_result)" ) } @Test("Lowering pointer returns") func lowerPointerReturns() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func getPointer() -> UnsafePointer { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_getPointer") - public func c_getPointer() -> UnsafeRawPointer { - return UnsafeRawPointer(getPointer()) - } - """, + @_cdecl("c_getPointer") + public func c_getPointer() -> UnsafeRawPointer { + return UnsafeRawPointer(getPointer()) + } + """, expectedCFunction: "const void *c_getPointer(void)" ) } @Test("Lowering tuple returns") func lowerTupleReturns() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func getTuple() -> (Int, (Float, Point)) { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_getTuple") - public func c_getTuple(_ _result_0: UnsafeMutablePointer, _ _result_1_0: UnsafeMutablePointer, _ _result_1_1: UnsafeMutableRawPointer) { - let _result = getTuple() - _result_0.initialize(to: _result.0) - let _result_1 = _result.1 - _result_1_0.initialize(to: _result_1.0) - _result_1_1.assumingMemoryBound(to: Point.self).initialize(to: _result_1.1) - } - """, + @_cdecl("c_getTuple") + public func c_getTuple(_ _result_0: UnsafeMutablePointer, _ _result_1_0: UnsafeMutablePointer, _ _result_1_1: UnsafeMutableRawPointer) { + let _result = getTuple() + _result_0.initialize(to: _result.0) + let _result_1 = _result.1 + _result_1_0.initialize(to: _result_1.0) + _result_1_1.assumingMemoryBound(to: Point.self).initialize(to: _result_1.1) + } + """, expectedCFunction: "void c_getTuple(ptrdiff_t *_result_0, float *_result_1_0, void *_result_1_1)" ) } @Test("Lowering buffer pointer returns") func lowerBufferPointerReturns() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func getBufferPointer() -> UnsafeMutableBufferPointer { } """, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_getBufferPointer") - public func c_getBufferPointer(_ _result_0: UnsafeMutablePointer, _ _result_1: UnsafeMutablePointer) { - let _result = getBufferPointer() - _result_0.initialize(to: _result.0) - _result_1.initialize(to: _result.1) - } - """, + @_cdecl("c_getBufferPointer") + public func c_getBufferPointer(_ _result_0: UnsafeMutablePointer, _ _result_1: UnsafeMutablePointer) { + let _result = getBufferPointer() + _result_0.initialize(to: _result.0) + _result_1.initialize(to: _result.1) + } + """, expectedCFunction: "void c_getBufferPointer(void **_result_0, ptrdiff_t *_result_1)" ) } @@ -322,14 +339,15 @@ final class FunctionLoweringTests { func swapRawBufferPointer(buffer: UnsafeRawBufferPointer) -> UnsafeMutableRawBufferPointer {} """, expectedCDecl: """ - @_cdecl("c_swapRawBufferPointer") - public func c_swapRawBufferPointer(_ buffer_pointer: UnsafeRawPointer?, _ buffer_count: Int, _ _result_pointer: UnsafeMutablePointer, _ _result_count: UnsafeMutablePointer) { - let _result = swapRawBufferPointer(buffer: UnsafeRawBufferPointer(start: buffer_pointer, count: buffer_count)) - _result_pointer.initialize(to: _result.baseAddress) - _result_count.initialize(to: _result.count) - } - """, - expectedCFunction: "void c_swapRawBufferPointer(const void *buffer_pointer, ptrdiff_t buffer_count, void **_result_pointer, ptrdiff_t *_result_count)" + @_cdecl("c_swapRawBufferPointer") + public func c_swapRawBufferPointer(_ buffer_pointer: UnsafeRawPointer?, _ buffer_count: Int, _ _result_pointer: UnsafeMutablePointer, _ _result_count: UnsafeMutablePointer) { + let _result = swapRawBufferPointer(buffer: UnsafeRawBufferPointer(start: buffer_pointer, count: buffer_count)) + _result_pointer.initialize(to: _result.baseAddress) + _result_count.initialize(to: _result.count) + } + """, + expectedCFunction: + "void c_swapRawBufferPointer(const void *buffer_pointer, ptrdiff_t buffer_count, void **_result_pointer, ptrdiff_t *_result_count)" ) } @@ -340,28 +358,29 @@ final class FunctionLoweringTests { func withBuffer(body: (UnsafeRawBufferPointer) -> Int) {} """, expectedCDecl: """ - @_cdecl("c_withBuffer") - public func c_withBuffer(_ body: @convention(c) (UnsafeRawPointer?, Int) -> Int) { - withBuffer(body: { (_0) in - return body(_0.baseAddress, _0.count) - }) - } - """, + @_cdecl("c_withBuffer") + public func c_withBuffer(_ body: @convention(c) (UnsafeRawPointer?, Int) -> Int) { + withBuffer(body: { (_0) in + return body(_0.baseAddress, _0.count) + }) + } + """, expectedCFunction: "void c_withBuffer(ptrdiff_t (*body)(const void *, ptrdiff_t))" ) } @Test("Lowering () -> Void type") func lowerSimpleClosureTypes() throws { - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func doSomething(body: () -> Void) { } """, expectedCDecl: """ - @_cdecl("c_doSomething") - public func c_doSomething(_ body: @convention(c) () -> Void) { - doSomething(body: body) - } - """, + @_cdecl("c_doSomething") + public func c_doSomething(_ body: @convention(c) () -> Void) { + doSomething(body: body) + } + """, expectedCFunction: "void c_doSomething(void (*body)(void))" ) } @@ -370,15 +389,16 @@ final class FunctionLoweringTests { func lowerFunctionTypes() throws { // FIXME: C pretty printing isn't handling parameters of function pointer // type yet. - try assertLoweredFunction(""" + try assertLoweredFunction( + """ func doSomething(body: @convention(c) (Int32) -> Double) { } """, expectedCDecl: """ - @_cdecl("c_doSomething") - public func c_doSomething(_ body: @convention(c) (Int32) -> Double) { - doSomething(body: body) - } - """, + @_cdecl("c_doSomething") + public func c_doSomething(_ body: @convention(c) (Int32) -> Double) { + doSomething(body: body) + } + """, expectedCFunction: "void c_doSomething(double (*body)(int32_t))" ) } @@ -390,18 +410,19 @@ final class FunctionLoweringTests { func fn(a1: Optional, a2: Int?, a3: Point?, a4: (some DataProtocol)?) """, sourceFile: """ - import Foundation - struct Point {} - """, - expectedCDecl:""" - @_cdecl("c_fn") - public func c_fn(_ a1: UnsafePointer?, _ a2: UnsafePointer?, _ a3: UnsafeRawPointer?, _ a4: UnsafeRawPointer?) { - fn(a1: a1?.pointee, a2: a2?.pointee, a3: a3?.assumingMemoryBound(to: Point.self).pointee, a4: a4?.assumingMemoryBound(to: Data.self).pointee) - } - """, + import Foundation + struct Point {} + """, + expectedCDecl: """ + @_cdecl("c_fn") + public func c_fn(_ a1: UnsafePointer?, _ a2: UnsafePointer?, _ a3: UnsafeRawPointer?, _ a4: UnsafeRawPointer?) { + fn(a1: a1?.pointee, a2: a2?.pointee, a3: a3?.assumingMemoryBound(to: Point.self).pointee, a4: a4?.assumingMemoryBound(to: Data.self).pointee) + } + """, expectedCFunction: """ - void c_fn(const ptrdiff_t *a1, const ptrdiff_t *a2, const void *a3, const void *a4) - """) + void c_fn(const ptrdiff_t *a1, const ptrdiff_t *a2, const void *a3, const void *a4) + """ + ) } @Test("Lowering generic parameters") @@ -411,36 +432,38 @@ final class FunctionLoweringTests { func fn(x: T, y: U?) where T: DataProtocol """, sourceFile: """ - import Foundation - """, + import Foundation + """, expectedCDecl: """ - @_cdecl("c_fn") - public func c_fn(_ x: UnsafeRawPointer, _ y: UnsafeRawPointer?) { - fn(x: x.assumingMemoryBound(to: Data.self).pointee, y: y?.assumingMemoryBound(to: Data.self).pointee) - } - """, + @_cdecl("c_fn") + public func c_fn(_ x: UnsafeRawPointer, _ y: UnsafeRawPointer?) { + fn(x: x.assumingMemoryBound(to: Data.self).pointee, y: y?.assumingMemoryBound(to: Data.self).pointee) + } + """, expectedCFunction: """ - void c_fn(const void *x, const void *y) - """ + void c_fn(const void *x, const void *y) + """ ) } @Test("Lowering read accessor") func lowerGlobalReadAccessor() throws { try assertLoweredVariableAccessor( - DeclSyntax(""" - var value: Point = Point() - """).cast(VariableDeclSyntax.self), + DeclSyntax( + """ + var value: Point = Point() + """ + ).cast(VariableDeclSyntax.self), isSet: false, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_value") - public func c_value(_ _result: UnsafeMutableRawPointer) { - _result.assumingMemoryBound(to: Point.self).initialize(to: value) - } - """, + @_cdecl("c_value") + public func c_value(_ _result: UnsafeMutableRawPointer) { + _result.assumingMemoryBound(to: Point.self).initialize(to: value) + } + """, expectedCFunction: "void c_value(void *_result)" ) } @@ -448,19 +471,21 @@ final class FunctionLoweringTests { @Test("Lowering set accessor") func lowerGlobalSetAccessor() throws { try assertLoweredVariableAccessor( - DeclSyntax(""" - var value: Point { get { Point() } set {} } - """).cast(VariableDeclSyntax.self), + DeclSyntax( + """ + var value: Point { get { Point() } set {} } + """ + ).cast(VariableDeclSyntax.self), isSet: true, sourceFile: """ - struct Point { } - """, + struct Point { } + """, expectedCDecl: """ - @_cdecl("c_value") - public func c_value(_ newValue: UnsafeRawPointer) { - value = newValue.assumingMemoryBound(to: Point.self).pointee - } - """, + @_cdecl("c_value") + public func c_value(_ newValue: UnsafeRawPointer) { + value = newValue.assumingMemoryBound(to: Point.self).pointee + } + """, expectedCFunction: "void c_value(const void *newValue)" ) } @@ -468,20 +493,22 @@ final class FunctionLoweringTests { @Test("Lowering member read accessor") func lowerMemberReadAccessor() throws { try assertLoweredVariableAccessor( - DeclSyntax(""" - var value: Int - """).cast(VariableDeclSyntax.self), + DeclSyntax( + """ + var value: Int + """ + ).cast(VariableDeclSyntax.self), isSet: false, sourceFile: """ - struct Point { } - """, + struct Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_value") - public func c_value(_ self: UnsafeRawPointer) -> Int { - return self.assumingMemoryBound(to: Point.self).pointee.value - } - """, + @_cdecl("c_value") + public func c_value(_ self: UnsafeRawPointer) -> Int { + return self.assumingMemoryBound(to: Point.self).pointee.value + } + """, expectedCFunction: "ptrdiff_t c_value(const void *self)" ) } @@ -489,20 +516,22 @@ final class FunctionLoweringTests { @Test("Lowering member set accessor") func lowerMemberSetAccessor() throws { try assertLoweredVariableAccessor( - DeclSyntax(""" - var value: Point - """).cast(VariableDeclSyntax.self), + DeclSyntax( + """ + var value: Point + """ + ).cast(VariableDeclSyntax.self), isSet: true, sourceFile: """ - class Point { } - """, + class Point { } + """, enclosingType: "Point", expectedCDecl: """ - @_cdecl("c_value") - public func c_value(_ newValue: UnsafeRawPointer, _ self: UnsafeRawPointer) { - self.assumingMemoryBound(to: Point.self).pointee.value = newValue.assumingMemoryBound(to: Point.self).pointee - } - """, + @_cdecl("c_value") + public func c_value(_ newValue: UnsafeRawPointer, _ self: UnsafeRawPointer) { + self.assumingMemoryBound(to: Point.self).pointee.value = newValue.assumingMemoryBound(to: Point.self).pointee + } + """, expectedCFunction: "void c_value(const void *newValue, const void *self)" ) } diff --git a/Tests/JExtractSwiftTests/InternalExtractTests.swift b/Tests/JExtractSwiftTests/InternalExtractTests.swift index 54829bd77..11d0d54d4 100644 --- a/Tests/JExtractSwiftTests/InternalExtractTests.swift +++ b/Tests/JExtractSwiftTests/InternalExtractTests.swift @@ -30,7 +30,8 @@ final class InternalExtractTests { try assertOutput( input: text, config: config, - .ffm, .java, + .ffm, + .java, expectedChunks: [ """ /** @@ -42,8 +43,8 @@ final class InternalExtractTests { public static void catchMeIfYouCan() { swiftjava_SwiftModule_catchMeIfYouCan.call(); } - """, + """ ] ) } -} \ No newline at end of file +} diff --git a/Tests/JExtractSwiftTests/JNI/JNIArrayTest.swift b/Tests/JExtractSwiftTests/JNI/JNIArrayTest.swift index 867d7a9c1..84325c1ed 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIArrayTest.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIArrayTest.swift @@ -22,7 +22,8 @@ struct JNIArrayTest { func uint8Array_explicitType_java() throws { try assertOutput( input: "public func f(array: Array) -> Array {}", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -41,7 +42,8 @@ struct JNIArrayTest { func uint8Array_explicitType_swift() throws { try assertOutput( input: "public func f(array: Array) -> Array {}", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -58,7 +60,8 @@ struct JNIArrayTest { func uint8Array_syntaxSugar_java() throws { try assertOutput( input: "public func f(array: Array) -> Array {}", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -77,7 +80,8 @@ struct JNIArrayTest { func uint8Array_syntaxSugar_swift() throws { try assertOutput( input: "public func f(array: [UInt8]) -> [UInt8] {}", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -94,7 +98,8 @@ struct JNIArrayTest { func int64Array_syntaxSugar_java() throws { try assertOutput( input: "public func f(array: [Int64]) -> [Int64] {}", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -113,7 +118,8 @@ struct JNIArrayTest { func int64Array_syntaxSugar_swift() throws { try assertOutput( input: "public func f(array: [Int64]) -> [Int64] {}", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -130,10 +136,11 @@ struct JNIArrayTest { func swiftClassArray_syntaxSugar_java() throws { try assertOutput( input: """ - public class MySwiftClass {} - public func f(array: [MySwiftClass]) -> [MySwiftClass] {} - """, - .jni, .java, + public class MySwiftClass {} + public func f(array: [MySwiftClass]) -> [MySwiftClass] {} + """, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -155,10 +162,11 @@ struct JNIArrayTest { func swiftClassArray_syntaxSugar_swift() throws { try assertOutput( input: """ - public class MySwiftClass {} - public func f(array: [MySwiftClass]) -> [MySwiftClass] {} - """, - .jni, .swift, + public class MySwiftClass {} + public func f(array: [MySwiftClass]) -> [MySwiftClass] {} + """, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ diff --git a/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift b/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift index 317c194d5..4d0f17ce9 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIAsyncTests.swift @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// import JExtractSwiftLib -import Testing import SwiftJavaConfigurationShared +import Testing @Suite struct JNIAsyncTests { @@ -23,7 +23,8 @@ struct JNIAsyncTests { func completableFuture_asyncVoid_java() throws { try assertOutput( input: "public func asyncVoid() async", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -53,7 +54,8 @@ struct JNIAsyncTests { func completableFuture_asyncVoid_swift() throws { try assertOutput( input: "public func asyncVoid() async", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -97,7 +99,8 @@ struct JNIAsyncTests { func completableFuture_asyncThrowsVoid_java() throws { try assertOutput( input: "public func async() async throws", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -127,7 +130,8 @@ struct JNIAsyncTests { func completableFuture_asyncThrowsVoid_swift() throws { try assertOutput( input: "public func async() async throws", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -185,7 +189,8 @@ struct JNIAsyncTests { func completableFuture_asyncIntToInt_java() throws { try assertOutput( input: "public func async(i: Int64) async -> Int64", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -215,7 +220,8 @@ struct JNIAsyncTests { func completableFuture_asyncIntToInt_swift() throws { try assertOutput( input: "public func async(i: Int64) async -> Int64", - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -262,11 +268,12 @@ struct JNIAsyncTests { func completableFuture_asyncMyClassToMyClass_java() throws { try assertOutput( input: """ - class MyClass { } + class MyClass { } - public func async(c: MyClass) async -> MyClass - """, - .jni, .java, + public func async(c: MyClass) async -> MyClass + """, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -296,11 +303,12 @@ struct JNIAsyncTests { func completableFuture_asyncMyClassToMyClass_swift() throws { try assertOutput( input: """ - class MyClass { } + class MyClass { } - public func async(c: MyClass) async -> MyClass - """, - .jni, .swift, + public func async(c: MyClass) async -> MyClass + """, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -359,9 +367,10 @@ struct JNIAsyncTests { func completableFuture_asyncStringToString_java() throws { try assertOutput( input: """ - public func async(s: String) async -> String - """, - .jni, .java, + public func async(s: String) async -> String + """, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -385,9 +394,10 @@ struct JNIAsyncTests { func completableFuture_asyncStringToString_swift() throws { try assertOutput( input: """ - public func async(s: String) async -> String - """, - .jni, .swift, + public func async(s: String) async -> String + """, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -417,12 +427,13 @@ struct JNIAsyncTests { try assertOutput( input: """ - class MyClass { } + class MyClass { } - public func async(c: MyClass) async -> MyClass - """, + public func async(c: MyClass) async -> MyClass + """, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -449,12 +460,13 @@ struct JNIAsyncTests { try assertOutput( input: """ - class MyClass { } + class MyClass { } - public func async(c: MyClass) async -> MyClass - """, + public func async(c: MyClass) async -> MyClass + """, config: config, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ diff --git a/Tests/JExtractSwiftTests/JNI/JNIClassTests.swift b/Tests/JExtractSwiftTests/JNI/JNIClassTests.swift index 9e78feb59..3fba9755d 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIClassTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIClassTests.swift @@ -45,7 +45,8 @@ struct JNIClassTests { func generatesJavaClass() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, expectedChunks: [ """ // Generated by jextract-swift @@ -92,19 +93,23 @@ struct JNIClassTests { public static MyClass wrapMemoryAddressUnsafe(long selfPointer, SwiftArena swiftArena) { return new MyClass(selfPointer, swiftArena); } - """ - ]) + """, + ] + ) try assertOutput( input: source, - .jni, .java, + .jni, + .java, expectedChunks: [ """ private static native void $destroy(long selfPointer); """ - ]) + ] + ) try assertOutput( input: source, - .jni, .java, + .jni, + .java, expectedChunks: [ """ @Override @@ -125,7 +130,8 @@ struct JNIClassTests { } }; """ - ]) + ] + ) } @Test diff --git a/Tests/JExtractSwiftTests/JNI/JNIClosureTests.swift b/Tests/JExtractSwiftTests/JNI/JNIClosureTests.swift index d9aaf9b89..8cab76f0d 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIClosureTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIClosureTests.swift @@ -25,30 +25,35 @@ struct JNIClosureTests { @Test func emptyClosure_javaBindings() throws { - try assertOutput(input: source, .jni, .java, expectedChunks: [ - """ - public static class emptyClosure { - @FunctionalInterface - public interface closure { - void apply(); + try assertOutput( + input: source, + .jni, + .java, + expectedChunks: [ + """ + public static class emptyClosure { + @FunctionalInterface + public interface closure { + void apply(); + } } - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func emptyClosure(closure: () -> ()) - * } - */ - public static void emptyClosure(com.example.swift.SwiftModule.emptyClosure.closure closure) { - SwiftModule.$emptyClosure(closure); - } - """, - """ - private static native void $emptyClosure(com.example.swift.SwiftModule.emptyClosure.closure closure); - """ - ]) + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func emptyClosure(closure: () -> ()) + * } + */ + public static void emptyClosure(com.example.swift.SwiftModule.emptyClosure.closure closure) { + SwiftModule.$emptyClosure(closure); + } + """, + """ + private static native void $emptyClosure(com.example.swift.SwiftModule.emptyClosure.closure closure); + """, + ] + ) } @Test @@ -77,30 +82,35 @@ struct JNIClosureTests { @Test func closureWithArgumentsAndReturn_javaBindings() throws { - try assertOutput(input: source, .jni, .java, expectedChunks: [ - """ - public static class closureWithArgumentsAndReturn { - @FunctionalInterface - public interface closure { - long apply(long _0, boolean _1); + try assertOutput( + input: source, + .jni, + .java, + expectedChunks: [ + """ + public static class closureWithArgumentsAndReturn { + @FunctionalInterface + public interface closure { + long apply(long _0, boolean _1); + } } - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func closureWithArgumentsAndReturn(closure: (Int64, Bool) -> Int64) - * } - */ - public static void closureWithArgumentsAndReturn(com.example.swift.SwiftModule.closureWithArgumentsAndReturn.closure closure) { - SwiftModule.$closureWithArgumentsAndReturn(closure); - } - """, - """ - private static native void $closureWithArgumentsAndReturn(com.example.swift.SwiftModule.closureWithArgumentsAndReturn.closure closure); - """ - ]) + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func closureWithArgumentsAndReturn(closure: (Int64, Bool) -> Int64) + * } + */ + public static void closureWithArgumentsAndReturn(com.example.swift.SwiftModule.closureWithArgumentsAndReturn.closure closure) { + SwiftModule.$closureWithArgumentsAndReturn(closure); + } + """, + """ + private static native void $closureWithArgumentsAndReturn(com.example.swift.SwiftModule.closureWithArgumentsAndReturn.closure closure); + """, + ] + ) } @Test diff --git a/Tests/JExtractSwiftTests/JNI/JNIEnumTests.swift b/Tests/JExtractSwiftTests/JNI/JNIEnumTests.swift index bf9d53562..a211227ba 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIEnumTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIEnumTests.swift @@ -29,7 +29,8 @@ struct JNIEnumTests { func generatesJavaClass() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, expectedChunks: [ """ // Generated by jextract-swift @@ -98,15 +99,17 @@ struct JNIEnumTests { MyEnum.$destroy(self$); } }; - """ - ]) + """, + ] + ) } @Test func generatesDiscriminator_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -123,15 +126,17 @@ struct JNIEnumTests { """, """ private static native int $getDiscriminator(long self); - """ - ]) + """, + ] + ) } @Test func generatesDiscriminator_swift() throws { try assertOutput( input: source, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -145,14 +150,16 @@ struct JNIEnumTests { } } """ - ]) + ] + ) } @Test func generatesCases_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -183,15 +190,17 @@ struct JNIEnumTests { public record Third(long x, int y) implements Case { record _NativeParameters(long x, int y) {} } - """ - ]) + """, + ] + ) } @Test func generatesCaseInitializers_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -208,15 +217,17 @@ struct JNIEnumTests { public static MyEnum third(long x, int y, SwiftArena swiftArena$) { return MyEnum.wrapMemoryAddressUnsafe(MyEnum.$third(x, y), swiftArena$); } - """ - ]) + """, + ] + ) } @Test func generatesCaseInitializers_swift() throws { try assertOutput( input: source, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -245,15 +256,17 @@ struct JNIEnumTests { let resultBits$ = Int64(Int(bitPattern: result$)) return resultBits$.getJNIValue(in: environment) } - """ - ]) + """, + ] + ) } @Test func generatesGetAsCase_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -281,15 +294,17 @@ struct JNIEnumTests { Third._NativeParameters $nativeParameters = MyEnum.$getAsThird(this.$memoryAddress()); return Optional.of(new Third($nativeParameters.x, $nativeParameters.y)); } - """ - ]) + """, + ] + ) } @Test func generatesGetAsCase_swift() throws { try assertOutput( input: source, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -321,7 +336,8 @@ struct JNIEnumTests { let newObjectArgs$: [jvalue] = [jvalue(j: x.getJNIValue(in: environment)), jvalue(i: y.getJNIValue(in: environment))] return environment.interface.NewObjectA(environment, class$, constructorID$, newObjectArgs$) } - """ - ]) + """, + ] + ) } } diff --git a/Tests/JExtractSwiftTests/JNI/JNIEscapingClosureTests.swift b/Tests/JExtractSwiftTests/JNI/JNIEscapingClosureTests.swift index 8501014e7..37ff48f30 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIEscapingClosureTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIEscapingClosureTests.swift @@ -36,7 +36,7 @@ struct JNIEscapingClosureTests { callback = nil } } - + public func delayedExecution(closure: @escaping (Int64) -> Int64, input: Int64) -> Int64 { // Simplified for testing - would normally be async return closure(input) @@ -49,28 +49,33 @@ struct JNIEscapingClosureTests { """ public func setCallback(callback: @escaping () -> Void) {} """ - - try assertOutput(input: simpleSource, .jni, .java, expectedChunks: [ - """ - public static class setCallback { - @FunctionalInterface - public interface callback { - void apply(); + + try assertOutput( + input: simpleSource, + .jni, + .java, + expectedChunks: [ + """ + public static class setCallback { + @FunctionalInterface + public interface callback { + void apply(); + } } - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func setCallback(callback: @escaping () -> Void) - * } - */ - public static void setCallback(com.example.swift.SwiftModule.setCallback.callback callback) { - SwiftModule.$setCallback(callback); - } - """ - ]) + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func setCallback(callback: @escaping () -> Void) + * } + */ + public static void setCallback(com.example.swift.SwiftModule.setCallback.callback callback) { + SwiftModule.$setCallback(callback); + } + """, + ] + ) } @Test @@ -79,17 +84,22 @@ struct JNIEscapingClosureTests { """ public func delayedExecution(closure: @escaping (Int64) -> Int64) {} """ - - try assertOutput(input: source, .jni, .java, expectedChunks: [ - """ - public static class delayedExecution { - @FunctionalInterface - public interface closure { - long apply(long _0); + + try assertOutput( + input: source, + .jni, + .java, + expectedChunks: [ + """ + public static class delayedExecution { + @FunctionalInterface + public interface closure { + long apply(long _0); + } } - } - """ - ]) + """ + ] + ) } @Test @@ -98,7 +108,7 @@ struct JNIEscapingClosureTests { """ public func setCallback(callback: @escaping () -> Void) {} """ - + try assertOutput( input: source, .jni, @@ -118,15 +128,19 @@ struct JNIEscapingClosureTests { """ public func call(closure: () -> Void) {} """ - - try assertOutput(input: source, .jni, .java, expectedChunks: [ - """ - @FunctionalInterface - public interface closure { - void apply(); - } - """ - ]) + + try assertOutput( + input: source, + .jni, + .java, + expectedChunks: [ + """ + @FunctionalInterface + public interface closure { + void apply(); + } + """ + ] + ) } } - diff --git a/Tests/JExtractSwiftTests/JNI/JNIExtensionTests.swift b/Tests/JExtractSwiftTests/JNI/JNIExtensionTests.swift index e6cb10605..a0c9b698c 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIExtensionTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIExtensionTests.swift @@ -23,7 +23,7 @@ struct JNIExtensionTests { public var variableInExtension: String { get } public func methodInExtension() {} } - + public protocol MyProtocol {} public struct MyStruct {} extension MyStruct: MyProtocol {} @@ -33,7 +33,8 @@ struct JNIExtensionTests { func import_javaMethods() throws { try assertOutput( input: interfaceFile, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -43,14 +44,16 @@ struct JNIExtensionTests { ... } """ - ]) + ] + ) } @Test("Import extensions: Computed variables") func import_computedVariables() throws { try assertOutput( input: interfaceFile, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -60,6 +63,7 @@ struct JNIExtensionTests { ... } """ - ]) + ] + ) } } diff --git a/Tests/JExtractSwiftTests/JNI/JNIIntConversionChecksTests.swift b/Tests/JExtractSwiftTests/JNI/JNIIntConversionChecksTests.swift index 40c9f5bc4..c2a61bedf 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIIntConversionChecksTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIIntConversionChecksTests.swift @@ -12,220 +12,261 @@ // //===----------------------------------------------------------------------===// -@testable import JExtractSwiftLib import Testing +@testable import JExtractSwiftLib + struct JNIIntConversionChecksTests { private let signedSource = """ - public struct MyStruct { - public var normalInt: Int = 0 + public struct MyStruct { + public var normalInt: Int = 0 - public init(normalInt: Int) { - self.normalInt = normalInt + public init(normalInt: Int) { + self.normalInt = normalInt + } } - } - """ + """ private let unsignedSource = """ - public struct MyStruct { - public var unsignedInt: UInt = 0 + public struct MyStruct { + public var unsignedInt: UInt = 0 - public init(unsignedInt: UInt) { - self.unsignedInt = unsignedInt + public init(unsignedInt: UInt) { + self.unsignedInt = unsignedInt + } } - } - """ + """ private let signedFuncSource = """ - public struct MyStruct { - public func dummyFunc(arg: Int) -> Int { - return arg + public struct MyStruct { + public func dummyFunc(arg: Int) -> Int { + return arg + } } - } - """ + """ private let unsignedFuncSource = """ - public struct MyStruct { - public func dummyFunc(arg: UInt) -> UInt { - return arg + public struct MyStruct { + public func dummyFunc(arg: UInt) -> UInt { + return arg + } } - } - """ + """ private let enumSource = """ - public enum MyEnum { - case firstCase - case secondCase(UInt) - } - """ + public enum MyEnum { + case firstCase + case secondCase(UInt) + } + """ @Test func generatesInitWithSignedCheck() throws { - try assertOutput(input: signedSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024init__J") - public func Java_com_example_swift_MyStruct__00024init__J(environment: UnsafeMutablePointer!, thisClass: jclass, normalInt: jlong) -> jlong { - let normalInt$indirect = Int64(fromJNI: normalInt, in: environment) - #if _pointerBitWidth(_32) - guard normalInt$indirect >= Int32.min && normalInt$indirect <= Int32.max else { - environment.throwJavaException(javaException: .integerOverflow) - return Int64.jniPlaceholderValue - """, - """ - #endif - let result$ = UnsafeMutablePointer.allocate(capacity: 1) - result$.initialize(to: MyStruct.init(normalInt: Int(normalInt$indirect))) - let resultBits$ = Int64(Int(bitPattern: result$)) - return resultBits$.getJNIValue(in: environment) - """ - ]) + try assertOutput( + input: signedSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024init__J") + public func Java_com_example_swift_MyStruct__00024init__J(environment: UnsafeMutablePointer!, thisClass: jclass, normalInt: jlong) -> jlong { + let normalInt$indirect = Int64(fromJNI: normalInt, in: environment) + #if _pointerBitWidth(_32) + guard normalInt$indirect >= Int32.min && normalInt$indirect <= Int32.max else { + environment.throwJavaException(javaException: .integerOverflow) + return Int64.jniPlaceholderValue + """, + """ + #endif + let result$ = UnsafeMutablePointer.allocate(capacity: 1) + result$.initialize(to: MyStruct.init(normalInt: Int(normalInt$indirect))) + let resultBits$ = Int64(Int(bitPattern: result$)) + return resultBits$.getJNIValue(in: environment) + """, + ] + ) } @Test func geberatesInitWithUnsignedCheck() throws { - try assertOutput(input: unsignedSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024init__J") - public func Java_com_example_swift_MyStruct__00024init__J(environment: UnsafeMutablePointer!, thisClass: jclass, unsignedInt: jlong) -> jlong { - let unsignedInt$indirect = UInt64(fromJNI: unsignedInt, in: environment) - #if _pointerBitWidth(_32) - guard unsignedInt$indirect >= UInt32.min && unsignedInt$indirect <= UInt32.max else { - environment.throwJavaException(javaException: .integerOverflow) - return Int64.jniPlaceholderValue - """, - """ - #endif - let result$ = UnsafeMutablePointer.allocate(capacity: 1) - result$.initialize(to: MyStruct.init(unsignedInt: UInt(unsignedInt$indirect))) - let resultBits$ = Int64(Int(bitPattern: result$)) - return resultBits$.getJNIValue(in: environment) - """ - ]) - } - - @Test func generatesUnsignedSetterWithCheck() throws { - try assertOutput(input: unsignedSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024setUnsignedInt__JJ") - public func Java_com_example_swift_MyStruct__00024setUnsignedInt__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, newValue: jlong, self: jlong) { - let newValue$indirect = UInt64(fromJNI: newValue, in: environment) - #if _pointerBitWidth(_32) - guard newValue$indirect >= UInt32.min && newValue$indirect <= UInt32.max else { + try assertOutput( + input: unsignedSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024init__J") + public func Java_com_example_swift_MyStruct__00024init__J(environment: UnsafeMutablePointer!, thisClass: jclass, unsignedInt: jlong) -> jlong { + let unsignedInt$indirect = UInt64(fromJNI: unsignedInt, in: environment) + #if _pointerBitWidth(_32) + guard unsignedInt$indirect >= UInt32.min && unsignedInt$indirect <= UInt32.max else { environment.throwJavaException(javaException: .integerOverflow) - return - """, - """ - #endif - assert(self != 0, "self memory address was null") - let selfBits$ = Int(Int64(fromJNI: self, in: environment)) - let self$ = UnsafeMutablePointer(bitPattern: selfBits$) - guard let self$ else { - fatalError("self memory address was null in call to \\(#function)!") - } - self$.pointee.unsignedInt = UInt(newValue$indirect) - """ - ]) + return Int64.jniPlaceholderValue + """, + """ + #endif + let result$ = UnsafeMutablePointer.allocate(capacity: 1) + result$.initialize(to: MyStruct.init(unsignedInt: UInt(unsignedInt$indirect))) + let resultBits$ = Int64(Int(bitPattern: result$)) + return resultBits$.getJNIValue(in: environment) + """, + ] + ) } - @Test func generatesUnsignedGetterWithoutCheck() throws { - try assertOutput(input: unsignedSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024getUnsignedInt__J") - public func Java_com_example_swift_MyStruct__00024getUnsignedInt__J(environment: UnsafeMutablePointer!, thisClass: jclass, self: jlong) -> jlong { + @Test func generatesUnsignedSetterWithCheck() throws { + try assertOutput( + input: unsignedSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024setUnsignedInt__JJ") + public func Java_com_example_swift_MyStruct__00024setUnsignedInt__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, newValue: jlong, self: jlong) { + let newValue$indirect = UInt64(fromJNI: newValue, in: environment) + #if _pointerBitWidth(_32) + guard newValue$indirect >= UInt32.min && newValue$indirect <= UInt32.max else { + environment.throwJavaException(javaException: .integerOverflow) + return + """, + """ + #endif assert(self != 0, "self memory address was null") let selfBits$ = Int(Int64(fromJNI: self, in: environment)) let self$ = UnsafeMutablePointer(bitPattern: selfBits$) guard let self$ else { fatalError("self memory address was null in call to \\(#function)!") } - return self$.pointee.unsignedInt.getJNIValue(in: environment) - """ - ]) + self$.pointee.unsignedInt = UInt(newValue$indirect) + """, + ] + ) } - @Test func generatesSignedSetterWithCheck() throws { - try assertOutput(input: signedSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024setNormalInt__JJ") - public func Java_com_example_swift_MyStruct__00024setNormalInt__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, newValue: jlong, self: jlong) { - let newValue$indirect = Int64(fromJNI: newValue, in: environment) - #if _pointerBitWidth(_32) - guard newValue$indirect >= Int32.min && newValue$indirect <= Int32.max else { - environment.throwJavaException(javaException: .integerOverflow) - return - """, - """ - #endif - assert(self != 0, "self memory address was null") - let selfBits$ = Int(Int64(fromJNI: self, in: environment)) - let self$ = UnsafeMutablePointer(bitPattern: selfBits$) - guard let self$ else { - fatalError("self memory address was null in call to \\(#function)!") - } - self$.pointee.normalInt = Int(newValue$indirect) - """ - ]) + @Test func generatesUnsignedGetterWithoutCheck() throws { + try assertOutput( + input: unsignedSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024getUnsignedInt__J") + public func Java_com_example_swift_MyStruct__00024getUnsignedInt__J(environment: UnsafeMutablePointer!, thisClass: jclass, self: jlong) -> jlong { + assert(self != 0, "self memory address was null") + let selfBits$ = Int(Int64(fromJNI: self, in: environment)) + let self$ = UnsafeMutablePointer(bitPattern: selfBits$) + guard let self$ else { + fatalError("self memory address was null in call to \\(#function)!") + } + return self$.pointee.unsignedInt.getJNIValue(in: environment) + """ + ] + ) } - @Test func generatesFuncWithSignedCheck() throws { - try assertOutput(input: signedFuncSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024dummyFunc__JJ") - public func Java_com_example_swift_MyStruct__00024dummyFunc__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, arg: jlong, self: jlong) -> jlong { - let arg$indirect = Int64(fromJNI: arg, in: environment) + @Test func generatesSignedSetterWithCheck() throws { + try assertOutput( + input: signedSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024setNormalInt__JJ") + public func Java_com_example_swift_MyStruct__00024setNormalInt__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, newValue: jlong, self: jlong) { + let newValue$indirect = Int64(fromJNI: newValue, in: environment) #if _pointerBitWidth(_32) - guard arg$indirect >= Int32.min && arg$indirect <= Int32.max else { + guard newValue$indirect >= Int32.min && newValue$indirect <= Int32.max else { environment.throwJavaException(javaException: .integerOverflow) - return Int64.jniPlaceholderValue - """, - """ - #endif - assert(self != 0, "self memory address was null") - let selfBits$ = Int(Int64(fromJNI: self, in: environment)) - let self$ = UnsafeMutablePointer(bitPattern: selfBits$) - guard let self$ else { - fatalError("self memory address was null in call to \\(#function)!") - } - return self$.pointee.dummyFunc(arg: Int(arg$indirect)).getJNIValue(in: environment) - """ - ]) + return + """, + """ + #endif + assert(self != 0, "self memory address was null") + let selfBits$ = Int(Int64(fromJNI: self, in: environment)) + let self$ = UnsafeMutablePointer(bitPattern: selfBits$) + guard let self$ else { + fatalError("self memory address was null in call to \\(#function)!") + } + self$.pointee.normalInt = Int(newValue$indirect) + """, + ] + ) + } + + @Test func generatesFuncWithSignedCheck() throws { + try assertOutput( + input: signedFuncSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024dummyFunc__JJ") + public func Java_com_example_swift_MyStruct__00024dummyFunc__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, arg: jlong, self: jlong) -> jlong { + let arg$indirect = Int64(fromJNI: arg, in: environment) + #if _pointerBitWidth(_32) + guard arg$indirect >= Int32.min && arg$indirect <= Int32.max else { + environment.throwJavaException(javaException: .integerOverflow) + return Int64.jniPlaceholderValue + """, + """ + #endif + assert(self != 0, "self memory address was null") + let selfBits$ = Int(Int64(fromJNI: self, in: environment)) + let self$ = UnsafeMutablePointer(bitPattern: selfBits$) + guard let self$ else { + fatalError("self memory address was null in call to \\(#function)!") + } + return self$.pointee.dummyFunc(arg: Int(arg$indirect)).getJNIValue(in: environment) + """, + ] + ) } @Test func generatesFuncWithUnsignedCheck() throws { - try assertOutput(input: unsignedFuncSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyStruct__00024dummyFunc__JJ") - public func Java_com_example_swift_MyStruct__00024dummyFunc__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, arg: jlong, self: jlong) -> jlong { - let arg$indirect = UInt64(fromJNI: arg, in: environment) - #if _pointerBitWidth(_32) - guard arg$indirect >= UInt32.min && arg$indirect <= UInt32.max else { - environment.throwJavaException(javaException: .integerOverflow) - return Int64.jniPlaceholderValue - """, - """ - assert(self != 0, "self memory address was null") - let selfBits$ = Int(Int64(fromJNI: self, in: environment)) - let self$ = UnsafeMutablePointer(bitPattern: selfBits$) - guard let self$ else { - fatalError("self memory address was null in call to \\(#function)!") - } - return self$.pointee.dummyFunc(arg: UInt(arg$indirect)).getJNIValue(in: environment) - """ - ]) + try assertOutput( + input: unsignedFuncSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyStruct__00024dummyFunc__JJ") + public func Java_com_example_swift_MyStruct__00024dummyFunc__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, arg: jlong, self: jlong) -> jlong { + let arg$indirect = UInt64(fromJNI: arg, in: environment) + #if _pointerBitWidth(_32) + guard arg$indirect >= UInt32.min && arg$indirect <= UInt32.max else { + environment.throwJavaException(javaException: .integerOverflow) + return Int64.jniPlaceholderValue + """, + """ + assert(self != 0, "self memory address was null") + let selfBits$ = Int(Int64(fromJNI: self, in: environment)) + let self$ = UnsafeMutablePointer(bitPattern: selfBits$) + guard let self$ else { + fatalError("self memory address was null in call to \\(#function)!") + } + return self$.pointee.dummyFunc(arg: UInt(arg$indirect)).getJNIValue(in: environment) + """, + ] + ) } @Test func generatesEnumCaseWithUnsignedCheck() throws { - try assertOutput(input: enumSource, .jni, .swift, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_MyEnum__00024secondCase__J") - public func Java_com_example_swift_MyEnum__00024secondCase__J(environment: UnsafeMutablePointer!, thisClass: jclass, arg0: jlong) -> jlong { - let arg0$indirect = UInt64(fromJNI: arg0, in: environment) - #if _pointerBitWidth(_32) - guard arg0$indirect >= UInt32.min && arg0$indirect <= UInt32.max else { - environment.throwJavaException(javaException: .integerOverflow) - return Int64.jniPlaceholderValue - """, - """ - #endif - let result$ = UnsafeMutablePointer.allocate(capacity: 1) - result$.initialize(to: MyEnum.secondCase(UInt(arg0$indirect))) - let resultBits$ = Int64(Int(bitPattern: result$)) - return resultBits$.getJNIValue(in: environment) - """ - ]) + try assertOutput( + input: enumSource, + .jni, + .swift, + expectedChunks: [ + """ + @_cdecl("Java_com_example_swift_MyEnum__00024secondCase__J") + public func Java_com_example_swift_MyEnum__00024secondCase__J(environment: UnsafeMutablePointer!, thisClass: jclass, arg0: jlong) -> jlong { + let arg0$indirect = UInt64(fromJNI: arg0, in: environment) + #if _pointerBitWidth(_32) + guard arg0$indirect >= UInt32.min && arg0$indirect <= UInt32.max else { + environment.throwJavaException(javaException: .integerOverflow) + return Int64.jniPlaceholderValue + """, + """ + #endif + let result$ = UnsafeMutablePointer.allocate(capacity: 1) + result$.initialize(to: MyEnum.secondCase(UInt(arg0$indirect))) + let resultBits$ = Int64(Int(bitPattern: result$)) + return resultBits$.getJNIValue(in: environment) + """, + ] + ) } } diff --git a/Tests/JExtractSwiftTests/JNI/JNIJavaKitTests.swift b/Tests/JExtractSwiftTests/JNI/JNIJavaKitTests.swift index f2c3031d3..f66e454c6 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIJavaKitTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIJavaKitTests.swift @@ -24,7 +24,7 @@ struct JNIJavaKitTests { let classLookupTable = [ "JavaLong": "java.lang.Long", - "JavaInteger": "java.lang.Integer" + "JavaInteger": "java.lang.Integer", ] @Test @@ -35,20 +35,20 @@ struct JNIJavaKitTests { .java, javaClassLookupTable: classLookupTable, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func function(javaLong: JavaLong, javaInteger: JavaInteger, int: Int64) - * } - */ - public static void function(java.lang.Long javaLong, java.lang.Integer javaInteger, long int) { - SwiftModule.$function(javaLong, javaInteger, int); - } - """, - """ - private static native void $function(java.lang.Long javaLong, java.lang.Integer javaInteger, long int); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func function(javaLong: JavaLong, javaInteger: JavaInteger, int: Int64) + * } + */ + public static void function(java.lang.Long javaLong, java.lang.Integer javaInteger, long int) { + SwiftModule.$function(javaLong, javaInteger, int); + } + """, + """ + private static native void $function(java.lang.Long javaLong, java.lang.Integer javaInteger, long int); + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIModuleTests.swift b/Tests/JExtractSwiftTests/JNI/JNIModuleTests.swift index b1f0f2b89..728980ef3 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIModuleTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIModuleTests.swift @@ -18,47 +18,52 @@ import Testing @Suite struct JNIModuleTests { let globalMethodWithPrimitives = """ - public func helloWorld() - public func takeIntegers(i1: Int8, i2: Int16, i3: Int32, i4: Int64) -> UInt16 - public func otherPrimitives(b: Bool, f: Float, d: Double) - """ + public func helloWorld() + public func takeIntegers(i1: Int8, i2: Int16, i3: Int32, i4: Int64) -> UInt16 + public func otherPrimitives(b: Bool, f: Float, d: Double) + """ let globalMethodWithString = """ - public func copy(_ string: String) -> String - """ + public func copy(_ string: String) -> String + """ let globalMethodThrowing = """ - public func methodA() throws - public func methodB() throws -> Int64 - public func methodC() throws -> String - """ + public func methodA() throws + public func methodB() throws -> Int64 + public func methodC() throws -> String + """ @Test func generatesModuleJavaClass() throws { let input = "public func helloWorld()" - try assertOutput(input: input, .jni, .java, expectedChunks: [ - """ - // Generated by jextract-swift - // Swift module: SwiftModule + try assertOutput( + input: input, + .jni, + .java, + expectedChunks: [ + """ + // Generated by jextract-swift + // Swift module: SwiftModule - package com.example.swift; + package com.example.swift; - import org.swift.swiftkit.core.*; - import org.swift.swiftkit.core.util.*; - import java.util.*; - import java.util.concurrent.atomic.AtomicBoolean; - import org.swift.swiftkit.core.annotations.*; + import org.swift.swiftkit.core.*; + import org.swift.swiftkit.core.util.*; + import java.util.*; + import java.util.concurrent.atomic.AtomicBoolean; + import org.swift.swiftkit.core.annotations.*; - public final class SwiftModule { - static final String LIB_NAME = "SwiftModule"; + public final class SwiftModule { + static final String LIB_NAME = "SwiftModule"; - static { - System.loadLibrary(SwiftLibraries.LIB_NAME_SWIFT_JAVA); - System.loadLibrary(LIB_NAME); - } - """ - ]) + static { + System.loadLibrary(SwiftLibraries.LIB_NAME_SWIFT_JAVA); + System.loadLibrary(LIB_NAME); + } + """ + ] + ) } @Test @@ -110,7 +115,7 @@ struct JNIModuleTests { """, """ private static native void $otherPrimitives(boolean b, float f, double d); - """ + """, ] ) } @@ -140,7 +145,7 @@ struct JNIModuleTests { public func Java_com_example_swift_SwiftModule__00024otherPrimitives__ZFD(environment: UnsafeMutablePointer!, thisClass: jclass, b: jboolean, f: jfloat, d: jdouble) { SwiftModule.otherPrimitives(b: Bool(fromJNI: b, in: environment), f: Float(fromJNI: f, in: environment), d: Double(fromJNI: d, in: environment)) } - """ + """, ] ) } @@ -165,7 +170,7 @@ struct JNIModuleTests { """, """ private static native java.lang.String $copy(java.lang.String string); - """ + """, ] ) } @@ -178,12 +183,12 @@ struct JNIModuleTests { .swift, detectChunkByInitialLines: 1, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_SwiftModule__00024copy__Ljava_lang_String_2") - public func Java_com_example_swift_SwiftModule__00024copy__Ljava_lang_String_2(environment: UnsafeMutablePointer!, thisClass: jclass, string: jstring?) -> jstring? { - return SwiftModule.copy(String(fromJNI: string, in: environment)).getJNIValue(in: environment) - } - """, + """ + @_cdecl("Java_com_example_swift_SwiftModule__00024copy__Ljava_lang_String_2") + public func Java_com_example_swift_SwiftModule__00024copy__Ljava_lang_String_2(environment: UnsafeMutablePointer!, thisClass: jclass, string: jstring?) -> jstring? { + return SwiftModule.copy(String(fromJNI: string, in: environment)).getJNIValue(in: environment) + } + """ ] ) } @@ -222,7 +227,7 @@ struct JNIModuleTests { """, """ private static native long $methodB(); - """ + """, ] ) } @@ -235,39 +240,39 @@ struct JNIModuleTests { .swift, detectChunkByInitialLines: 1, expectedChunks: [ - """ - @_cdecl("Java_com_example_swift_SwiftModule__00024methodA__") - public func Java_com_example_swift_SwiftModule__00024methodA__(environment: UnsafeMutablePointer!, thisClass: jclass) { - do { - try SwiftModule.methodA() - } catch { - environment.throwAsException(error) - return - } + """ + @_cdecl("Java_com_example_swift_SwiftModule__00024methodA__") + public func Java_com_example_swift_SwiftModule__00024methodA__(environment: UnsafeMutablePointer!, thisClass: jclass) { + do { + try SwiftModule.methodA() + } catch { + environment.throwAsException(error) + return } - """, - """ - @_cdecl("Java_com_example_swift_SwiftModule__00024methodB__") - public func Java_com_example_swift_SwiftModule__00024methodB__(environment: UnsafeMutablePointer!, thisClass: jclass) -> jlong { - do { - return try SwiftModule.methodB().getJNIValue(in: environment) - } catch { - environment.throwAsException(error) - return Int64.jniPlaceholderValue - } + } + """, + """ + @_cdecl("Java_com_example_swift_SwiftModule__00024methodB__") + public func Java_com_example_swift_SwiftModule__00024methodB__(environment: UnsafeMutablePointer!, thisClass: jclass) -> jlong { + do { + return try SwiftModule.methodB().getJNIValue(in: environment) + } catch { + environment.throwAsException(error) + return Int64.jniPlaceholderValue } - """, - """ - @_cdecl("Java_com_example_swift_SwiftModule__00024methodC__") - public func Java_com_example_swift_SwiftModule__00024methodC__(environment: UnsafeMutablePointer!, thisClass: jclass) -> jstring? { - do { - return try SwiftModule.methodC().getJNIValue(in: environment) - } catch { - environment.throwAsException(error) - return String.jniPlaceholderValue - } + } + """, + """ + @_cdecl("Java_com_example_swift_SwiftModule__00024methodC__") + public func Java_com_example_swift_SwiftModule__00024methodC__(environment: UnsafeMutablePointer!, thisClass: jclass) -> jstring? { + do { + return try SwiftModule.methodC().getJNIValue(in: environment) + } catch { + environment.throwAsException(error) + return String.jniPlaceholderValue } - """ + } + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNINestedTypesTests.swift b/Tests/JExtractSwiftTests/JNI/JNINestedTypesTests.swift index a3285fba7..808fe99c7 100644 --- a/Tests/JExtractSwiftTests/JNI/JNINestedTypesTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNINestedTypesTests.swift @@ -18,24 +18,25 @@ import Testing @Suite struct JNINestedTypesTests { let source1 = """ - public class A { - public class B { - public func g(c: C) {} + public class A { + public class B { + public func g(c: C) {} - public struct C { - public func h(b: B) {} + public struct C { + public func h(b: B) {} + } } } - } - public func f(a: A, b: A.B, c: A.B.C) {} - """ + public func f(a: A, b: A.B, c: A.B.C) {} + """ @Test("Import: class and struct A.B.C (Java)") func nestedClassesAndStructs_java() throws { try assertOutput( input: source1, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -60,7 +61,7 @@ struct JNINestedTypesTests { ... } ... - """ + """, ] ) } @@ -69,7 +70,8 @@ struct JNINestedTypesTests { func nestedClassesAndStructs_swift() throws { try assertOutput( input: source1, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -95,7 +97,7 @@ struct JNINestedTypesTests { public func Java_com_example_swift_A_00024B_00024C__00024h__JJ(environment: UnsafeMutablePointer!, thisClass: jclass, b: jlong, self: jlong) { ... } - """ + """, ] ) } @@ -104,15 +106,16 @@ struct JNINestedTypesTests { func nestedEnums_java() throws { try assertOutput( input: """ - public enum MyError { - case text(TextMessage) + public enum MyError { + case text(TextMessage) - public struct TextMessage {} - } + public struct TextMessage {} + } - public func f(text: MyError.TextMessage) {} - """, - .jni, .java, + public func f(text: MyError.TextMessage) {} + """, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -130,7 +133,7 @@ struct JNINestedTypesTests { public static void f(MyError.TextMessage text) { ... } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIOptionalTests.swift b/Tests/JExtractSwiftTests/JNI/JNIOptionalTests.swift index 41ca5a3cd..c43d56835 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIOptionalTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIOptionalTests.swift @@ -28,7 +28,7 @@ struct JNIOptionalTests { """ let classLookupTable = [ - "JavaLong": "java.lang.Long", + "JavaLong": "java.lang.Long" ] @Test @@ -39,23 +39,23 @@ struct JNIOptionalTests { .java, javaClassLookupTable: classLookupTable, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func optionalSugar(_ arg: Int64?) -> Int32? - * } - */ - public static OptionalInt optionalSugar(OptionalLong arg) { - long result_combined$ = SwiftModule.$optionalSugar((byte) (arg.isPresent() ? 1 : 0), arg.orElse(0L)); - byte result_discriminator$ = (byte) (result_combined$ & 0xFF); - int result_value$ = (int) (result_combined$ >> 32); - return result_discriminator$ == 1 ? OptionalInt.of(result_value$) : OptionalInt.empty(); - } - """, - """ - private static native long $optionalSugar(byte arg_discriminator, long arg_value); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func optionalSugar(_ arg: Int64?) -> Int32? + * } + */ + public static OptionalInt optionalSugar(OptionalLong arg) { + long result_combined$ = SwiftModule.$optionalSugar((byte) (arg.isPresent() ? 1 : 0), arg.orElse(0L)); + byte result_discriminator$ = (byte) (result_combined$ & 0xFF); + int result_value$ = (int) (result_combined$ >> 32); + return result_discriminator$ == 1 ? OptionalInt.of(result_value$) : OptionalInt.empty(); + } + """, + """ + private static native long $optionalSugar(byte arg_discriminator, long arg_value); + """, ] ) } @@ -90,22 +90,22 @@ struct JNIOptionalTests { .java, javaClassLookupTable: classLookupTable, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func optionalExplicit(_ arg: Optional) -> Optional - * } - */ - public static Optional optionalExplicit(Optional arg) { - byte[] result$_discriminator$ = new byte[1]; - java.lang.String result$ = SwiftModule.$optionalExplicit((byte) (arg.isPresent() ? 1 : 0), arg.orElse(null), result$_discriminator$); - return (result$_discriminator$[0] == 1) ? Optional.of(result$) : Optional.empty(); - } - """, - """ - private static native java.lang.String $optionalExplicit(byte arg_discriminator, java.lang.String arg_value, byte[] result_discriminator$); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func optionalExplicit(_ arg: Optional) -> Optional + * } + */ + public static Optional optionalExplicit(Optional arg) { + byte[] result$_discriminator$ = new byte[1]; + java.lang.String result$ = SwiftModule.$optionalExplicit((byte) (arg.isPresent() ? 1 : 0), arg.orElse(null), result$_discriminator$); + return (result$_discriminator$[0] == 1) ? Optional.of(result$) : Optional.empty(); + } + """, + """ + private static native java.lang.String $optionalExplicit(byte arg_discriminator, java.lang.String arg_value, byte[] result_discriminator$); + """, ] ) } @@ -148,22 +148,22 @@ struct JNIOptionalTests { .java, javaClassLookupTable: classLookupTable, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func optionalClass(_ arg: MyClass?) -> MyClass? - * } - */ - public static Optional optionalClass(Optional arg, SwiftArena swiftArena$) { - byte[] result$_discriminator$ = new byte[1]; - long result$ = SwiftModule.$optionalClass(arg.map(MyClass::$memoryAddress).orElse(0L), result$_discriminator$); - return (result$_discriminator$[0] == 1) ? Optional.of(MyClass.wrapMemoryAddressUnsafe(result$, swiftArena$)) : Optional.empty(); - } - """, - """ - private static native long $optionalClass(long arg, byte[] result_discriminator$); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func optionalClass(_ arg: MyClass?) -> MyClass? + * } + */ + public static Optional optionalClass(Optional arg, SwiftArena swiftArena$) { + byte[] result$_discriminator$ = new byte[1]; + long result$ = SwiftModule.$optionalClass(arg.map(MyClass::$memoryAddress).orElse(0L), result$_discriminator$); + return (result$_discriminator$[0] == 1) ? Optional.of(MyClass.wrapMemoryAddressUnsafe(result$, swiftArena$)) : Optional.empty(); + } + """, + """ + private static native long $optionalClass(long arg, byte[] result_discriminator$); + """, ] ) } @@ -211,20 +211,20 @@ struct JNIOptionalTests { .java, javaClassLookupTable: classLookupTable, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public func optionalJavaKitClass(_ arg: JavaLong?) - * } - */ - public static void optionalJavaKitClass(Optional arg) { - SwiftModule.$optionalJavaKitClass(arg.orElse(null)); - } - """, - """ - private static native void $optionalJavaKitClass(java.lang.Long arg); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public func optionalJavaKitClass(_ arg: JavaLong?) + * } + */ + public static void optionalJavaKitClass(Optional arg) { + SwiftModule.$optionalJavaKitClass(arg.orElse(null)); + } + """, + """ + private static native void $optionalJavaKitClass(java.lang.Long arg); + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIProtocolTests.swift b/Tests/JExtractSwiftTests/JNI/JNIProtocolTests.swift index 2351311e7..57c7a4a7a 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIProtocolTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIProtocolTests.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJavaConfigurationShared import JExtractSwiftLib +import SwiftJavaConfigurationShared import Testing @Suite @@ -25,28 +25,29 @@ struct JNIProtocolTests { } let source = """ - public protocol SomeProtocol { - public func method() {} - public func withObject(c: SomeClass) -> SomeClass {} - } + public protocol SomeProtocol { + public func method() {} + public func withObject(c: SomeClass) -> SomeClass {} + } - public protocol B {} + public protocol B {} - public class SomeClass: SomeProtocol { - public func makeClass() -> SomeClass {} - } + public class SomeClass: SomeProtocol { + public func makeClass() -> SomeClass {} + } - public func takeProtocol(x: some SomeProtocol, y: any SomeProtocol) - public func takeGeneric(s: S) - public func takeComposite(x: any SomeProtocol & B) - """ + public func takeProtocol(x: some SomeProtocol, y: any SomeProtocol) + public func takeGeneric(s: S) + public func takeComposite(x: any SomeProtocol & B) + """ @Test func generatesJavaInterface() throws { try assertOutput( input: source, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -66,8 +67,9 @@ struct JNIProtocolTests { public SomeClass withObject(SomeClass c, SwiftArena swiftArena$); ... } - """ - ]) + """, + ] + ) } @Test @@ -75,7 +77,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -84,8 +87,9 @@ struct JNIProtocolTests { public SomeClass makeClass(SwiftArena swiftArena$) { ... } - """, - ]) + """ + ] + ) } @Test @@ -93,7 +97,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -103,8 +108,9 @@ struct JNIProtocolTests { """, """ private static native void $takeProtocol(java.lang.Object x, java.lang.Object y); - """ - ]) + """, + ] + ) } @Test @@ -112,7 +118,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -156,7 +163,7 @@ struct JNIProtocolTests { } SwiftModule.takeProtocol(x: xswiftObject$, y: yswiftObject$) } - """ + """, ] ) } @@ -166,7 +173,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -176,8 +184,9 @@ struct JNIProtocolTests { """, """ private static native void $takeGeneric(java.lang.Object s); - """ - ]) + """, + ] + ) } @Test @@ -185,7 +194,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -209,7 +219,7 @@ struct JNIProtocolTests { } SwiftModule.takeGeneric(s: sswiftObject$) } - """ + """, ] ) } @@ -219,7 +229,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -229,8 +240,9 @@ struct JNIProtocolTests { """, """ private static native void $takeComposite(java.lang.Object x); - """ - ]) + """, + ] + ) } @Test @@ -238,7 +250,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -280,7 +293,7 @@ struct JNIProtocolTests { } SwiftModule.takeComposite(x: xswiftObject$) } - """ + """, ] ) } @@ -290,7 +303,8 @@ struct JNIProtocolTests { try assertOutput( input: source, config: config, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -324,7 +338,7 @@ struct JNIProtocolTests { """ extension SwiftJavaBWrapper { } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIStructTests.swift b/Tests/JExtractSwiftTests/JNI/JNIStructTests.swift index e73e4b312..e98d5fb2e 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIStructTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIStructTests.swift @@ -34,7 +34,9 @@ struct JNIStructTests { @Test func generatesJavaClass() throws { try assertOutput( - input: source, .jni, .java, + input: source, + .jni, + .java, expectedChunks: [ """ // Generated by jextract-swift @@ -44,8 +46,14 @@ struct JNIStructTests { import org.swift.swiftkit.core.*; import org.swift.swiftkit.core.util.*; - """,]) - try assertOutput(input: source, .jni, .java, expectedChunks: [ + """ + ] + ) + try assertOutput( + input: source, + .jni, + .java, + expectedChunks: [ """ public final class MyStruct implements JNISwiftInstance { static final String LIB_NAME = "SwiftModule"; @@ -71,17 +79,23 @@ struct JNIStructTests { public static MyStruct wrapMemoryAddressUnsafe(long selfPointer, SwiftArena swiftArena) { return new MyStruct(selfPointer, swiftArena); } - """ - ]) + """, + ] + ) try assertOutput( - input: source, .jni, .java, + input: source, + .jni, + .java, expectedChunks: [ """ private static native void $destroy(long selfPointer); """ - ]) + ] + ) try assertOutput( - input: source, .jni, .java, + input: source, + .jni, + .java, expectedChunks: [ """ @Override @@ -103,7 +117,8 @@ struct JNIStructTests { }; } """ - ]) + ] + ) } @Test diff --git a/Tests/JExtractSwiftTests/JNI/JNISubscriptsTests.swift b/Tests/JExtractSwiftTests/JNI/JNISubscriptsTests.swift index 5a12e9a5a..0d058bca4 100644 --- a/Tests/JExtractSwiftTests/JNI/JNISubscriptsTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNISubscriptsTests.swift @@ -18,73 +18,86 @@ import Testing @Suite struct JNISubscriptsTests { private let noParamsSubscriptSource = """ - public struct MyStruct { - private var testVariable: Double = 0 + public struct MyStruct { + private var testVariable: Double = 0 - public subscript() -> Double { - get { return testVariable } - set { testVariable = newValue } + public subscript() -> Double { + get { return testVariable } + set { testVariable = newValue } + } } - } - """ + """ private let subscriptWithParamsSource = """ - public struct MyStruct { - private var testVariable: [Int32] = [] + public struct MyStruct { + private var testVariable: [Int32] = [] - public subscript(index: Int32) -> Int32 { - get { return testVariable[Int(index)] } - set { testVariable[Int(index)] = newValue } + public subscript(index: Int32) -> Int32 { + get { return testVariable[Int(index)] } + set { testVariable[Int(index)] = newValue } + } } - } - """ + """ @Test("Test generation of JavaClass for subscript with no parameters") func generatesJavaClassForNoParams() throws { - try assertOutput(input: noParamsSubscriptSource, .jni, .java, expectedChunks: [ - """ - public double getSubscript() { - return MyStruct.$getSubscript(this.$memoryAddress()); - """, - """ - private static native double $getSubscript(long self); - """, - """ - public void setSubscript(double newValue) { - MyStruct.$setSubscript(newValue, this.$memoryAddress()); - """, - """ - private static native void $setSubscript(double newValue, long self); - """ - ]) try assertOutput( - input: noParamsSubscriptSource, .jni, .java, + input: noParamsSubscriptSource, + .jni, + .java, + expectedChunks: [ + """ + public double getSubscript() { + return MyStruct.$getSubscript(this.$memoryAddress()); + """, + """ + private static native double $getSubscript(long self); + """, + """ + public void setSubscript(double newValue) { + MyStruct.$setSubscript(newValue, this.$memoryAddress()); + """, + """ + private static native void $setSubscript(double newValue, long self); + """, + ] + ) + try assertOutput( + input: noParamsSubscriptSource, + .jni, + .java, expectedChunks: [ """ private static native void $destroy(long selfPointer); """ - ]) + ] + ) } @Test("Test generation of JavaClass for subscript with parameters") func generatesJavaClassForParameters() throws { - try assertOutput(input: subscriptWithParamsSource, .jni, .java, expectedChunks: [ - """ - public int getSubscript(int index) { - return MyStruct.$getSubscript(index, this.$memoryAddress()); + try assertOutput( + input: subscriptWithParamsSource, + .jni, + .java, + expectedChunks: [ + """ + public int getSubscript(int index) { + return MyStruct.$getSubscript(index, this.$memoryAddress()); - """, - """ - private static native int $getSubscript(int index, long self); - """, - """ - public void setSubscript(int index, int newValue) { - MyStruct.$setSubscript(index, newValue, this.$memoryAddress()); - """, - """ - private static native void $setSubscript(int index, int newValue, long self); - """ - ]) + """, + """ + private static native int $getSubscript(int index, long self); + """, + """ + public void setSubscript(int index, int newValue) { + MyStruct.$setSubscript(index, newValue, this.$memoryAddress()); + """, + """ + private static native void $setSubscript(int index, int newValue, long self); + """, + ] + ) } @Test("Test generation of Swift thunks for subscript without parameters") @@ -115,7 +128,7 @@ struct JNISubscriptsTests { fatalError("self memory address was null in call to \\(#function)!") } self$.pointee[] = Double(fromJNI: newValue, in: environment) - """ + """, ] ) } @@ -148,7 +161,7 @@ struct JNISubscriptsTests { fatalError("self memory address was null in call to \\(#function)!") } self$.pointee[Int32(fromJNI: index, in: environment)] = Int32(fromJNI: newValue, in: environment) - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIToStringTests.swift b/Tests/JExtractSwiftTests/JNI/JNIToStringTests.swift index d0fdcb474..e67561b81 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIToStringTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIToStringTests.swift @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// import JExtractSwiftLib -import Testing import SwiftJavaConfigurationShared +import Testing @Suite struct JNIToStringTests { @@ -27,7 +27,8 @@ struct JNIToStringTests { func toString_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -37,7 +38,7 @@ struct JNIToStringTests { """, """ private static native java.lang.String $toString(long selfPointer); - """ + """, ] ) } @@ -46,7 +47,8 @@ struct JNIToStringTests { func toString_swift() throws { try assertOutput( input: source, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -55,7 +57,7 @@ struct JNIToStringTests { ... return String(describing: self$.pointee).getJNIValue(in: environment) } - """, + """ ] ) } @@ -64,14 +66,15 @@ struct JNIToStringTests { func toDebugString_java() throws { try assertOutput( input: source, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ public String toDebugString() { return $toDebugString(this.$memoryAddress()); } - """, + """ ] ) } @@ -80,7 +83,8 @@ struct JNIToStringTests { func toDebugString_swift() throws { try assertOutput( input: source, - .jni, .swift, + .jni, + .swift, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -89,7 +93,7 @@ struct JNIToStringTests { ... return String(reflecting: self$.pointee).getJNIValue(in: environment) } - """, + """ ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIUnsignedNumberTests.swift b/Tests/JExtractSwiftTests/JNI/JNIUnsignedNumberTests.swift index ae8592ecb..a18cb0d24 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIUnsignedNumberTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIUnsignedNumberTests.swift @@ -22,7 +22,8 @@ final class JNIUnsignedNumberTests { func jni_unsignedChar() throws { try assertOutput( input: "public func unsignedChar(_ arg: UInt16)", - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -50,7 +51,8 @@ final class JNIUnsignedNumberTests { try assertOutput( input: "public func unsignedInt(_ arg: UInt32)", config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -64,7 +66,7 @@ final class JNIUnsignedNumberTests { SwiftModule.$unsignedInt(arg); } private static native void $unsignedInt(int arg); - """, + """ ] ) } @@ -76,7 +78,8 @@ final class JNIUnsignedNumberTests { try assertOutput( input: "public func returnUnsignedInt() -> UInt32", config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -91,7 +94,7 @@ final class JNIUnsignedNumberTests { return SwiftModule.$returnUnsignedInt(); } private static native int $returnUnsignedInt(); - """, + """ ] ) } @@ -103,7 +106,8 @@ final class JNIUnsignedNumberTests { try assertOutput( input: "public func unsignedLong(first: UInt64, second: UInt32) -> UInt32", config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 2, expectedChunks: [ """ @@ -118,7 +122,7 @@ final class JNIUnsignedNumberTests { return SwiftModule.$unsignedLong(first, second); } private static native int $unsignedLong(long first, int second); - """, + """ ] ) } diff --git a/Tests/JExtractSwiftTests/JNI/JNIVariablesTests.swift b/Tests/JExtractSwiftTests/JNI/JNIVariablesTests.swift index 10a3c08da..cb8e80f85 100644 --- a/Tests/JExtractSwiftTests/JNI/JNIVariablesTests.swift +++ b/Tests/JExtractSwiftTests/JNI/JNIVariablesTests.swift @@ -40,22 +40,27 @@ struct JNIVariablesTests { @Test func constant_javaBindings() throws { - try assertOutput(input: membersSource, .jni, .java, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public let constant: Int64 - * } - */ - public long getConstant() { - return MyClass.$getConstant(this.$memoryAddress()); - } - """, - """ - private static native long $getConstant(long self); - """ - ]) + try assertOutput( + input: membersSource, + .jni, + .java, + expectedChunks: [ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public let constant: Int64 + * } + */ + public long getConstant() { + return MyClass.$getConstant(this.$memoryAddress()); + } + """, + """ + private static native long $getConstant(long self); + """, + ] + ) } @Test @@ -85,34 +90,34 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var mutable: Int64 - * } - */ - public long getMutable() { - return MyClass.$getMutable(this.$memoryAddress()); - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var mutable: Int64 - * } - */ - public void setMutable(long newValue) { - MyClass.$setMutable(newValue, this.$memoryAddress()); - } - """, - """ - private static native long $getMutable(long self); - """, - """ - private static native void $setMutable(long newValue, long self); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var mutable: Int64 + * } + */ + public long getMutable() { + return MyClass.$getMutable(this.$memoryAddress()); + } + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var mutable: Int64 + * } + */ + public void setMutable(long newValue) { + MyClass.$setMutable(newValue, this.$memoryAddress()); + } + """, + """ + private static native long $getMutable(long self); + """, + """ + private static native void $setMutable(long newValue, long self); + """, ] ) } @@ -145,7 +150,7 @@ struct JNIVariablesTests { ... self$.pointee.mutable = Int64(fromJNI: newValue, in: environment) } - """ + """, ] ) } @@ -158,20 +163,20 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var computed: Int64 - * } - */ - public long getComputed() { - return MyClass.$getComputed(this.$memoryAddress()); - } - """, - """ - private static native long $getComputed(long self); - """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var computed: Int64 + * } + */ + public long getComputed() { + return MyClass.$getComputed(this.$memoryAddress()); + } + """, + """ + private static native long $getComputed(long self); + """, ] ) } @@ -190,7 +195,7 @@ struct JNIVariablesTests { ... return self$.pointee.computed.getJNIValue(in: environment) } - """, + """ ] ) } @@ -203,20 +208,20 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var computedThrowing: Int64 - * } - */ - public long getComputedThrowing() throws Exception { - return MyClass.$getComputedThrowing(this.$memoryAddress()); - } - """, - """ - private static native long $getComputedThrowing(long self); - """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var computedThrowing: Int64 + * } + */ + public long getComputedThrowing() throws Exception { + return MyClass.$getComputedThrowing(this.$memoryAddress()); + } + """, + """ + private static native long $getComputedThrowing(long self); + """, ] ) } @@ -240,7 +245,7 @@ struct JNIVariablesTests { return Int64.jniPlaceholderValue } } - """, + """ ] ) } @@ -253,34 +258,34 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var getterAndSetter: Int64 - * } - */ - public long getGetterAndSetter() { - return MyClass.$getGetterAndSetter(this.$memoryAddress()); - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var getterAndSetter: Int64 - * } - */ - public void setGetterAndSetter(long newValue) { - MyClass.$setGetterAndSetter(newValue, this.$memoryAddress()); - } - """, - """ - private static native long $getGetterAndSetter(long self); - """, - """ - private static native void $setGetterAndSetter(long newValue, long self); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var getterAndSetter: Int64 + * } + */ + public long getGetterAndSetter() { + return MyClass.$getGetterAndSetter(this.$memoryAddress()); + } + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var getterAndSetter: Int64 + * } + */ + public void setGetterAndSetter(long newValue) { + MyClass.$setGetterAndSetter(newValue, this.$memoryAddress()); + } + """, + """ + private static native long $getGetterAndSetter(long self); + """, + """ + private static native void $setGetterAndSetter(long newValue, long self); + """, ] ) } @@ -306,7 +311,7 @@ struct JNIVariablesTests { ... self$.pointee.getterAndSetter = Int64(fromJNI: newValue, in: environment) } - """ + """, ] ) } @@ -319,34 +324,34 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var someBoolean: Bool - * } - */ - public boolean isSomeBoolean() { - return MyClass.$isSomeBoolean(this.$memoryAddress()); - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var someBoolean: Bool - * } - */ - public void setSomeBoolean(boolean newValue) { - MyClass.$setSomeBoolean(newValue, this.$memoryAddress()); - } - """, - """ - private static native boolean $isSomeBoolean(long self); - """, - """ - private static native void $setSomeBoolean(boolean newValue, long self); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var someBoolean: Bool + * } + */ + public boolean isSomeBoolean() { + return MyClass.$isSomeBoolean(this.$memoryAddress()); + } + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var someBoolean: Bool + * } + */ + public void setSomeBoolean(boolean newValue) { + MyClass.$setSomeBoolean(newValue, this.$memoryAddress()); + } + """, + """ + private static native boolean $isSomeBoolean(long self); + """, + """ + private static native void $setSomeBoolean(boolean newValue, long self); + """, ] ) } @@ -372,7 +377,7 @@ struct JNIVariablesTests { ... self$.pointee.someBoolean = Bool(fromJNI: newValue, in: environment) } - """ + """, ] ) } @@ -385,34 +390,34 @@ struct JNIVariablesTests { .java, detectChunkByInitialLines: 8, expectedChunks: [ - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var isBoolean: Bool - * } - */ - public boolean isBoolean() { - return MyClass.$isBoolean(this.$memoryAddress()); - } - """, - """ - /** - * Downcall to Swift: - * {@snippet lang=swift : - * public var isBoolean: Bool - * } - */ - public void setBoolean(boolean newValue) { - MyClass.$setBoolean(newValue, this.$memoryAddress()); - } - """, - """ - private static native boolean $isBoolean(long self); - """, - """ - private static native void $setBoolean(boolean newValue, long self); - """ + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var isBoolean: Bool + * } + */ + public boolean isBoolean() { + return MyClass.$isBoolean(this.$memoryAddress()); + } + """, + """ + /** + * Downcall to Swift: + * {@snippet lang=swift : + * public var isBoolean: Bool + * } + */ + public void setBoolean(boolean newValue) { + MyClass.$setBoolean(newValue, this.$memoryAddress()); + } + """, + """ + private static native boolean $isBoolean(long self); + """, + """ + private static native void $setBoolean(boolean newValue, long self); + """, ] ) } @@ -438,7 +443,7 @@ struct JNIVariablesTests { ... self$.pointee.isBoolean = Bool(fromJNI: newValue, in: environment) } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/MemoryManagementModeTests.swift b/Tests/JExtractSwiftTests/MemoryManagementModeTests.swift index 9d5d5fcae..e1dbba451 100644 --- a/Tests/JExtractSwiftTests/MemoryManagementModeTests.swift +++ b/Tests/JExtractSwiftTests/MemoryManagementModeTests.swift @@ -21,7 +21,7 @@ struct MemoryManagementModeTests { let text = """ class MyClass {} - + public func f() -> MyClass """ @@ -33,7 +33,8 @@ struct MemoryManagementModeTests { try assertOutput( input: text, config: config, - .jni, .java, + .jni, + .java, expectedChunks: [ """ /** @@ -45,7 +46,7 @@ struct MemoryManagementModeTests { public static MyClass f(SwiftArena swiftArena$) { return MyClass.wrapMemoryAddressUnsafe(SwiftModule.$f(), swiftArena$); } - """, + """ ] ) } @@ -58,7 +59,8 @@ struct MemoryManagementModeTests { try assertOutput( input: text, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -84,13 +86,14 @@ struct MemoryManagementModeTests { input: """ public class MyClass {} - + public protocol MyProtocol { public func f() -> MyClass } """, config: config, - .jni, .java, + .jni, + .java, detectChunkByInitialLines: 1, expectedChunks: [ """ @@ -100,7 +103,7 @@ struct MemoryManagementModeTests { """, """ public MyClass f(SwiftArena swiftArena$); - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/MethodImportTests.swift b/Tests/JExtractSwiftTests/MethodImportTests.swift index 32f607468..0bb2c64df 100644 --- a/Tests/JExtractSwiftTests/MethodImportTests.swift +++ b/Tests/JExtractSwiftTests/MethodImportTests.swift @@ -39,11 +39,11 @@ final class MethodImportTests { l: Int64, s: String ) - + public func globalReturnClass() -> MySwiftClass public func globalReturnAny() -> Any - + public func swapRawBufferPointer(buffer: UnsafeRawBufferPointer) -> UnsafeMutableRawBufferPointer extension MySwiftClass { @@ -468,8 +468,11 @@ final class MethodImportTests { try st.analyze(path: "Fake.swift", text: class_interfaceFile) - #expect(!st.importedGlobalFuncs.contains { - $0.name == "globalReturnAny" - }, "'Any' return type is not supported yet") + #expect( + !st.importedGlobalFuncs.contains { + $0.name == "globalReturnAny" + }, + "'Any' return type is not supported yet" + ) } } diff --git a/Tests/JExtractSwiftTests/MethodThunkTests.swift b/Tests/JExtractSwiftTests/MethodThunkTests.swift index dab550b3e..69360afa2 100644 --- a/Tests/JExtractSwiftTests/MethodThunkTests.swift +++ b/Tests/JExtractSwiftTests/MethodThunkTests.swift @@ -23,7 +23,7 @@ final class MethodThunkTests { public var globalVar: MyClass = MyClass() public func globalFunc(a: Int32, b: Int64) {} public func globalFunc(a: Double, b: Int64) {} - + public class MyClass { public var property: Int public init(arg: Int32) {} @@ -33,11 +33,12 @@ final class MethodThunkTests { @Test("Thunk overloads: globalFunc(a: Int32, b: Int64) & globalFunc(i32: Int32, l: Int64)") func thunk_overloads() throws { try assertOutput( - input: input, .ffm, .swift, + input: input, + .ffm, + .swift, swiftModuleName: "FakeModule", detectChunkByInitialLines: 1, - expectedChunks: - [ + expectedChunks: [ """ @_cdecl("swiftjava_FakeModule_globalVar$get") public func swiftjava_FakeModule_globalVar$get(_ _result: UnsafeMutableRawPointer) { @@ -85,7 +86,7 @@ final class MethodThunkTests { public func swiftjava_FakeModule_MyClass_property$set(_ newValue: Int, _ self: UnsafeRawPointer) { self.assumingMemoryBound(to: MyClass.self).pointee.property = newValue } - """ + """, ] ) } diff --git a/Tests/JExtractSwiftTests/OptionalImportTests.swift b/Tests/JExtractSwiftTests/OptionalImportTests.swift index daa9fe664..fc169fe53 100644 --- a/Tests/JExtractSwiftTests/OptionalImportTests.swift +++ b/Tests/JExtractSwiftTests/OptionalImportTests.swift @@ -19,18 +19,19 @@ final class OptionalImportTests { let interfaceFile = """ import Foundation - + public func receiveOptionalIntSugar(_ arg: Int?) public func receiveOptionalIntExplicit(_ arg: Optional) public func receiveOptionalDataProto(_ arg: (some DataProtocol)?)) """ - @Test("Import Optionals: JavaBindings") func data_javaBindings() throws { try assertOutput( - input: interfaceFile, .ffm, .java, + input: interfaceFile, + .ffm, + .java, expectedChunks: [ """ /** @@ -112,7 +113,6 @@ final class OptionalImportTests { } """, - """ /** * {@snippet lang=c : diff --git a/Tests/JExtractSwiftTests/SendableTests.swift b/Tests/JExtractSwiftTests/SendableTests.swift index 5116fc030..5041a244a 100644 --- a/Tests/JExtractSwiftTests/SendableTests.swift +++ b/Tests/JExtractSwiftTests/SendableTests.swift @@ -21,19 +21,20 @@ final class SendableTests { public struct SendableStruct: Sendable {} """ - @Test("Import: Sendable struct (ffm)") func sendableStruct_ffm() throws { try assertOutput( - input: source, .ffm, .java, + input: source, + .ffm, + .java, expectedChunks: [ """ @ThreadSafe // Sendable public final class SendableStruct extends FFMSwiftInstance implements SwiftValue { static final String LIB_NAME = "SwiftModule"; static final Arena LIBRARY_ARENA = Arena.ofAuto(); - """, + """ ] ) } @@ -42,13 +43,15 @@ final class SendableTests { func sendableStruct_jni() throws { try assertOutput( - input: source, .jni, .java, + input: source, + .jni, + .java, expectedChunks: [ """ @ThreadSafe // Sendable public final class SendableStruct implements JNISwiftInstance { static final String LIB_NAME = "SwiftModule"; - """, + """ ] ) } diff --git a/Tests/JExtractSwiftTests/StringPassingTests.swift b/Tests/JExtractSwiftTests/StringPassingTests.swift index ea81ac847..65bb2a5c3 100644 --- a/Tests/JExtractSwiftTests/StringPassingTests.swift +++ b/Tests/JExtractSwiftTests/StringPassingTests.swift @@ -26,7 +26,9 @@ final class StringPassingTests { @Test("Import: public func writeString(string: String) -> Int") func method_helloWorld() throws { try assertOutput( - input: class_interfaceFile, .ffm, .java, + input: class_interfaceFile, + .ffm, + .java, swiftModuleName: "__FakeModule", expectedChunks: [ """ @@ -67,7 +69,8 @@ final class StringPassingTests { return swiftjava___FakeModule_writeString_string.call(SwiftRuntime.toCString(string, arena$)); } } - """ - ]) + """, + ] + ) } } diff --git a/Tests/JExtractSwiftTests/SwiftDocumentationParsingTests.swift b/Tests/JExtractSwiftTests/SwiftDocumentationParsingTests.swift index 91c1ae04c..50fc4876d 100644 --- a/Tests/JExtractSwiftTests/SwiftDocumentationParsingTests.swift +++ b/Tests/JExtractSwiftTests/SwiftDocumentationParsingTests.swift @@ -51,7 +51,7 @@ struct SwiftDocumentationParsingTests { public static void f() { """ ] - ) + ), ] ) func simple(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { @@ -63,7 +63,8 @@ struct SwiftDocumentationParsingTests { try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -93,7 +94,7 @@ struct SwiftDocumentationParsingTests { * } */ public static void g() { - """ + """, ] ), ( @@ -118,30 +119,31 @@ struct SwiftDocumentationParsingTests { * } */ public static void g() { - """ + """, ] - ) + ), ] ) func swiftFileWithNewlines(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { let text = """ /// Random comment - - - - + + + + public func f() {} - + /// Random comment 2 - + /// Simple summary public func g() {} """ try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -184,21 +186,22 @@ struct SwiftDocumentationParsingTests { public static MyClass f(AllocatingSwiftArena swiftArena$) """ ] - ) + ), ] ) func swiftArenaParam(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { let text = """ public class MyClass {} - + /// Simple summary public func f() -> MyClass {} """ try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -251,7 +254,7 @@ struct SwiftDocumentationParsingTests { public static void f(java.lang.String arg0, java.lang.String arg1) { """ ] - ) + ), ] ) func full_individualParams(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { @@ -271,7 +274,8 @@ struct SwiftDocumentationParsingTests { try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -324,7 +328,7 @@ struct SwiftDocumentationParsingTests { public static void f(java.lang.String arg0, java.lang.String arg1) { """ ] - ) + ), ] ) func full_groupedParams(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { @@ -345,7 +349,8 @@ struct SwiftDocumentationParsingTests { try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -416,7 +421,7 @@ struct SwiftDocumentationParsingTests { public static void f(java.lang.String arg0, java.lang.String arg1) { """ ] - ) + ), ] ) func complex(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { @@ -446,7 +451,8 @@ struct SwiftDocumentationParsingTests { try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } @@ -493,7 +499,7 @@ struct SwiftDocumentationParsingTests { public static void f(java.lang.String arg0, java.lang.String arg1) { """ ] - ) + ), ] ) func randomOrder(mode: JExtractGenerationMode, expectedJavaChunks: [String]) throws { @@ -509,7 +515,8 @@ struct SwiftDocumentationParsingTests { try assertOutput( input: text, - mode, .java, + mode, + .java, expectedChunks: expectedJavaChunks ) } diff --git a/Tests/JExtractSwiftTests/SwiftSymbolTableTests.swift b/Tests/JExtractSwiftTests/SwiftSymbolTableTests.swift index b437454c5..eaa82da48 100644 --- a/Tests/JExtractSwiftTests/SwiftSymbolTableTests.swift +++ b/Tests/JExtractSwiftTests/SwiftSymbolTableTests.swift @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// @_spi(Testing) import JExtractSwiftLib -import SwiftSyntax import SwiftParser +import SwiftSyntax import Testing @Suite("Swift symbol table") @@ -36,7 +36,7 @@ struct SwiftSymbolTableSuite { moduleName: "MyModule", [ .init(syntax: sourceFile1, path: "Fake.swift"), - .init(syntax: sourceFile2, path: "Fake2.swift") + .init(syntax: sourceFile2, path: "Fake2.swift"), ], log: Logger(label: "swift-java", logLevel: .critical) ) diff --git a/Tests/JExtractSwiftTests/UUIDTests.swift b/Tests/JExtractSwiftTests/UUIDTests.swift index 57b2b79a7..36bd73ec2 100644 --- a/Tests/JExtractSwiftTests/UUIDTests.swift +++ b/Tests/JExtractSwiftTests/UUIDTests.swift @@ -46,27 +46,35 @@ struct UUIDTests { ) ] ) - func func_accept_uuid(mode: JExtractGenerationMode, expectedJavaChunks: [String], expectedSwiftChunks: [String]) throws { + func func_accept_uuid( + mode: JExtractGenerationMode, + expectedJavaChunks: [String], + expectedSwiftChunks: [String] + ) throws { let text = """ import Foundation - + public func acceptUUID(uuid: UUID) """ try assertOutput( - input: text, - mode, .java, + input: text, + mode, + .java, detectChunkByInitialLines: 1, - expectedChunks: expectedJavaChunks) - - try assertOutput( - input: text, - mode, .swift, + expectedChunks: expectedJavaChunks + ) + + try assertOutput( + input: text, + mode, + .swift, detectChunkByInitialLines: 1, - expectedChunks: expectedSwiftChunks) - } - + expectedChunks: expectedSwiftChunks + ) + } + @Test( "Import: return UUID", arguments: [ @@ -92,24 +100,31 @@ struct UUIDTests { ) ] ) - func func_return_UUID(mode: JExtractGenerationMode, expectedJavaChunks: [String], expectedSwiftChunks: [String]) throws { + func func_return_UUID( + mode: JExtractGenerationMode, + expectedJavaChunks: [String], + expectedSwiftChunks: [String] + ) throws { let text = """ import Foundation public func returnUUID() -> UUID """ - + try assertOutput( - input: text, - mode, .java, + input: text, + mode, + .java, detectChunkByInitialLines: 1, expectedChunks: expectedJavaChunks ) - try assertOutput( - input: text, - mode, .swift, + try assertOutput( + input: text, + mode, + .swift, detectChunkByInitialLines: 1, - expectedChunks: expectedSwiftChunks) + expectedChunks: expectedSwiftChunks + ) } } diff --git a/Tests/JExtractSwiftTests/UnsignedNumberTests.swift b/Tests/JExtractSwiftTests/UnsignedNumberTests.swift index 3604cfe89..5a56524e7 100644 --- a/Tests/JExtractSwiftTests/UnsignedNumberTests.swift +++ b/Tests/JExtractSwiftTests/UnsignedNumberTests.swift @@ -52,14 +52,16 @@ final class UnsignedNumberTests { SwiftModule.$unsignedChar(arg); } private static native void $unsignedChar(char arg); - """, + """ ] - ) - ]) + ), + ] + ) func unsignedChar(mode: JExtractGenerationMode, expectedChunks: [String]) throws { try assertOutput( input: "public func unsignedChar(_ arg: UInt16)", - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) @@ -99,17 +101,19 @@ final class UnsignedNumberTests { SwiftModule.$unsignedInt(arg); } private static native void $unsignedInt(int arg); - """, + """ ] - ) - ]) + ), + ] + ) func unsignedIntAnnotate(mode: JExtractGenerationMode, expectedChunks: [String]) throws { var config = Configuration() try assertOutput( input: "public func unsignedInt(_ arg: UInt32)", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) @@ -151,17 +155,19 @@ final class UnsignedNumberTests { return SwiftModule.$returnUnsignedInt(); } private static native int $returnUnsignedInt(); - """, + """ ] - ) - ]) + ), + ] + ) func returnUnsignedIntDefault(mode: JExtractGenerationMode, expectedChunks: [String]) throws { let config = Configuration() try assertOutput( input: "public func returnUnsignedInt() -> UInt32", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) @@ -203,17 +209,19 @@ final class UnsignedNumberTests { return SwiftModule.$returnUnsignedLong(); } private static native long $returnUnsignedLong(); - """, + """ ] - ) - ]) + ), + ] + ) func return_unsignedLong_annotate(mode: JExtractGenerationMode, expectedChunks: [String]) throws { var config = Configuration() try assertOutput( input: "public func returnUnsignedLong() -> UInt64", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) @@ -253,17 +261,19 @@ final class UnsignedNumberTests { SwiftModule.$takeUnsignedLong(arg); } private static native void $takeUnsignedLong(long arg); - """, + """ ] - ) - ]) + ), + ] + ) func take_unsignedLong_annotate(mode: JExtractGenerationMode, expectedChunks: [String]) throws { var config = Configuration() try assertOutput( input: "public func takeUnsignedLong(arg: UInt64)", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) @@ -307,22 +317,24 @@ final class UnsignedNumberTests { return SwiftModule.$unsignedLong(first, second); } private static native int $unsignedLong(long first, int second); - """, + """ ] ), - ]) + ] + ) func echo_unsignedLong_annotate(mode: JExtractGenerationMode, expectedChunks: [String]) throws { let config = Configuration() try assertOutput( input: "public func unsignedLong(first: UInt64, second: UInt32) -> UInt32", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) } - + @Test( "Import: take UInt return UInt (annotate)", arguments: [ @@ -361,17 +373,19 @@ final class UnsignedNumberTests { return SwiftModule.$unsignedLong(first, second); } private static native long $unsignedLong(long first, long second); - """, + """ ] ), - ]) + ] + ) func echo_uint_annotate(mode: JExtractGenerationMode, expectedChunks: [String]) throws { let config = Configuration() try assertOutput( input: "public func unsignedLong(first: UInt, second: UInt) -> UInt", config: config, - mode, .java, + mode, + .java, detectChunkByInitialLines: 2, expectedChunks: expectedChunks ) diff --git a/Tests/JExtractSwiftTests/VariableImportTests.swift b/Tests/JExtractSwiftTests/VariableImportTests.swift index da0c1afaf..e5837d2e0 100644 --- a/Tests/JExtractSwiftTests/VariableImportTests.swift +++ b/Tests/JExtractSwiftTests/VariableImportTests.swift @@ -36,7 +36,9 @@ final class VariableImportTests { @Test("Import: var counter: Int") func variable_int() throws { try assertOutput( - input: class_interfaceFile, .ffm, .java, + input: class_interfaceFile, + .ffm, + .java, swiftModuleName: "FakeModule", detectChunkByInitialLines: 8, expectedChunks: [ diff --git a/Tests/SwiftJavaConfigurationSharedTests/GradleDependencyParsingTests.swift b/Tests/SwiftJavaConfigurationSharedTests/GradleDependencyParsingTests.swift index cb085fe22..4c0d633bf 100644 --- a/Tests/SwiftJavaConfigurationSharedTests/GradleDependencyParsingTests.swift +++ b/Tests/SwiftJavaConfigurationSharedTests/GradleDependencyParsingTests.swift @@ -42,4 +42,3 @@ struct GradleDependencyParsingTests { #expect(parsed[1].version == "1.2.3-beta.1") } } - diff --git a/Tests/SwiftJavaConfigurationSharedTests/SwiftJavaConfigurationTests.swift b/Tests/SwiftJavaConfigurationSharedTests/SwiftJavaConfigurationTests.swift index c94669866..4dbea421d 100644 --- a/Tests/SwiftJavaConfigurationSharedTests/SwiftJavaConfigurationTests.swift +++ b/Tests/SwiftJavaConfigurationSharedTests/SwiftJavaConfigurationTests.swift @@ -20,14 +20,16 @@ struct SwiftJavaConfigurationTests { @Test func parseJSONWithComments() throws { - let config = try readConfiguration(string: - """ - // some comments - { - // anywhere is ok - "classpath": "" - } - """, configPath: nil) + let config = try readConfiguration( + string: + """ + // some comments + { + // anywhere is ok + "classpath": "" + } + """, + configPath: nil + ) } } - diff --git a/Tests/SwiftJavaMacrosTests/JavaClassMacroTests.swift b/Tests/SwiftJavaMacrosTests/JavaClassMacroTests.swift index 8c5e2d593..fdd6ff79d 100644 --- a/Tests/SwiftJavaMacrosTests/JavaClassMacroTests.swift +++ b/Tests/SwiftJavaMacrosTests/JavaClassMacroTests.swift @@ -24,7 +24,7 @@ class JavaKitMacroTests: XCTestCase { "JavaClass": JavaClassMacro.self, "JavaMethod": JavaMethodMacro.self, "JavaField": JavaFieldMacro.self, - "JavaStaticField": JavaFieldMacro.self + "JavaStaticField": JavaFieldMacro.self, ] func testJavaStaticMethodFailure() throws { @@ -37,25 +37,27 @@ class JavaKitMacroTests: XCTestCase { } """, expandedSource: """ - - public class HelloWorld { - public var test: String - - /// The full Java class name for this Swift type. - open override class var fullJavaClassName: String { - #if os(Android) - AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") - #else - "org.swift.example.HelloWorld" - #endif - } - - public required init(javaHolder: JavaObjectHolder) { - super.init(javaHolder: javaHolder) - } - } - """, - diagnostics: [DiagnosticSpec(message: "Cannot use @JavaStaticField outside of a JavaClass instance", line: 3, column: 5)], + + public class HelloWorld { + public var test: String + + /// The full Java class name for this Swift type. + open override class var fullJavaClassName: String { + #if os(Android) + AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") + #else + "org.swift.example.HelloWorld" + #endif + } + + public required init(javaHolder: JavaObjectHolder) { + super.init(javaHolder: javaHolder) + } + } + """, + diagnostics: [ + DiagnosticSpec(message: "Cannot use @JavaStaticField outside of a JavaClass instance", line: 3, column: 5) + ], macros: Self.javaKitMacros ) } @@ -69,29 +71,30 @@ class JavaKitMacroTests: XCTestCase { } """, expandedSource: """ - - extension JavaClass { - public var test: String { - get { - self[javaFieldName: "test", fieldType: String.self] - } - set { - self[javaFieldName: "test", fieldType: String.self] = newValue - } + + extension JavaClass { + public var test: String { + get { + self[javaFieldName: "test", fieldType: String.self] + } + set { + self[javaFieldName: "test", fieldType: String.self] = newValue + } + } } - } - """, + """, macros: Self.javaKitMacros ) } func testJavaClass() throws { - assertMacroExpansion(""" + assertMacroExpansion( + """ @JavaClass("org.swift.example.HelloWorld") public struct HelloWorld { @JavaMethod public init(environment: JNIEnvironment? = nil) - + @JavaMethod public init(_ value: Int32, environment: JNIEnvironment? = nil) @@ -100,7 +103,7 @@ class JavaKitMacroTests: XCTestCase { @JavaField public var myField: Int64 - + @JavaField public var objectField: JavaObject! @@ -110,89 +113,90 @@ class JavaKitMacroTests: XCTestCase { """, expandedSource: """ - public struct HelloWorld { - public init(environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - self = try! Self.dynamicJavaNewObject(in: _environment) - } - public init(_ value: Int32, environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - self = try! Self.dynamicJavaNewObject(in: _environment, arguments: value.self) - } - public func isBigEnough(_: Int32) -> Bool { - return { - do { - return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) - } catch { - if let throwable = error as? Throwable { - let sw = StringWriter() - let pw = PrintWriter(sw) - throwable.printStackTrace(pw) - fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + public struct HelloWorld { + public init(environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + self = try! Self.dynamicJavaNewObject(in: _environment) + } + public init(_ value: Int32, environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + self = try! Self.dynamicJavaNewObject(in: _environment, arguments: value.self) + } + public func isBigEnough(_: Int32) -> Bool { + return { + do { + return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) + } catch { + if let throwable = error as? Throwable { + let sw = StringWriter() + let pw = PrintWriter(sw) + throwable.printStackTrace(pw) + fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + } + fatalError("Java call threw unhandled exception: \\(error)") } - fatalError("Java call threw unhandled exception: \\(error)") + }() + } + public var myField: Int64 { + get { + self[javaFieldName: "myField", fieldType: Int64.self] + } + nonmutating set { + self[javaFieldName: "myField", fieldType: Int64.self] = newValue + } + } + public var objectField: JavaObject! { + get { + self[javaFieldName: "objectField", fieldType: JavaObject?.self] + } + nonmutating set { + self[javaFieldName: "objectField", fieldType: JavaObject?.self] = newValue + } + } + public var myFinalField: Int64 { + get { + self[javaFieldName: "myFinalField", fieldType: Int64.self] } - }() - } - public var myField: Int64 { - get { - self[javaFieldName: "myField", fieldType: Int64.self] - } - nonmutating set { - self[javaFieldName: "myField", fieldType: Int64.self] = newValue - } - } - public var objectField: JavaObject! { - get { - self[javaFieldName: "objectField", fieldType: JavaObject?.self] - } - nonmutating set { - self[javaFieldName: "objectField", fieldType: JavaObject?.self] = newValue - } - } - public var myFinalField: Int64 { - get { - self[javaFieldName: "myFinalField", fieldType: Int64.self] - } - } - - /// The full Java class name for this Swift type. - public static var fullJavaClassName: String { - #if os(Android) - AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") - #else - "org.swift.example.HelloWorld" - #endif } - public typealias JavaSuperclass = JavaObject + /// The full Java class name for this Swift type. + public static var fullJavaClassName: String { + #if os(Android) + AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") + #else + "org.swift.example.HelloWorld" + #endif + } - public var javaHolder: JavaObjectHolder + public typealias JavaSuperclass = JavaObject - public init(javaHolder: JavaObjectHolder) { - self.javaHolder = javaHolder - } + public var javaHolder: JavaObjectHolder - /// Casting to ``JavaObject`` will never be nil because ``HelloWorld`` extends it. - public func `as`(_: JavaObject.Type) -> JavaObject { - return JavaObject(javaHolder: javaHolder) - } - } - """, + public init(javaHolder: JavaObjectHolder) { + self.javaHolder = javaHolder + } + + /// Casting to ``JavaObject`` will never be nil because ``HelloWorld`` extends it. + public func `as`(_: JavaObject.Type) -> JavaObject { + return JavaObject(javaHolder: javaHolder) + } + } + """, macros: Self.javaKitMacros ) } func testJavaClassAsClass() throws { - assertMacroExpansion(""" + assertMacroExpansion( + """ @JavaClass("org.swift.example.HelloWorld") public class HelloWorld: OtherJavaType { @JavaMethod @@ -216,82 +220,83 @@ class JavaKitMacroTests: XCTestCase { """, expandedSource: """ - public class HelloWorld: OtherJavaType { - public init(environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment) - self.init(javaThis: javaThis, environment: _environment) - } - public init(_ value: Int32, environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment, arguments: value.self) - self.init(javaThis: javaThis, environment: _environment) - } - public func isBigEnough(_: Int32) -> Bool { - return { - do { - return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) - } catch { - if let throwable = error as? Throwable { - let sw = StringWriter() - let pw = PrintWriter(sw) - throwable.printStackTrace(pw) - fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + public class HelloWorld: OtherJavaType { + public init(environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment) + self.init(javaThis: javaThis, environment: _environment) + } + public init(_ value: Int32, environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment, arguments: value.self) + self.init(javaThis: javaThis, environment: _environment) + } + public func isBigEnough(_: Int32) -> Bool { + return { + do { + return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) + } catch { + if let throwable = error as? Throwable { + let sw = StringWriter() + let pw = PrintWriter(sw) + throwable.printStackTrace(pw) + fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + } + fatalError("Java call threw unhandled exception: \\(error)") } - fatalError("Java call threw unhandled exception: \\(error)") + }() + } + public var myField: Int64 { + get { + self[javaFieldName: "myField", fieldType: Int64.self] } - }() - } - public var myField: Int64 { - get { - self[javaFieldName: "myField", fieldType: Int64.self] - } - set { - self[javaFieldName: "myField", fieldType: Int64.self] = newValue - } - } - public var objectField: JavaObject! { - get { - self[javaFieldName: "objectField", fieldType: JavaObject?.self] - } - set { - self[javaFieldName: "objectField", fieldType: JavaObject?.self] = newValue + set { + self[javaFieldName: "myField", fieldType: Int64.self] = newValue + } + } + public var objectField: JavaObject! { + get { + self[javaFieldName: "objectField", fieldType: JavaObject?.self] + } + set { + self[javaFieldName: "objectField", fieldType: JavaObject?.self] = newValue + } + } + public var myFinalField: Int64 { + get { + self[javaFieldName: "myFinalField", fieldType: Int64.self] + } + } + + /// The full Java class name for this Swift type. + open override class var fullJavaClassName: String { + #if os(Android) + AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") + #else + "org.swift.example.HelloWorld" + #endif } - } - public var myFinalField: Int64 { - get { - self[javaFieldName: "myFinalField", fieldType: Int64.self] + + public required init(javaHolder: JavaObjectHolder) { + super.init(javaHolder: javaHolder) } } - - /// The full Java class name for this Swift type. - open override class var fullJavaClassName: String { - #if os(Android) - AndroidSupport.androidDesugarClassNameConversion(for: "org.swift.example.HelloWorld") - #else - "org.swift.example.HelloWorld" - #endif - } - - public required init(javaHolder: JavaObjectHolder) { - super.init(javaHolder: javaHolder) - } - } - """, + """, macros: Self.javaKitMacros ) } func testJavaObjectAsClass() throws { - assertMacroExpansion(""" + assertMacroExpansion( + """ @JavaClass("java.lang.Object") public class JavaObject { @JavaMethod @@ -303,54 +308,55 @@ class JavaKitMacroTests: XCTestCase { """, expandedSource: """ - public class JavaObject { - public init(environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() - } - let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment) - self.init(javaThis: javaThis, environment: _environment) - } - public func isBigEnough(_: Int32) -> Bool { - return { - do { - return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) - } catch { - if let throwable = error as? Throwable { - let sw = StringWriter() - let pw = PrintWriter(sw) - throwable.printStackTrace(pw) - fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") - } - fatalError("Java call threw unhandled exception: \\(error)") + public class JavaObject { + public init(environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() } - }() - } - - /// The full Java class name for this Swift type. - open class var fullJavaClassName: String { - #if os(Android) - AndroidSupport.androidDesugarClassNameConversion(for: "java.lang.Object") - #else - "java.lang.Object" - #endif + let javaThis = try! Self.dynamicJavaNewObjectInstance(in: _environment) + self.init(javaThis: javaThis, environment: _environment) + } + public func isBigEnough(_: Int32) -> Bool { + return { + do { + return try dynamicJavaMethodCall(methodName: "isBigEnough", resultType: Bool.self) + } catch { + if let throwable = error as? Throwable { + let sw = StringWriter() + let pw = PrintWriter(sw) + throwable.printStackTrace(pw) + fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + } + fatalError("Java call threw unhandled exception: \\(error)") + } + }() } - public var javaHolder: JavaObjectHolder + /// The full Java class name for this Swift type. + open class var fullJavaClassName: String { + #if os(Android) + AndroidSupport.androidDesugarClassNameConversion(for: "java.lang.Object") + #else + "java.lang.Object" + #endif + } - public required init(javaHolder: JavaObjectHolder) { - self.javaHolder = javaHolder - } - } - """, + public var javaHolder: JavaObjectHolder + + public required init(javaHolder: JavaObjectHolder) { + self.javaHolder = javaHolder + } + } + """, macros: Self.javaKitMacros ) } func testJavaOptionalGenericGet() throws { - assertMacroExpansion(""" + assertMacroExpansion( + """ @JavaClass("java.lang.Optional") open class JavaOptional: JavaObject { @JavaMethod(typeErasedResult: "T") @@ -359,45 +365,44 @@ class JavaKitMacroTests: XCTestCase { """, expandedSource: """ - open class JavaOptional: JavaObject { - open func get() -> T! { - /* convert erased return value to T */ - let result$ = { - do { - return try dynamicJavaMethodCall(methodName: "get", resultType: /*type-erased:T*/ JavaObject?.self) - } catch { - if let throwable = error as? Throwable { - let sw = StringWriter() - let pw = PrintWriter(sw) - throwable.printStackTrace(pw) - fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + open class JavaOptional: JavaObject { + open func get() -> T! { + /* convert erased return value to T */ + let result$ = { + do { + return try dynamicJavaMethodCall(methodName: "get", resultType: /*type-erased:T*/ JavaObject?.self) + } catch { + if let throwable = error as? Throwable { + let sw = StringWriter() + let pw = PrintWriter(sw) + throwable.printStackTrace(pw) + fatalError("Java call threw unhandled exception: \\(error)\\n\\(sw.toString())") + } + fatalError("Java call threw unhandled exception: \\(error)") } - fatalError("Java call threw unhandled exception: \\(error)") + }() + if let result$ { + return T(javaThis: result$.javaThis, environment: try! JavaVirtualMachine.shared().environment()) + } else { + return nil } - }() - if let result$ { - return T(javaThis: result$.javaThis, environment: try! JavaVirtualMachine.shared().environment()) - } else { - return nil - } - } - - /// The full Java class name for this Swift type. - open override class var fullJavaClassName: String { - #if os(Android) - AndroidSupport.androidDesugarClassNameConversion(for: "java.lang.Optional") - #else - "java.lang.Optional" - #endif } - public required init(javaHolder: JavaObjectHolder) { - super.init(javaHolder: javaHolder) - } - } - """, + /// The full Java class name for this Swift type. + open override class var fullJavaClassName: String { + #if os(Android) + AndroidSupport.androidDesugarClassNameConversion(for: "java.lang.Optional") + #else + "java.lang.Optional" + #endif + } + + public required init(javaHolder: JavaObjectHolder) { + super.init(javaHolder: javaHolder) + } + } + """, macros: Self.javaKitMacros ) } } - diff --git a/Tests/SwiftJavaTests/BasicRuntimeTests.swift b/Tests/SwiftJavaTests/BasicRuntimeTests.swift index 292c2a688..699891495 100644 --- a/Tests/SwiftJavaTests/BasicRuntimeTests.swift +++ b/Tests/SwiftJavaTests/BasicRuntimeTests.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -import SwiftJava import JavaNet +import SwiftJava import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 /// Handy reference to the JVM abstraction. @@ -32,7 +32,10 @@ class BasicRuntimeTests: XCTestCase { XCTAssert(object.toString().starts(with: "java.lang.Object")) // Make sure this object was promoted to a global reference. - XCTAssertEqual(object.javaEnvironment.pointee?.pointee.GetObjectRefType(object.javaEnvironment, object.javaThis), JNIGlobalRefType) + XCTAssertEqual( + object.javaEnvironment.pointee?.pointee.GetObjectRefType(object.javaEnvironment, object.javaThis), + JNIGlobalRefType + ) // Keep track of the Java object. sneakyJavaThis = object.javaThis @@ -96,4 +99,4 @@ class BasicRuntimeTests: XCTestCase { } @JavaClass("org.swift.javakit.Nonexistent") -struct Nonexistent { } +struct Nonexistent {} diff --git a/Tests/SwiftJavaToolLibTests/CompileJavaWrapTools.swift b/Tests/SwiftJavaToolLibTests/CompileJavaWrapTools.swift index 0254703eb..e2fad7061 100644 --- a/Tests/SwiftJavaToolLibTests/CompileJavaWrapTools.swift +++ b/Tests/SwiftJavaToolLibTests/CompileJavaWrapTools.swift @@ -12,17 +12,17 @@ // //===----------------------------------------------------------------------===// -@_spi(Testing) import SwiftJava -import SwiftJavaToolLib -import JavaUtilJar +import Foundation import JavaNet -import SwiftJavaShared -import SwiftJavaConfigurationShared +import JavaUtilJar import Subprocess +@_spi(Testing) import SwiftJava +import SwiftJavaConfigurationShared +import SwiftJavaShared +import SwiftJavaToolLib import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 -import Foundation -fileprivate func createTemporaryDirectory(in directory: Foundation.URL) throws -> Foundation.URL { +private func createTemporaryDirectory(in directory: Foundation.URL) throws -> Foundation.URL { let uuid = UUID().uuidString let resolverDirectoryURL = directory.appendingPathComponent("swift-java-testing-\(uuid)") @@ -34,36 +34,37 @@ fileprivate func createTemporaryDirectory(in directory: Foundation.URL) throws - /// Returns the directory that should be added to the classpath of the JVM to analyze the sources. func compileJava(_ sourceText: String) async throws -> Foundation.URL { let sourceFile = try TempFile.create(suffix: "java", sourceText) - + let classesDirectory = try createTemporaryDirectory(in: FileManager.default.temporaryDirectory) - + let javacProcess = try await Subprocess.run( .path(.init("\(javaHome)" + "/bin/javac")), arguments: [ "-d", classesDirectory.path, // output directory for .class files - sourceFile.path + sourceFile.path, ], output: .string(limit: Int.max, encoding: UTF8.self), error: .string(limit: Int.max, encoding: UTF8.self) ) - + // Check if compilation was successful guard javacProcess.terminationStatus.isSuccess else { let outString = javacProcess.standardOutput ?? "" let errString = javacProcess.standardError ?? "" - fatalError("javac '\(sourceFile)' failed (\(javacProcess.terminationStatus));\n" + - "OUT: \(outString)\n" + - "ERROR: \(errString)") + fatalError( + "javac '\(sourceFile)' failed (\(javacProcess.terminationStatus));\n" + "OUT: \(outString)\n" + + "ERROR: \(errString)" + ) } - + print("Compiled java sources to: \(classesDirectory)") return classesDirectory } func withJavaTranslator( - javaClassNames: [String], + javaClassNames: [String], classpath: [Foundation.URL], - body: (JavaTranslator) throws -> (), + body: (JavaTranslator) throws -> Void, function: String = #function, file: StaticString = #filePath, line: UInt = #line @@ -73,7 +74,7 @@ func withJavaTranslator( classpath: classpath.map(\.path), replace: true ) - + var config = Configuration() config.minimumInputAccessLevelMode = .package @@ -82,7 +83,8 @@ func withJavaTranslator( config: config, swiftModuleName: "SwiftModule", environment: environment, - translateAsClass: true) + translateAsClass: true + ) try body(translator) } @@ -104,7 +106,7 @@ func assertWrapJavaOutput( ) // Do NOT destroy the jvm here, because the JavaClasses will need to deinit, // and do so while the env is still valid... - + var config = Configuration() config.minimumInputAccessLevelMode = .package @@ -113,7 +115,8 @@ func assertWrapJavaOutput( config: config, swiftModuleName: "SwiftModule", environment: environment, - translateAsClass: true) + translateAsClass: true + ) let classpathJavaURLs = classpath.map({ try! URL.init("\($0)/") }) // we MUST have a trailing slash for JVM to consider it a search directory let classLoader = URLClassLoader(classpathJavaURLs, environment: environment) @@ -135,16 +138,16 @@ func assertWrapJavaOutput( // WrapJavaCommand(). let swiftUnqualifiedName = javaClassName.javaClassNameToCanonicalName - .defaultSwiftNameForJavaClass + .defaultSwiftNameForJavaClass translator.translatedClasses[javaClassName] = .init(module: nil, name: swiftUnqualifiedName) - try translator.validateClassConfiguration() + try translator.validateClassConfiguration() let swiftClassDecls = try translator.translateClass(javaClass) let importDecls = translator.getImportDecls() - let swiftFileText = + let swiftFileText = """ // --------------------------------------------------------------------------- // Auto-generated by Java-to-Swift wrapper generator. @@ -152,7 +155,7 @@ func assertWrapJavaOutput( \(swiftClassDecls.map { $0.description }.joined(separator: "\n")) \n """ - swiftCompleteOutputText += swiftFileText + swiftCompleteOutputText += swiftFileText } // Run any additional user defined assertions: @@ -163,12 +166,11 @@ func assertWrapJavaOutput( let checkAgainstText = swiftCompleteOutputText.replacing(" ", with: "") let checkAgainstExpectedChunk = expectedChunk.replacing(" ", with: "") -let failureMessage = "Expected chunk: \n" + - "\(expectedChunk.yellow)" + - "\n" + - "not found in:\n" + - "\(swiftCompleteOutputText)" - XCTAssertTrue(checkAgainstText.contains(checkAgainstExpectedChunk), - "\(failureMessage)") + let failureMessage = + "Expected chunk: \n" + "\(expectedChunk.yellow)" + "\n" + "not found in:\n" + "\(swiftCompleteOutputText)" + XCTAssertTrue( + checkAgainstText.contains(checkAgainstExpectedChunk), + "\(failureMessage)" + ) } } diff --git a/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift b/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift index a3b33ba75..eb425fa46 100644 --- a/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift +++ b/Tests/SwiftJavaToolLibTests/Java2SwiftTests.swift @@ -12,8 +12,7 @@ // //===----------------------------------------------------------------------===// -@_spi(Testing) -import SwiftJava +@_spi(Testing) import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaToolLib import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 @@ -33,7 +32,7 @@ struct ProcessBuilder { @JavaClass("java.lang.ProcessBuilder$Redirect") struct Redirect { @JavaClass("java.lang.ProcessBuilder$Redirect$Type") - struct JavaType { } + struct JavaType {} } } @@ -55,7 +54,7 @@ class Java2SwiftTests: XCTestCase { """ @JavaMethod public func wait() throws - """ + """, ] ) } @@ -65,7 +64,7 @@ class Java2SwiftTests: XCTestCase { JavaClass.self, swiftTypeName: "MyJavaClass", translatedClasses: [ - "java.lang.Object": SwiftTypeName(module: nil, name: "JavaObject"), + "java.lang.Object": SwiftTypeName(module: nil, name: "JavaObject") ], expectedChunks: [ "import SwiftJava", @@ -107,8 +106,9 @@ class Java2SwiftTests: XCTestCase { """ @JavaStaticField(isFinal: true) public var APRIL: Month! - """ - ]) + """, + ] + ) } func testGenericCollections() throws { @@ -129,7 +129,7 @@ class Java2SwiftTests: XCTestCase { """ @JavaMethod public func toArray(_ arg0: MyJavaIntFunction?) -> [T?] - """ + """, ] ) } @@ -162,7 +162,9 @@ class Java2SwiftTests: XCTestCase { ], nestedClasses: [ "java.lang.ProcessBuilder": [JavaClass().as(JavaClass.self)!], - "java.lang.ProcessBuilder$Redirect": [JavaClass().as(JavaClass.self)!], + "java.lang.ProcessBuilder$Redirect": [ + JavaClass().as(JavaClass.self)! + ], ], expectedChunks: [ "import SwiftJava", @@ -198,11 +200,16 @@ class Java2SwiftTests: XCTestCase { translatedClasses: [ "java.lang.ProcessBuilder": SwiftTypeName(module: nil, name: "ProcessBuilder"), "java.lang.ProcessBuilder$Redirect": SwiftTypeName(module: nil, name: "ProcessBuilder.PBRedirect"), - "java.lang.ProcessBuilder$Redirect$Type": SwiftTypeName(module: nil, name: "ProcessBuilder.PBRedirect.JavaType"), + "java.lang.ProcessBuilder$Redirect$Type": SwiftTypeName( + module: nil, + name: "ProcessBuilder.PBRedirect.JavaType" + ), ], nestedClasses: [ "java.lang.ProcessBuilder": [JavaClass().as(JavaClass.self)!], - "java.lang.ProcessBuilder$Redirect": [JavaClass().as(JavaClass.self)!], + "java.lang.ProcessBuilder$Redirect": [ + JavaClass().as(JavaClass.self)! + ], ], expectedChunks: [ "import SwiftJava", @@ -226,7 +233,7 @@ class Java2SwiftTests: XCTestCase { """ @JavaMethod public func type() -> ProcessBuilder.PBRedirect.JavaType! - """ + """, ] ) } @@ -249,9 +256,9 @@ class Java2SwiftTests: XCTestCase { MyObjects.self, swiftTypeName: "MyJavaObjects", translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), - "java.util.function.Supplier" : SwiftTypeName(module: "JavaUtilFunction", name: "MySupplier"), - "java.lang.String" : SwiftTypeName(module: "SwiftJava", name: "JavaString"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.util.function.Supplier": SwiftTypeName(module: "JavaUtilFunction", name: "MySupplier"), + "java.lang.String": SwiftTypeName(module: "SwiftJava", name: "JavaString"), ], expectedChunks: [ """ @@ -306,7 +313,7 @@ class Java2SwiftTests: XCTestCase { swiftTypeName: "JavaString", asClass: true, translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject") ], expectedChunks: [ "import SwiftJava", @@ -368,8 +375,9 @@ class Java2SwiftTests: XCTestCase { """ @JavaStaticField(isFinal: true) public var APRIL: Month! - """ - ]) + """, + ] + ) } func testURLLoaderSkipMappingAsClass() throws { @@ -381,9 +389,9 @@ class Java2SwiftTests: XCTestCase { swiftTypeName: "URLClassLoader", asClass: true, translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), - "java.lang.ClassLoader" : SwiftTypeName(module: "SwiftJava", name: "ClassLoader"), - "java.net.URL" : SwiftTypeName(module: "JavaNet", name: "URL"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.lang.ClassLoader": SwiftTypeName(module: "SwiftJava", name: "ClassLoader"), + "java.net.URL": SwiftTypeName(module: "JavaNet", name: "URL"), ], expectedChunks: [ "import SwiftJava", @@ -465,7 +473,7 @@ class Java2SwiftTests: XCTestCase { swiftTypeName: "MyJavaIntFunction", asClass: true, translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), "java.util.function.IntFunction": SwiftTypeName(module: nil, name: "MyJavaIntFunction"), ], expectedChunks: [ @@ -488,11 +496,11 @@ class Java2SwiftTests: XCTestCase { swiftTypeName: "Method", asClass: true, translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), - "java.lang.Class" : SwiftTypeName(module: "SwiftJava", name: "JavaClass"), - "java.lang.reflect.Executable": SwiftTypeName(module: "JavaLangReflect", name: "Executable"), - "java.lang.reflect.Method": SwiftTypeName(module: "JavaLangReflect", name: "Method"), - "java.lang.reflect.TypeVariable" : SwiftTypeName(module: "JavaLangReflect", name: "TypeVariable"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.lang.Class": SwiftTypeName(module: "SwiftJava", name: "JavaClass"), + "java.lang.reflect.Executable": SwiftTypeName(module: "JavaLangReflect", name: "Executable"), + "java.lang.reflect.Method": SwiftTypeName(module: "JavaLangReflect", name: "Method"), + "java.lang.reflect.TypeVariable": SwiftTypeName(module: "JavaLangReflect", name: "TypeVariable"), ], expectedChunks: [ "import JavaLangReflect", @@ -522,11 +530,11 @@ class Java2SwiftTests: XCTestCase { swiftTypeName: "Constructor", asClass: true, translatedClasses: [ - "java.lang.Object" : SwiftTypeName(module: "SwiftJava", name: "JavaObject"), - "java.lang.Class" : SwiftTypeName(module: "SwiftJava", name: "JavaClass"), + "java.lang.Object": SwiftTypeName(module: "SwiftJava", name: "JavaObject"), + "java.lang.Class": SwiftTypeName(module: "SwiftJava", name: "JavaClass"), "java.lang.reflect.Executable": SwiftTypeName(module: "JavaLangReflect", name: "Executable"), "java.lang.reflect.Method": SwiftTypeName(module: "JavaLangReflect", name: "Method"), - "java.lang.reflect.TypeVariable" : SwiftTypeName(module: "JavaLangReflect", name: "TypeVariable"), + "java.lang.reflect.TypeVariable": SwiftTypeName(module: "JavaLangReflect", name: "TypeVariable"), ], expectedChunks: [ "import JavaLangReflect", @@ -581,58 +589,58 @@ class Java2SwiftTests: XCTestCase { } @JavaClass("java.lang.ClassLoader") -fileprivate struct ClassLoader { } +private struct ClassLoader {} @JavaClass("java.security.SecureClassLoader") -fileprivate struct SecureClassLoader { } +private struct SecureClassLoader {} @JavaClass("java.net.URLClassLoader") -fileprivate struct URLClassLoader { } +private struct URLClassLoader {} @JavaClass("java.util.ArrayList") -fileprivate struct MyArrayList { +private struct MyArrayList { } @JavaClass("java.util.LinkedList") -fileprivate struct MyLinkedList { +private struct MyLinkedList { } @JavaClass("java.lang.String") -fileprivate struct MyJavaString { +private struct MyJavaString { } @JavaClass("java.util.Objects") -fileprivate struct MyObjects { } +private struct MyObjects {} @JavaInterface("java.util.function.Supplier") -fileprivate struct MySupplier { } +private struct MySupplier {} @JavaInterface("java.util.function.IntFunction") -fileprivate struct MyJavaIntFunction { +private struct MyJavaIntFunction { } @JavaClass("java.lang.reflect.Method", extends: Executable.self) -fileprivate struct Method { +private struct Method { } @JavaClass("java.lang.reflect.Constructor", extends: Executable.self) -fileprivate struct Constructor { +private struct Constructor { } @JavaClass("java.lang.reflect.Executable") -fileprivate struct Executable { +private struct Executable { } @JavaInterface("java.lang.reflect.TypeVariable") -fileprivate struct TypeVariable { +private struct TypeVariable { } @JavaClass("java.nio.Buffer") -fileprivate class NIOBuffer: JavaObject { +private class NIOBuffer: JavaObject { } @JavaClass("java.nio.ByteBuffer") -fileprivate class NIOByteBuffer: NIOBuffer { +private class NIOByteBuffer: NIOBuffer { } /// Translate a Java class and assert that the translated output contains @@ -665,7 +673,8 @@ func assertTranslatedClass( let translatedDecls = try translator.translateClass( JavaClass( javaThis: javaClass, - environment: environment) + environment: environment + ) ) let importDecls = translator.getImportDecls() @@ -676,21 +685,25 @@ func assertTranslatedClass( """ func normalizeWhitespace(_ text: String) -> String { - return text.components(separatedBy: .newlines) + text.components(separatedBy: .newlines) .map { $0.trimmingCharacters(in: .whitespaces) } .joined(separator: "\n") } - + let normalizedSwiftFileText = normalizeWhitespace(swiftFileText) - + for expectedChunk in expectedChunks { let normalizedExpectedChunk = normalizeWhitespace(expectedChunk) - + if normalizedSwiftFileText.contains(normalizedExpectedChunk) { continue } - XCTFail("Expected chunk:\n---\n\(expectedChunk.yellow)\n---\nnot found in:\n===\n\(swiftFileText)\n===", file: file, line: line) + XCTFail( + "Expected chunk:\n---\n\(expectedChunk.yellow)\n---\nnot found in:\n===\n\(swiftFileText)\n===", + file: file, + line: line + ) } } } diff --git a/Tests/SwiftJavaToolLibTests/JavaTranslatorTests.swift b/Tests/SwiftJavaToolLibTests/JavaTranslatorTests.swift index 3063cc2c2..02c41b0aa 100644 --- a/Tests/SwiftJavaToolLibTests/JavaTranslatorTests.swift +++ b/Tests/SwiftJavaToolLibTests/JavaTranslatorTests.swift @@ -13,12 +13,12 @@ //===----------------------------------------------------------------------===// import JavaUtilJar +import Subprocess @_spi(Testing) import SwiftJava import SwiftJavaConfigurationShared import SwiftJavaShared import SwiftJavaToolLib -import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 -import Subprocess +import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 class JavaTranslatorTests: XCTestCase { @@ -42,7 +42,8 @@ class JavaTranslatorTests: XCTestCase { Item value ) { return null; } } - """) + """ + ) try withJavaTranslator( javaClassNames: [ @@ -51,7 +52,7 @@ class JavaTranslatorTests: XCTestCase { "com.example.ExampleSimpleClass", ], classpath: [classpathURL], - ) { translator in + ) { translator in } } diff --git a/Tests/SwiftJavaToolLibTests/JavaTranslatorValidationTests.swift b/Tests/SwiftJavaToolLibTests/JavaTranslatorValidationTests.swift index 558add20d..17d363559 100644 --- a/Tests/SwiftJavaToolLibTests/JavaTranslatorValidationTests.swift +++ b/Tests/SwiftJavaToolLibTests/JavaTranslatorValidationTests.swift @@ -12,18 +12,22 @@ // //===----------------------------------------------------------------------===// +import SwiftJavaConfigurationShared import SwiftJavaToolLib import XCTest -import SwiftJavaConfigurationShared final class JavaTranslatorValidationTests: XCTestCase { func testValidationError() throws { - let translator = try JavaTranslator(config: Configuration(), swiftModuleName: "SwiftModule", environment: jvm.environment()) + let translator = try JavaTranslator( + config: Configuration(), + swiftModuleName: "SwiftModule", + environment: jvm.environment() + ) translator.translatedClasses = [ "TestClass": SwiftTypeName(module: "Module1", name: "Class1"), "TestClass2": SwiftTypeName(module: "Module2", name: "Class1"), "TestClass3": SwiftTypeName(module: "Module1", name: "Class1"), - "TestClass4": SwiftTypeName(module: nil, name: "Class1") + "TestClass4": SwiftTypeName(module: nil, name: "Class1"), ] XCTAssertThrowsError(try translator.validateClassConfiguration()) { error in @@ -31,10 +35,15 @@ final class JavaTranslatorValidationTests: XCTestCase { let validationError = error as! JavaTranslator.ValidationError switch validationError { case .multipleClassesMappedToSameName(let swiftToJavaMapping): - XCTAssertEqual(swiftToJavaMapping, [ - JavaTranslator.SwiftToJavaMapping(swiftType: .init(module: "Module1", name: "Class1"), - javaTypes: ["TestClass", "TestClass3"]) - ]) + XCTAssertEqual( + swiftToJavaMapping, + [ + JavaTranslator.SwiftToJavaMapping( + swiftType: .init(module: "Module1", name: "Class1"), + javaTypes: ["TestClass", "TestClass3"] + ) + ] + ) } } } diff --git a/Tests/SwiftJavaToolLibTests/TempFileTools.swift b/Tests/SwiftJavaToolLibTests/TempFileTools.swift index 5b133108d..77d04c29d 100644 --- a/Tests/SwiftJavaToolLibTests/TempFileTools.swift +++ b/Tests/SwiftJavaToolLibTests/TempFileTools.swift @@ -16,19 +16,20 @@ import Foundation /// Example demonstrating how to create a temporary file using Swift Foundation APIs public class TempFile { - - public static func create( - suffix: String, - _ contents: String = "", - in tempDirectory: URL = FileManager.default.temporaryDirectory) throws -> URL { - let tempFileName = "tmp_\(UUID().uuidString).\(suffix)" - let tempFileURL = tempDirectory.appendingPathComponent(tempFileName) - - try contents.write(to: tempFileURL, atomically: true, encoding: .utf8) - - return tempFileURL - } - public static func delete(at fileURL: URL) throws { - try FileManager.default.removeItem(at: fileURL) - } -} \ No newline at end of file + + public static func create( + suffix: String, + _ contents: String = "", + in tempDirectory: URL = FileManager.default.temporaryDirectory + ) throws -> URL { + let tempFileName = "tmp_\(UUID().uuidString).\(suffix)" + let tempFileURL = tempDirectory.appendingPathComponent(tempFileName) + + try contents.write(to: tempFileURL, atomically: true, encoding: .utf8) + + return tempFileURL + } + public static func delete(at fileURL: URL) throws { + try FileManager.default.removeItem(at: fileURL) + } +} diff --git a/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift b/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift index d2695fc23..daf8c8348 100644 --- a/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift +++ b/Tests/SwiftJavaToolLibTests/WrapJavaTests/BasicWrapJavaTests.swift @@ -12,13 +12,13 @@ // //===----------------------------------------------------------------------===// -@_spi(Testing) import SwiftJava -import SwiftJavaToolLib -import JavaUtilJar -import SwiftJavaShared import JavaNet -import SwiftJavaConfigurationShared +import JavaUtilJar import Subprocess +@_spi(Testing) import SwiftJava +import SwiftJavaConfigurationShared +import SwiftJavaShared +import SwiftJavaToolLib import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 final class BasicWrapJavaTests: XCTestCase { @@ -29,7 +29,8 @@ final class BasicWrapJavaTests: XCTestCase { package com.example; class ExampleSimpleClass {} - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -44,7 +45,7 @@ final class BasicWrapJavaTests: XCTestCase { """ @JavaClass("com.example.ExampleSimpleClass") open class ExampleSimpleClass: JavaObject { - """ + """, ] ) } @@ -57,7 +58,8 @@ final class BasicWrapJavaTests: XCTestCase { class ExampleSimpleClass { public void example(String name, int age) { } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -78,7 +80,7 @@ final class BasicWrapJavaTests: XCTestCase { /// ``` @JavaMethod open func example(_ arg0: String, _ arg1: Int32) - """ + """, ] ) } @@ -95,7 +97,8 @@ final class BasicWrapJavaTests: XCTestCase { class ExampleSimpleClass { class SimpleNested {} } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -139,12 +142,13 @@ final class BasicWrapJavaTests: XCTestCase { class SubClass extends SuperClass { public static final long serialVersionUID = 2L; } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.SuperClass", - "com.example.SubClass" + "com.example.SubClass", ], classpath: [classpathURL], expectedChunks: [ @@ -177,7 +181,8 @@ final class BasicWrapJavaTests: XCTestCase { public void init(String arg) throws Exception {} public void init() throws Exception {} } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -211,7 +216,8 @@ final class BasicWrapJavaTests: XCTestCase { ValueType oldest ); } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -232,7 +238,7 @@ final class BasicWrapJavaTests: XCTestCase { @JavaMethod(typeErasedResult: "ValueType!") public func apply(_ arg0: ValueType?, _ arg1: ValueType?) -> ValueType! } - """, + """ ] ) } diff --git a/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift b/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift index b93d42e05..39abff48e 100644 --- a/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift +++ b/Tests/SwiftJavaToolLibTests/WrapJavaTests/GenericsWrapJavaTests.swift @@ -12,13 +12,13 @@ // //===----------------------------------------------------------------------===// -@_spi(Testing) import SwiftJava -import SwiftJavaToolLib -import JavaUtilJar -import SwiftJavaShared import JavaNet -import SwiftJavaConfigurationShared +import JavaUtilJar import Subprocess +@_spi(Testing) import SwiftJava +import SwiftJavaConfigurationShared +import SwiftJavaShared +import SwiftJavaToolLib import XCTest // NOTE: Workaround for https://github.com/swiftlang/swift-java/issues/43 final class GenericsWrapJavaTests: XCTestCase { @@ -39,13 +39,14 @@ final class GenericsWrapJavaTests: XCTestCase { class ExampleSimpleClass { KeyType getGeneric(Item key) { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.Item", "com.example.Pair", - "com.example.ExampleSimpleClass" + "com.example.ExampleSimpleClass", ], classpath: [classpathURL], expectedChunks: [ @@ -89,24 +90,25 @@ final class GenericsWrapJavaTests: XCTestCase { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.Item", "com.example.Pair", - "com.example.ExampleSimpleClass" + "com.example.ExampleSimpleClass", ], classpath: [classpathURL], expectedChunks: [ """ @JavaMethod(typeErasedResult: "KeyType!") open func getGeneric() -> KeyType! - """, + """ ] ) } - + func testWrapJavaGenericMethod_multipleGenerics() async throws { let classpathURL = try await compileJava( """ @@ -123,13 +125,14 @@ final class GenericsWrapJavaTests: XCTestCase { class ExampleSimpleClass { Pair getPair(String name, Item key, Item value) { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.Item", "com.example.Pair", - "com.example.ExampleSimpleClass" + "com.example.ExampleSimpleClass", ], classpath: [classpathURL], expectedChunks: [ @@ -182,7 +185,8 @@ final class GenericsWrapJavaTests: XCTestCase { public T[] getGenericArray() { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -226,7 +230,7 @@ final class GenericsWrapJavaTests: XCTestCase { } func testWrapJavaGenericSuperclass() async throws { - return // FIXME: we need this + return // FIXME: we need this let classpathURL = try await compileJava( """ @@ -237,7 +241,8 @@ final class GenericsWrapJavaTests: XCTestCase { abstract class AbstractStore {} // implements Store {} // interface Store {} - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -260,7 +265,7 @@ final class GenericsWrapJavaTests: XCTestCase { """ @JavaClass("com.example.CompressingStore") open class CompressingStore: AbstractStore { - """ + """, ] ) } @@ -273,11 +278,12 @@ final class GenericsWrapJavaTests: XCTestCase { final class Kappa { public T get() { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ - "com.example.Kappa", + "com.example.Kappa" ], classpath: [classpathURL], expectedChunks: [ @@ -293,11 +299,11 @@ final class GenericsWrapJavaTests: XCTestCase { @JavaMethod(typeErasedResult: "T!") open func get() -> T! } - """ + """, ] ) } - + func test_wrapJava_genericMethodTypeErasure_ofNullableOptional_staticMethods() async throws { let classpathURL = try await compileJava( """ @@ -308,7 +314,8 @@ final class GenericsWrapJavaTests: XCTestCase { public static T nonNull(T value) { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -331,7 +338,7 @@ final class GenericsWrapJavaTests: XCTestCase { """ @JavaStaticMethod(typeErasedResult: "T!") public func nonNull(_ arg0: T?) -> T! where ObjectType == Optional - """ + """, ] ) } @@ -340,18 +347,19 @@ final class GenericsWrapJavaTests: XCTestCase { let classpathURL = try await compileJava( """ package com.example; - + interface MyInterface {} final class Public { public static void useInterface(T myInterface) { } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.MyInterface", - "com.example.Public" + "com.example.Public", ], classpath: [classpathURL], expectedChunks: [ @@ -370,7 +378,7 @@ final class GenericsWrapJavaTests: XCTestCase { @JavaStaticMethod public func useInterface(_ arg0: T?) } - """ + """, ] ) } @@ -380,13 +388,14 @@ final class GenericsWrapJavaTests: XCTestCase { let classpathURL = try await compileJava( """ package com.example; - + final class Map {} - + final class Something { public > M putIn(M map) { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ @@ -407,7 +416,6 @@ final class GenericsWrapJavaTests: XCTestCase { ) } - func testWrapJavaGenericMethod_parameterizedParameterType() async throws { let classpathURL = try await compileJava( """ @@ -424,22 +432,23 @@ final class GenericsWrapJavaTests: XCTestCase { Serializer serializer ) { return null; } } - """) + """ + ) try assertWrapJavaOutput( javaClassNames: [ "com.example.Resolver", "com.example.Serializer", - "com.example.Store" + "com.example.Store", ], classpath: [classpathURL], expectedChunks: [ """ @JavaMethod open func bootstrapStore(_ arg0: String, _ arg1: Resolver?, _ arg2: Serializer?) -> Store! - """, + """ ] ) } - + }