diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 0005f1c4..4578e073 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -9,8 +9,6 @@ jobs: uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main with: api_breakage_check_enabled: false - # FIXME: Something is off with the format task and it gets "stuck", need to investigate - format_check_enabled: false license_header_check_project_name: Swift.org test-java: diff --git a/Samples/JavaKitSampleApp/Package.swift b/Samples/JavaKitSampleApp/Package.swift index 1da05c29..43313d61 100644 --- a/Samples/JavaKitSampleApp/Package.swift +++ b/Samples/JavaKitSampleApp/Package.swift @@ -55,7 +55,7 @@ let package = Package( name: "JavaKitExample", type: .dynamic, targets: ["JavaKitExample"] - ), + ) ], dependencies: [ @@ -71,12 +71,12 @@ 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: "Java2SwiftPlugin", package: "swift-java"), ] - ), + ) ] ) diff --git a/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift b/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift index 146601d0..a9d06395 100644 --- a/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift +++ b/Sources/ExampleSwiftLibrary/MySwiftLibrary.swift @@ -18,9 +18,9 @@ // No annotations are necessary on the Swift side to perform the export. #if os(Linux) -import Glibc + import Glibc #else -import Darwin.C + import Darwin.C #endif public func helloWorld() { @@ -35,7 +35,7 @@ public func globalTakeIntInt(i: Int, j: Int) { p("i:\(i), j:\(j)") } -public func globalCallMeRunnable(run: () -> ()) { +public func globalCallMeRunnable(run: () -> Void) { run() } @@ -85,13 +85,15 @@ public func _getTypeByMangledNameInEnvironment( _ name: UnsafePointer, _ nameLength: UInt, genericEnvironment: UnsafeRawPointer?, - genericArguments: UnsafeRawPointer?) + genericArguments: UnsafeRawPointer? +) -> Any.Type? - // ==== Internal helpers -private func p(_ msg: String, file: String = #fileID, line: UInt = #line, function: String = #function) { +private func p( + _ msg: String, file: String = #fileID, line: UInt = #line, function: String = #function +) { print("[swift][\(file):\(line)](\(function)) \(msg)") fflush(stdout) } diff --git a/Sources/JExtractSwift/CodePrinter.swift b/Sources/JExtractSwift/CodePrinter.swift index 308db69e..f09e7694 100644 --- a/Sources/JExtractSwift/CodePrinter.swift +++ b/Sources/JExtractSwift/CodePrinter.swift @@ -34,7 +34,7 @@ public struct CodePrinter { } public var indentationText: String = "" - public static func toString(_ block: (inout CodePrinter) -> ()) -> String { + public static func toString(_ block: (inout CodePrinter) -> Void) -> String { var printer = CodePrinter() block(&printer) return printer.finalize() @@ -66,7 +66,7 @@ public struct CodePrinter { function: String = #function, file: String = #fileID, line: UInt = #line, - body: (inout CodePrinter) -> () + body: (inout CodePrinter) -> Void ) { indent() print("\(text) {") @@ -145,12 +145,16 @@ public struct CodePrinter { return contents } - public mutating func indent(file: String = #fileID, line: UInt = #line, function: String = #function) { + public mutating func indent( + file: String = #fileID, line: UInt = #line, function: String = #function + ) { indentationDepth += 1 log.trace("Indent => \(indentationDepth)", file: file, line: line, function: function) } - public mutating func outdent(file: String = #fileID, line: UInt = #line, function: String = #function) { + public mutating func outdent( + file: String = #fileID, line: UInt = #line, function: String = #function + ) { indentationDepth -= 1 log.trace("Outdent => \(indentationDepth)", file: file, line: line, function: function) assert(indentationDepth >= 0, "Outdent beyond zero at [\(file):\(line)](\(function))") diff --git a/Sources/JExtractSwift/Convenience/Collection+Extensions.swift b/Sources/JExtractSwift/Convenience/Collection+Extensions.swift index 5df901d2..4baba8a3 100644 --- a/Sources/JExtractSwift/Convenience/Collection+Extensions.swift +++ b/Sources/JExtractSwift/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( diff --git a/Sources/JExtractSwift/Convenience/String+Extensions.swift b/Sources/JExtractSwift/Convenience/String+Extensions.swift index 53781cef..be77cf31 100644 --- a/Sources/JExtractSwift/Convenience/String+Extensions.swift +++ b/Sources/JExtractSwift/Convenience/String+Extensions.swift @@ -22,4 +22,4 @@ extension String { return "\(f.uppercased())\(String(dropFirst()))" } -} \ No newline at end of file +} diff --git a/Sources/JExtractSwift/Convenience/SwiftSyntax+Extensions.swift b/Sources/JExtractSwift/Convenience/SwiftSyntax+Extensions.swift index 0a8f5533..5fff55d2 100644 --- a/Sources/JExtractSwift/Convenience/SwiftSyntax+Extensions.swift +++ b/Sources/JExtractSwift/Convenience/SwiftSyntax+Extensions.swift @@ -79,11 +79,8 @@ extension DeclSyntaxProtocol { extension DeclModifierSyntax { var isAccessControl: Bool { switch self.name.tokenKind { - case .keyword(.private): fallthrough - case .keyword(.fileprivate): fallthrough - case .keyword(.internal): fallthrough - case .keyword(.package): fallthrough - case .keyword(.public): + case .keyword(.private), .keyword(.fileprivate), .keyword(.internal), .keyword(.package), + .keyword(.public): return true default: return false diff --git a/Sources/JExtractSwift/ImportedDecls+Printing.swift b/Sources/JExtractSwift/ImportedDecls+Printing.swift index 76422d09..86be20f0 100644 --- a/Sources/JExtractSwift/ImportedDecls+Printing.swift +++ b/Sources/JExtractSwift/ImportedDecls+Printing.swift @@ -14,8 +14,8 @@ import Foundation import JavaTypes -import SwiftSyntax import OrderedCollections +import SwiftSyntax extension ImportedFunc { /// Render a `@{@snippet ... }` comment section that can be put inside a JavaDoc comment @@ -37,8 +37,8 @@ extension VariableAccessorKind { public var fieldSuffix: String { switch self { - case .get: "_GET" - case .set: "_SET" + case .get: "_GET" + case .set: "_SET" } } @@ -99,4 +99,4 @@ extension Optional where Wrapped == VariableAccessorKind { func renderMethodName(_ decl: ImportedFunc) -> String { self?.renderMethodName(decl) ?? decl.baseIdentifier } -} \ No newline at end of file +} diff --git a/Sources/JExtractSwift/ImportedDecls.swift b/Sources/JExtractSwift/ImportedDecls.swift index 3999a0c9..ffe73865 100644 --- a/Sources/JExtractSwift/ImportedDecls.swift +++ b/Sources/JExtractSwift/ImportedDecls.swift @@ -14,8 +14,8 @@ import Foundation import JavaTypes -import SwiftSyntax import OrderedCollections +import SwiftSyntax /// Any imported (Swift) declaration protocol ImportedDecl { @@ -36,7 +36,10 @@ public struct ImportedNominalType: ImportedDecl { public var methods: [ImportedFunc] = [] public var variables: [ImportedVariable] = [] - public init(swiftTypeName: String, javaType: JavaType, swiftMangledName: String? = nil, kind: NominalTypeKind) { + public init( + swiftTypeName: String, javaType: JavaType, swiftMangledName: String? = nil, + kind: NominalTypeKind + ) { self.swiftTypeName = swiftTypeName self.javaType = javaType self.swiftMangledName = swiftMangledName @@ -56,7 +59,7 @@ public struct ImportedNominalType: ImportedDecl { /// The Java class name without the package. public var javaClassName: String { switch javaType { - case .class(package: _, name: let name): name + case .class(package: _, let name): name default: javaType.description } } @@ -250,7 +253,7 @@ public struct ImportedVariable: ImportedDecl, CustomStringConvertible { public var identifier: String /// Which accessors are we able to expose. - /// + /// /// Usually this will be all the accessors the variable declares, /// however if the getter is async or throwing we may not be able to import it /// (yet), and therefore would skip it from the supported set. @@ -285,13 +288,14 @@ public struct ImportedVariable: ImportedDecl, CustomStringConvertible { switch kind { case .set: - let newValueParam: FunctionParameterSyntax = "_ newValue: \(self.returnType.cCompatibleSwiftType)" + let newValueParam: FunctionParameterSyntax = + "_ newValue: \(self.returnType.cCompatibleSwiftType)" var funcDecl = ImportedFunc( parentName: self.parentName, identifier: self.identifier, returnType: TranslatedType.void, parameters: [.init(param: newValueParam, type: self.returnType)]) - funcDecl.swiftMangledName = self.swiftMangledName + "s" // form mangled name of the getter by adding the suffix + funcDecl.swiftMangledName = self.swiftMangledName + "s" // form mangled name of the getter by adding the suffix return funcDecl case .get: @@ -300,21 +304,24 @@ public struct ImportedVariable: ImportedDecl, CustomStringConvertible { identifier: self.identifier, returnType: self.returnType, parameters: []) - funcDecl.swiftMangledName = self.swiftMangledName + "g" // form mangled name of the getter by adding the suffix + funcDecl.swiftMangledName = self.swiftMangledName + "g" // form mangled name of the getter by adding the suffix return funcDecl } } - public func effectiveAccessorParameters(_ kind: VariableAccessorKind, selfVariant: SelfParameterVariant?) -> [ImportedParam] { + public func effectiveAccessorParameters( + _ kind: VariableAccessorKind, selfVariant: SelfParameterVariant? + ) -> [ImportedParam] { var params: [ImportedParam] = [] if kind == .set { - let newValueParam: FunctionParameterSyntax = "_ newValue: \(raw: self.returnType.swiftTypeName)" + let newValueParam: FunctionParameterSyntax = + "_ newValue: \(raw: self.returnType.swiftTypeName)" params.append( ImportedParam( param: newValueParam, type: self.returnType) - ) + ) } if let parentName { diff --git a/Sources/JExtractSwift/JavaType+Printing.swift b/Sources/JExtractSwift/JavaType+Printing.swift index 39a348d9..137fa9fb 100644 --- a/Sources/JExtractSwift/JavaType+Printing.swift +++ b/Sources/JExtractSwift/JavaType+Printing.swift @@ -13,10 +13,10 @@ //===----------------------------------------------------------------------===// import Foundation +import JavaTypes import SwiftBasicFormat import SwiftParser import SwiftSyntax -import JavaTypes extension JavaType { /// Returns a 'handle' name to pass to the `invoke` call as well as the @@ -42,6 +42,7 @@ extension JavaType { """ } - fatalError("Cannot render closure downcall handle for: \(self), in: \(decl), parameter: \(parameter)") + fatalError( + "Cannot render closure downcall handle for: \(self), in: \(decl), parameter: \(parameter)") } } diff --git a/Sources/JExtractSwift/NominalTypeResolution.swift b/Sources/JExtractSwift/NominalTypeResolution.swift index e3cc18a1..af88bdb4 100644 --- a/Sources/JExtractSwift/NominalTypeResolution.swift +++ b/Sources/JExtractSwift/NominalTypeResolution.swift @@ -33,7 +33,7 @@ public class NominalTypeResolution { /// Mapping from qualified nominal type names to their syntax nodes. private var topLevelNominalTypes: [String: NominalTypeDeclSyntaxNode] = [:] - @_spi(Testing) public init() { } + @_spi(Testing) public init() {} } /// A syntax node for a nominal type declaration. @@ -59,13 +59,15 @@ extension NominalTypeResolution { while true { // If it's a nominal type, add its name. if let nominal = currentNode.asProtocol(SyntaxProtocol.self) as? NominalTypeDeclSyntaxNode, - let nominalName = nominal.name.identifier?.name { + let nominalName = nominal.name.identifier?.name + { nameComponents.append(nominalName) } // If it's an extension, add the full name of the extended type. if let extensionDecl = currentNode.as(ExtensionDeclSyntax.self), - let extendedNominal = extendedType(of: extensionDecl) { + let extendedNominal = extendedType(of: extensionDecl) + { let extendedNominalNameComponents = fullyQualifiedNameComponents(of: extendedNominal) return extendedNominalNameComponents + nameComponents.reversed() } @@ -90,7 +92,9 @@ extension NominalTypeResolution { /// Resolve a nominal type name to its syntax node, or nil if it cannot be /// resolved for any reason. - private func resolveNominalType(_ nameComponents: some Sequence) -> NominalTypeDeclSyntaxNode? { + private func resolveNominalType(_ nameComponents: some Sequence) + -> NominalTypeDeclSyntaxNode? + { // Resolve the name components in order. var currentNode: NominalTypeDeclSyntaxNode? = nil for nameComponentStr in nameComponents { @@ -126,8 +130,8 @@ extension NominalTypeResolution { // If we have a member with the given name that is a nominal type // declaration, we found what we're looking for. if let namedMemberDecl = memberDecl.asProtocol(NamedDeclSyntax.self), - namedMemberDecl.name.identifier?.name == name, - let nominalTypeDecl = memberDecl as? NominalTypeDeclSyntaxNode + namedMemberDecl.name.identifier?.name == name, + let nominalTypeDecl = memberDecl as? NominalTypeDeclSyntaxNode { return nominalTypeDecl } @@ -241,13 +245,13 @@ extension ExtensionDeclSyntax { return ["Dictionary"] case .implicitlyUnwrappedOptionalType, .optionalType: - return [ "Optional" ] + return ["Optional"] // Types that never involve nominals. case .classRestrictionType, .compositionType, .functionType, .metatypeType, - .missingType, .namedOpaqueReturnType, .packElementType, - .packExpansionType, .someOrAnyType, .suppressedType, .tupleType: + .missingType, .namedOpaqueReturnType, .packElementType, + .packExpansionType, .someOrAnyType, .suppressedType, .tupleType: return [] } } diff --git a/Sources/JExtractSwift/Swift2Java.swift b/Sources/JExtractSwift/Swift2Java.swift index e01143cc..311f3570 100644 --- a/Sources/JExtractSwift/Swift2Java.swift +++ b/Sources/JExtractSwift/Swift2Java.swift @@ -28,10 +28,14 @@ public struct SwiftToJava: ParsableCommand { @Option(help: "The package the generated Java code should be emitted into.") var packageName: String - @Option(name: .shortAndLong, help: "The directory in which to output the generated Swift files and manifest.") + @Option( + name: .shortAndLong, + help: "The directory in which to output the generated Swift files and manifest.") var outputDirectory: String = ".build/jextract-swift/generated" - @Option(name: .long, help: "Name of the Swift module to import (and the swift interface files belong to)") + @Option( + name: .long, + help: "Name of the Swift module to import (and the swift interface files belong to)") var swiftModule: String // TODO: Once we ship this, make this `.warning` by default @@ -53,13 +57,17 @@ public struct SwiftToJava: ParsableCommand { var fileNo = 1 for interfaceFile in interfaceFiles { - print("[\(fileNo)/\(interfaceFiles.count)] Importing module '\(swiftModule)', interface file: \(interfaceFile)") + print( + "[\(fileNo)/\(interfaceFiles.count)] Importing module '\(swiftModule)', interface file: \(interfaceFile)" + ) defer { fileNo += 1 } try translator.analyze(swiftInterfacePath: interfaceFile) try translator.writeImportedTypesTo(outputDirectory: outputDirectory) - print("[\(fileNo)/\(interfaceFiles.count)] Imported interface file: \(interfaceFile) " + "done.".green) + print( + "[\(fileNo)/\(interfaceFiles.count)] Imported interface file: \(interfaceFile) " + + "done.".green) } try translator.writeModuleTo(outputDirectory: outputDirectory) diff --git a/Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift b/Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift index c8b9bf09..90a317a9 100644 --- a/Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift +++ b/Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift @@ -73,7 +73,8 @@ extension Swift2JavaTranslator { let targetDirectory = [outputDirectory, javaPackagePath].joined(separator: PATH_SEPARATOR) log.trace("Prepare target directory: \(targetDirectory)") - try FileManager.default.createDirectory(atPath: targetDirectory, withIntermediateDirectories: true) + try FileManager.default.createDirectory( + atPath: targetDirectory, withIntermediateDirectories: true) let targetFilePath = [javaPackagePath, filename].joined(separator: PATH_SEPARATOR) print("Writing '\(targetFilePath)'...", terminator: "") @@ -178,8 +179,11 @@ extension Swift2JavaTranslator { printer.print("") } - public func printClass(_ printer: inout CodePrinter, _ decl: ImportedNominalType, body: (inout CodePrinter) -> Void) { - printer.printTypeDecl("public final class \(decl.javaClassName) implements SwiftHeapObject") { printer in + public func printClass( + _ printer: inout CodePrinter, _ decl: ImportedNominalType, body: (inout CodePrinter) -> Void + ) { + printer.printTypeDecl("public final class \(decl.javaClassName) implements SwiftHeapObject") { + printer in // ==== Storage of the class printClassSelfProperty(&printer, decl) @@ -468,7 +472,7 @@ extension Swift2JavaTranslator { printer.printSeparator(decl.identifier) printer.printTypeDecl("private static class \(decl.baseIdentifier)") { printer in - printFunctionDescriptorValue(&printer, decl); + printFunctionDescriptorValue(&printer, decl) printFindMemorySegmentAddrByMangledName(&printer, decl) printMethodDowncallHandleForAddrDesc(&printer) } @@ -486,9 +490,11 @@ extension Swift2JavaTranslator { } } - private func printFunctionAddressMethod(_ printer: inout CodePrinter, - decl: ImportedFunc, - accessorKind: VariableAccessorKind? = nil) { + private func printFunctionAddressMethod( + _ printer: inout CodePrinter, + decl: ImportedFunc, + accessorKind: VariableAccessorKind? = nil + ) { let addrName = accessorKind.renderAddrFieldName let methodNameSegment = accessorKind.renderMethodNameSegment @@ -507,9 +513,11 @@ extension Swift2JavaTranslator { ) } - private func printFunctionMethodHandleMethod(_ printer: inout CodePrinter, - decl: ImportedFunc, - accessorKind: VariableAccessorKind? = nil) { + private func printFunctionMethodHandleMethod( + _ printer: inout CodePrinter, + decl: ImportedFunc, + accessorKind: VariableAccessorKind? = nil + ) { let handleName = accessorKind.renderHandleFieldName let methodNameSegment = accessorKind.renderMethodNameSegment let snippet = decl.renderCommentSnippet ?? "* " @@ -527,9 +535,11 @@ extension Swift2JavaTranslator { ) } - private func printFunctionDescriptorMethod(_ printer: inout CodePrinter, - decl: ImportedFunc, - accessorKind: VariableAccessorKind? = nil) { + private func printFunctionDescriptorMethod( + _ printer: inout CodePrinter, + decl: ImportedFunc, + accessorKind: VariableAccessorKind? = nil + ) { let descName = accessorKind.renderDescFieldName let methodNameSegment = accessorKind.renderMethodNameSegment let snippet = decl.renderCommentSnippet ?? "* " @@ -557,7 +567,7 @@ extension Swift2JavaTranslator { continue } - printFunctionDescriptorValue(&printer, accessor, accessorKind: accessorKind); + printFunctionDescriptorValue(&printer, accessor, accessorKind: accessorKind) printFindMemorySegmentAddrByMangledName(&printer, accessor, accessorKind: accessorKind) printMethodDowncallHandleForAddrDesc(&printer, accessorKind: accessorKind) } @@ -583,24 +593,31 @@ extension Swift2JavaTranslator { // Render the basic "make the downcall" function if decl.hasParent { - printFuncDowncallMethod(&printer, decl: accessor, selfVariant: .memorySegment, accessorKind: accessorKind) - printFuncDowncallMethod(&printer, decl: accessor, selfVariant: .wrapper, accessorKind: accessorKind) + printFuncDowncallMethod( + &printer, decl: accessor, selfVariant: .memorySegment, accessorKind: accessorKind) + printFuncDowncallMethod( + &printer, decl: accessor, selfVariant: .wrapper, accessorKind: accessorKind) } else { - printFuncDowncallMethod(&printer, decl: accessor, selfVariant: nil, accessorKind: accessorKind) + printFuncDowncallMethod( + &printer, decl: accessor, selfVariant: nil, accessorKind: accessorKind) } } } - func printFindMemorySegmentAddrByMangledName(_ printer: inout CodePrinter, _ decl: ImportedFunc, - accessorKind: VariableAccessorKind? = nil) { + func printFindMemorySegmentAddrByMangledName( + _ printer: inout CodePrinter, _ decl: ImportedFunc, + accessorKind: VariableAccessorKind? = nil + ) { printer.print( """ public static final MemorySegment \(accessorKind.renderAddrFieldName) = \(swiftModuleName).findOrThrow("\(decl.swiftMangledName)"); """ - ); + ) } - func printMethodDowncallHandleForAddrDesc(_ printer: inout CodePrinter, accessorKind: VariableAccessorKind? = nil) { + func printMethodDowncallHandleForAddrDesc( + _ printer: inout CodePrinter, accessorKind: VariableAccessorKind? = nil + ) { printer.print( """ public static final MethodHandle \(accessorKind.renderHandleFieldName) = Linker.nativeLinker().downcallHandle(\(accessorKind.renderAddrFieldName), \(accessorKind.renderDescFieldName)); @@ -758,7 +775,7 @@ extension Swift2JavaTranslator { return false } - + public func renderTry(withArena: Bool) -> String { if withArena { "try (Arena arena = Arena.ofConfined()) {" @@ -767,7 +784,9 @@ extension Swift2JavaTranslator { } } - public func renderJavaParamDecls(_ decl: ImportedFunc, selfVariant: SelfParameterVariant?) -> String { + public func renderJavaParamDecls(_ decl: ImportedFunc, selfVariant: SelfParameterVariant?) + -> String + { var ps: [String] = [] var pCounter = 0 @@ -790,7 +809,8 @@ extension Swift2JavaTranslator { for p in decl.parameters where p.type.javaType.isSwiftClosure { if p.type.javaType == .javaLangRunnable { let paramName = p.secondName ?? p.firstName ?? "_" - let handleDesc = p.type.javaType.prepareClosureDowncallHandle(decl: decl, parameter: paramName) + let handleDesc = p.type.javaType.prepareClosureDowncallHandle( + decl: decl, parameter: paramName) printer.print(handleDesc) } } @@ -798,7 +818,9 @@ extension Swift2JavaTranslator { return printer.contents } - public func renderForwardParams(_ decl: ImportedFunc, selfVariant: SelfParameterVariant?) -> String { + public func renderForwardParams(_ decl: ImportedFunc, selfVariant: SelfParameterVariant?) + -> String + { var ps: [String] = [] var pCounter = 0 @@ -812,7 +834,7 @@ extension Swift2JavaTranslator { let param: String if p.effectiveName == "self$" { precondition(selfVariant == .memorySegment) - param = "self$"; + param = "self$" } else { param = "\(p.renderParameterForwarding() ?? nextUniqueParamName())" } @@ -830,7 +852,8 @@ extension Swift2JavaTranslator { public func printFunctionDescriptorValue( _ printer: inout CodePrinter, _ decl: ImportedFunc, - accessorKind: VariableAccessorKind? = nil) { + accessorKind: VariableAccessorKind? = nil + ) { let fieldName = accessorKind.renderDescFieldName printer.start("public static final FunctionDescriptor \(fieldName) = ") @@ -840,10 +863,10 @@ extension Swift2JavaTranslator { ) if decl.returnType.javaType == .void { - printer.print("FunctionDescriptor.ofVoid("); + printer.print("FunctionDescriptor.ofVoid(") printer.indent() } else { - printer.print("FunctionDescriptor.of("); + printer.print("FunctionDescriptor.of(") printer.indent() printer.print("", .continue) @@ -851,7 +874,9 @@ extension Swift2JavaTranslator { let returnTyIsLastTy = decl.parameters.isEmpty && !decl.hasParent if decl.isInit { // when initializing, we return a pointer to the newly created object - printer.print("/* -> */\(ForeignValueLayout.SwiftPointer)", .parameterNewlineSeparator(returnTyIsLastTy)) + printer.print( + "/* -> */\(ForeignValueLayout.SwiftPointer)", .parameterNewlineSeparator(returnTyIsLastTy) + ) } else { var returnDesc = decl.returnType.foreignValueLayout returnDesc.inlineComment = " -> " @@ -864,11 +889,13 @@ extension Swift2JavaTranslator { printer.print(desc, .parameterNewlineSeparator(isLast)) } - printer.outdent(); - printer.print(");"); + printer.outdent() + printer.print(");") } - public func printHeapObjectToStringMethod(_ printer: inout CodePrinter, _ decl: ImportedNominalType) { + public func printHeapObjectToStringMethod( + _ printer: inout CodePrinter, _ decl: ImportedNominalType + ) { printer.print( """ @Override diff --git a/Sources/JExtractSwift/Swift2JavaTranslator.swift b/Sources/JExtractSwift/Swift2JavaTranslator.swift index a954620b..edce52a1 100644 --- a/Sources/JExtractSwift/Swift2JavaTranslator.swift +++ b/Sources/JExtractSwift/Swift2JavaTranslator.swift @@ -117,7 +117,7 @@ extension Swift2JavaTranslator { static let defaultFormat = BasicFormat(indentationWidth: .spaces(2)) /// Default set Java imports for every generated file - static let defaultJavaImports: Array = [ + static let defaultJavaImports: [String] = [ "org.swift.swiftkit.*", "org.swift.swiftkit.SwiftKit", "org.swift.swiftkit.util.*", @@ -155,9 +155,9 @@ extension Swift2JavaTranslator { // Determine the nominal type kind. let kind: NominalTypeKind switch Syntax(nominal).as(SyntaxEnum.self) { - case .actorDecl: kind = .actor - case .classDecl: kind = .class - case .enumDecl: kind = .enum + case .actorDecl: kind = .actor + case .classDecl: kind = .class + case .enumDecl: kind = .enum case .structDecl: kind = .struct default: return nil } diff --git a/Sources/JExtractSwift/Swift2JavaVisitor.swift b/Sources/JExtractSwift/Swift2JavaVisitor.swift index 8cf39eab..37de1510 100644 --- a/Sources/JExtractSwift/Swift2JavaVisitor.swift +++ b/Sources/JExtractSwift/Swift2JavaVisitor.swift @@ -59,7 +59,8 @@ final class Swift2JavaVisitor: SyntaxVisitor { // Resolve the extended type of the extension as an imported nominal, and // recurse if we found it. guard let nominal = translator.nominalResolution.extendedType(of: node), - let importedNominalType = translator.importedNominalType(nominal) else { + let importedNominalType = translator.importedNominalType(nominal) + else { return .skipChildren } @@ -142,7 +143,7 @@ final class Swift2JavaVisitor: SyntaxVisitor { self.log.info("Import variable: \(node.kind) \(fullName)") let returnTy: TypeSyntax - if let typeAnnotation = binding.typeAnnotation{ + if let typeAnnotation = binding.typeAnnotation { returnTy = typeAnnotation.type } else { returnTy = "Swift.Void" @@ -180,7 +181,8 @@ final class Swift2JavaVisitor: SyntaxVisitor { override func visit(_ node: InitializerDeclSyntax) -> SyntaxVisitorContinueKind { guard let currentTypeName, - let currentType = translator.importedTypes[currentTypeName] else { + let currentType = translator.importedTypes[currentTypeName] + else { fatalError("Initializer must be within a current type, was: \(node)") } guard node.shouldImport(log: log) else { @@ -220,7 +222,8 @@ final class Swift2JavaVisitor: SyntaxVisitor { funcDecl.swiftMangledName = mangledName } - log.info("Record initializer method in \(currentType.javaType.description): \(funcDecl.identifier)") + log.info( + "Record initializer method in \(currentType.javaType.description): \(funcDecl.identifier)") translator.importedTypes[currentTypeName]!.initializers.append(funcDecl) return .skipChildren diff --git a/Sources/JExtractSwift/TerminalColors.swift b/Sources/JExtractSwift/TerminalColors.swift index fcef5a3c..8a4adb25 100644 --- a/Sources/JExtractSwift/TerminalColors.swift +++ b/Sources/JExtractSwift/TerminalColors.swift @@ -38,11 +38,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 { @@ -50,10 +50,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 { @@ -61,10 +61,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 { @@ -72,10 +72,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 { @@ -83,10 +83,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 { @@ -94,10 +94,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 { @@ -105,10 +105,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 { @@ -116,10 +116,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 { @@ -127,53 +127,53 @@ package extension String { } } - var `default`: String { + package var `default`: String { self.colored(as: .default) } - func colored(as color: Rainbow) -> String { + package func colored(as color: Rainbow) -> String { "\(color.rawValue)\(self)\(Rainbow.default.rawValue)" } } -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 `default`: String { + package var `default`: String { self.colored(as: .default) } - func colored(as color: Rainbow) -> String { + package func colored(as color: Rainbow) -> String { "\(color.rawValue)\(self)\(Rainbow.default.rawValue)" } } diff --git a/Sources/JExtractSwift/TranslatedType.swift b/Sources/JExtractSwift/TranslatedType.swift index 367c92cc..82e92069 100644 --- a/Sources/JExtractSwift/TranslatedType.swift +++ b/Sources/JExtractSwift/TranslatedType.swift @@ -21,10 +21,10 @@ extension Swift2JavaVisitor { func cCompatibleType(for type: TypeSyntax) throws -> TranslatedType { switch type.as(TypeSyntaxEnum.self) { case .arrayType, .attributedType, .classRestrictionType, .compositionType, - .dictionaryType, .implicitlyUnwrappedOptionalType, .metatypeType, - .missingType, .namedOpaqueReturnType, - .optionalType, .packElementType, .packExpansionType, .someOrAnyType, - .suppressedType, .tupleType: + .dictionaryType, .implicitlyUnwrappedOptionalType, .metatypeType, + .missingType, .namedOpaqueReturnType, + .optionalType, .packElementType, .packExpansionType, .someOrAnyType, + .suppressedType, .tupleType: throw TypeTranslationError.unimplementedType(type) case .functionType(let functionType): @@ -146,9 +146,10 @@ extension Swift2JavaVisitor { } // Look up the imported types by name to resolve it to a nominal type. - let swiftTypeName = type.trimmedDescription // FIXME: This is a hack. + let swiftTypeName = type.trimmedDescription // FIXME: This is a hack. guard let resolvedNominal = translator.nominalResolution.resolveNominalType(swiftTypeName), - let importedNominal = translator.importedNominalType(resolvedNominal) else { + let importedNominal = translator.importedNominalType(resolvedNominal) + else { throw TypeTranslationError.unknown(type) } @@ -165,7 +166,8 @@ extension String { /// 2. Whether the memory referenced by the pointer is mutable. /// 3. Whether the pointer type has a `count` property describing how /// many elements it points to. - fileprivate var isNameOfSwiftPointerType: (requiresArgument: Bool, mutable: Bool, hasCount: Bool)? { + fileprivate var isNameOfSwiftPointerType: (requiresArgument: Bool, mutable: Bool, hasCount: Bool)? + { switch self { case "COpaquePointer", "UnsafeRawPointer": return (requiresArgument: false, mutable: true, hasCount: false) @@ -228,7 +230,7 @@ public struct TranslatedType { /// Produce the "unqualified" Java type name. var unqualifiedJavaTypeName: String { switch javaType { - case .class(package: _, name: let name): name + case .class(package: _, let name): name default: javaType.description } } diff --git a/Sources/Java2Swift/JavaToSwift.swift b/Sources/Java2Swift/JavaToSwift.swift index 1cc094c2..c3d67351 100644 --- a/Sources/Java2Swift/JavaToSwift.swift +++ b/Sources/Java2Swift/JavaToSwift.swift @@ -27,7 +27,8 @@ import SwiftSyntaxBuilder struct JavaToSwift: ParsableCommand { static var _commandName: String { "Java2Swift" } - @Option(help: "The name of the Swift module into which the resulting Swift types will be generated.") + @Option( + help: "The name of the Swift module into which the resulting Swift types will be generated.") var moduleName: String @Option( @@ -44,7 +45,8 @@ struct JavaToSwift: ParsableCommand { @Option( name: [.customLong("cp"), .customLong("classpath")], - help: "Class search path of directories and zip/jar files from which Java classes can be loaded." + help: + "Class search path of directories and zip/jar files from which Java classes can be loaded." ) var classpath: [String] = [] @@ -53,7 +55,11 @@ struct JavaToSwift: ParsableCommand { ) var swiftNativeImplementation: [String] = [] - @Option(name: .shortAndLong, help: "The directory in which to output the generated Swift files or the Java2Swift configuration file.") + @Option( + name: .shortAndLong, + help: + "The directory in which to output the generated Swift files or the Java2Swift configuration file." + ) var outputDirectory: String? = nil @Argument( @@ -90,7 +96,8 @@ struct JavaToSwift: ParsableCommand { if jar { outputDir = baseDir } else { - outputDir = baseDir + outputDir = + baseDir .appendingPathComponent("generated", isDirectory: true) } @@ -138,7 +145,7 @@ struct JavaToSwift: ParsableCommand { // * Command-line option --classpath var classPathPieces: [String] = classpath switch generationMode { - case .configuration(jarFile: let jarFile): + case .configuration(let jarFile): // * Jar file (in `-jar` mode) classPathPieces.append(jarFile) case .classWrappers(let config): @@ -157,7 +164,7 @@ struct JavaToSwift: ParsableCommand { // Run the generation step. let classPath = classPathPieces.joined(separator: ":") switch generationMode { - case .configuration(jarFile: let jarFile): + case .configuration(let jarFile): try emitConfiguration( forJarFile: jarFile, classPath: classPath, @@ -203,15 +210,15 @@ struct JavaToSwift: ParsableCommand { // Load all of the requested classes. #if false - let classLoader = URLClassLoader( - [ - try URL("file://\(classPath)", environment: environment) - ], - environment: environment - ) + let classLoader = URLClassLoader( + [ + try URL("file://\(classPath)", environment: environment) + ], + environment: environment + ) #else - let classLoader = try JavaClass(in: environment) - .getSystemClassLoader()! + let classLoader = try JavaClass(in: environment) + .getSystemClassLoader()! #endif var javaClasses: [JavaClass] = [] for (javaClassName, swiftName) in config.classes { @@ -243,7 +250,8 @@ struct JavaToSwift: ParsableCommand { """ - let swiftFileName = try! translator.getSwiftTypeName(javaClass).swiftName.replacing(".", with: "+") + ".swift" + let swiftFileName = + try! translator.getSwiftTypeName(javaClass).swiftName.replacing(".", with: "+") + ".swift" try writeContents( swiftFileText, to: swiftFileName, @@ -303,8 +311,9 @@ struct JavaToSwift: ParsableCommand { continue } - let javaCanonicalName = String(entry.getName().replacing("/", with: ".") - .dropLast(".class".count)) + let javaCanonicalName = String( + entry.getName().replacing("/", with: ".") + .dropLast(".class".count)) configuration.classes[javaCanonicalName] = javaCanonicalName.defaultSwiftNameForJavaClass } diff --git a/Sources/Java2SwiftLib/Configuration.swift b/Sources/Java2SwiftLib/Configuration.swift index 6617b4d0..e30eb58f 100644 --- a/Sources/Java2SwiftLib/Configuration.swift +++ b/Sources/Java2SwiftLib/Configuration.swift @@ -26,7 +26,7 @@ package struct Configuration: Codable { /// the corresponding Swift names (e.g., JavaVector). package var classes: [String: String] = [:] - package init(classPath: String? = nil, classes: [String : String] = [:]) { + package init(classPath: String? = nil, classes: [String: String] = [:]) { self.classPath = classPath self.classes = classes } diff --git a/Sources/Java2SwiftLib/JavaTranslator.swift b/Sources/Java2SwiftLib/JavaTranslator.swift index a5af9baa..19a3a213 100644 --- a/Sources/Java2SwiftLib/JavaTranslator.swift +++ b/Sources/Java2SwiftLib/JavaTranslator.swift @@ -31,8 +31,9 @@ package class JavaTranslator { /// A mapping from the canonical name of Java classes to the corresponding /// Swift type name, its Swift module, and whether we need to be working /// with optionals. - package var translatedClasses: [String: (swiftType: String, swiftModule: String?, isOptional: Bool)] = - defaultTranslatedClasses + package var translatedClasses: + [String: (swiftType: String, swiftModule: String?, isOptional: Bool)] = + defaultTranslatedClasses /// The set of Swift modules that need to be imported to make the generated /// code compile. Use `getImportDecls()` to format this into a list of @@ -78,10 +79,11 @@ extension JavaTranslator { /// The default set of translated classes that do not come from JavaKit /// itself. This should only be used to refer to types that are built-in to /// JavaKit and therefore aren't captured in any configuration file. - package static let defaultTranslatedClasses: [String: (swiftType: String, swiftModule: String?, isOptional: Bool)] = [ - "java.lang.Class": ("JavaClass", "JavaKit", true), - "java.lang.String": ("String", "JavaKit", false), - ] + package static let defaultTranslatedClasses: + [String: (swiftType: String, swiftModule: String?, isOptional: Bool)] = [ + "java.lang.Class": ("JavaClass", "JavaKit", true), + "java.lang.String": ("String", "JavaKit", false), + ] } // MARK: Import translation @@ -119,7 +121,8 @@ extension JavaTranslator { // Handle array types by recursing into the component type. if let arrayType = javaType.as(GenericArrayType.self) { - let elementType = try getSwiftTypeNameAsString(arrayType.getGenericComponentType()!, outerOptional: true) + let elementType = try getSwiftTypeNameAsString( + arrayType.getGenericComponentType()!, outerOptional: true) return "[\(elementType)]" } @@ -161,7 +164,9 @@ extension JavaTranslator { } /// Translate a Java class into its corresponding Swift type name. - package func getSwiftTypeName(_ javaClass: JavaClass) throws -> (swiftName: String, isOptional: Bool) { + package func getSwiftTypeName(_ javaClass: JavaClass) throws -> ( + swiftName: String, isOptional: Bool + ) { let javaType = try JavaType(javaTypeName: javaClass.getName()) let isSwiftOptional = javaType.isSwiftOptional return ( @@ -221,7 +226,8 @@ extension JavaTranslator { let typeName = try getSwiftTypeNameAsString(javaType, outerOptional: false) return "\(typeName).self" } catch { - logUntranslated("Unable to translate '\(fullName)' interface '\(javaType.getTypeName())': \(error)") + logUntranslated( + "Unable to translate '\(fullName)' interface '\(javaType.getTypeName())': \(error)") return nil } } @@ -257,11 +263,12 @@ extension JavaTranslator { } return nil } - + do { return try translateField(field) } catch { - logUntranslated("Unable to translate '\(fullName)' static field '\(field.getName())': \(error)") + logUntranslated( + "Unable to translate '\(fullName)' static field '\(field.getName())': \(error)") return nil } } @@ -280,9 +287,10 @@ extension JavaTranslator { contentsOf: javaClass.getConstructors().compactMap { $0.flatMap { constructor in do { - let implementedInSwift = constructor.isNative && - constructor.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) && - swiftNativeImplementations.contains(javaClass.getCanonicalName()) + let implementedInSwift = + constructor.isNative + && constructor.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) + && swiftNativeImplementations.contains(javaClass.getCanonicalName()) let translated = try translateConstructor( constructor, @@ -315,9 +323,9 @@ extension JavaTranslator { return nil } - let implementedInSwift = method.isNative && - method.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) && - swiftNativeImplementations.contains(javaClass.getCanonicalName()) + let implementedInSwift = + method.isNative && method.getDeclaringClass()!.equals(javaClass.as(JavaObject.self)!) + && swiftNativeImplementations.contains(javaClass.getCanonicalName()) // Translate the method if we can. do { @@ -333,7 +341,8 @@ extension JavaTranslator { return translated } catch { - logUntranslated("Unable to translate '\(fullName)' method '\(method.getName())': \(error)") + logUntranslated( + "Unable to translate '\(fullName)' method '\(method.getName())': \(error)") return nil } } @@ -364,7 +373,7 @@ extension JavaTranslator { // Emit the struct declaration describing the java class. let (swiftParentType, swiftInnermostTypeName) = swiftTypeName.splitSwiftTypeName() - let classOrInterface: String = javaClass.isInterface() ? "JavaInterface" : "JavaClass"; + let classOrInterface: String = javaClass.isInterface() ? "JavaInterface" : "JavaClass" var classDecl = """ @\(raw:classOrInterface)(\(literal: fullName)\(raw: extends)\(raw: interfacesStr)) @@ -403,21 +412,22 @@ extension JavaTranslator { } } ) - + staticMembers.append( contentsOf: staticMethods.compactMap { method in - // Translate each static method. - do { - return try translateMethod( - method, implementedInSwift: /*FIXME:*/false, - genericParameterClause: genericParameterClause, - whereClause: staticMemberWhereClause - ) - } catch { - logUntranslated("Unable to translate '\(fullName)' static method '\(method.getName())': \(error)") - return nil - } + // Translate each static method. + do { + return try translateMethod( + method, implementedInSwift: /*FIXME:*/ false, + genericParameterClause: genericParameterClause, + whereClause: staticMemberWhereClause + ) + } catch { + logUntranslated( + "Unable to translate '\(fullName)' static method '\(method.getName())': \(error)") + return nil } + } ) if !staticMembers.isEmpty { @@ -471,11 +481,15 @@ extension JavaTranslator { _ javaConstructor: Constructor, implementedInSwift: Bool ) throws -> DeclSyntax { - let parameters = try translateParameters(javaConstructor.getParameters()) + ["environment: JNIEnvironment? = nil"] + let parameters = + try translateParameters(javaConstructor.getParameters()) + [ + "environment: JNIEnvironment? = nil" + ] let parametersStr = parameters.map { $0.description }.joined(separator: ", ") let throwsStr = javaConstructor.throwsCheckedException ? "throws" : "" - let javaMethodAttribute = implementedInSwift + let javaMethodAttribute = + implementedInSwift ? "" : "@JavaMethod\n" let accessModifier = implementedInSwift ? "" : "public " @@ -498,7 +512,8 @@ extension JavaTranslator { // Map the result type. let resultTypeStr: String - let resultType = try getSwiftTypeNameAsString(javaMethod.getGenericReturnType()!, outerOptional: true) + let resultType = try getSwiftTypeNameAsString( + javaMethod.getGenericReturnType()!, outerOptional: true) if resultType != "Void" { resultTypeStr = " -> \(resultType)" } else { @@ -507,18 +522,19 @@ extension JavaTranslator { let throwsStr = javaMethod.throwsCheckedException ? "throws" : "" let swiftMethodName = javaMethod.getName().escapedSwiftName - let methodAttribute: AttributeSyntax = implementedInSwift + let methodAttribute: AttributeSyntax = + implementedInSwift ? "" - : javaMethod.isStatic ? "@JavaStaticMethod\n" : "@JavaMethod\n"; + : javaMethod.isStatic ? "@JavaStaticMethod\n" : "@JavaMethod\n" let accessModifier = implementedInSwift ? "" : "public " return """ \(methodAttribute)\(raw: accessModifier)func \(raw: swiftMethodName)\(raw: genericParameterClause)(\(raw: parametersStr))\(raw: throwsStr)\(raw: resultTypeStr)\(raw: whereClause) """ } - + package func translateField(_ javaField: Field) throws -> DeclSyntax { let typeName = try getSwiftTypeNameAsString(javaField.getGenericType()!, outerOptional: true) - let fieldAttribute: AttributeSyntax = javaField.isStatic ? "@JavaStaticField" : "@JavaField"; + let fieldAttribute: AttributeSyntax = javaField.isStatic ? "@JavaStaticField" : "@JavaField" let swiftFieldName = javaField.getName().escapedSwiftName return """ \(fieldAttribute) @@ -528,15 +544,15 @@ extension JavaTranslator { package func translateToEnumValue(name: String, enumFields: [Field]) -> [DeclSyntax] { let extensionSyntax: DeclSyntax = """ - public enum \(raw: name): Equatable { - \(raw: enumFields.map { "case \($0.getName())" }.joined(separator: "\n")) - } - """ + public enum \(raw: name): Equatable { + \(raw: enumFields.map { "case \($0.getName())" }.joined(separator: "\n")) + } + """ let mappingSyntax: DeclSyntax = """ - public var enumValue: \(raw: name)? { - let classObj = self.javaClass - \(raw: enumFields.map { + public var enumValue: \(raw: name)? { + let classObj = self.javaClass + \(raw: enumFields.map { // The equals method takes a java object, so we need to cast it here """ if self.equals(classObj.\($0.getName())?.as(JavaObject.self)) { @@ -544,33 +560,36 @@ extension JavaTranslator { } """ }.joined(separator: " else ")) else { - return nil + return nil + } } - } - """ + """ + + let enumCases = + enumFields.map { + return """ + case .\($0.getName()): + if let \($0.getName()) = classObj.\($0.getName()) { + self = \($0.getName()) + } else { + fatalError("Enum value \($0.getName()) was unexpectedly nil, please re-run Java2Swift on the most updated Java class") + } + """ + }.joined(separator: "\n") let initSyntax: DeclSyntax = """ - public init(_ enumValue: \(raw: name), environment: JNIEnvironment? = nil) { - let _environment = if let environment { - environment - } else { - try! JavaVirtualMachine.shared().environment() + public init(_ enumValue: \(raw: name), environment: JNIEnvironment? = nil) { + let _environment = if let environment { + environment + } else { + try! JavaVirtualMachine.shared().environment() + } + let classObj = try! JavaClass(in: _environment) + switch enumValue { + \(raw: enumCases) + } } - let classObj = try! JavaClass(in: _environment) - switch enumValue { - \(raw: enumFields.map { - return """ - case .\($0.getName()): - if let \($0.getName()) = classObj.\($0.getName()) { - self = \($0.getName()) - } else { - fatalError("Enum value \($0.getName()) was unexpectedly nil, please re-run Java2Swift on the most updated Java class") - } """ - }.joined(separator: "\n")) - } - } - """ return [extensionSyntax, mappingSyntax, initSyntax] } @@ -580,7 +599,8 @@ extension JavaTranslator { return try parameters.compactMap { javaParameter in guard let javaParameter else { return nil } - let typeName = try getSwiftTypeNameAsString(javaParameter.getParameterizedType()!, outerOptional: true) + let typeName = try getSwiftTypeNameAsString( + javaParameter.getParameterizedType()!, outerOptional: true) let paramName = javaParameter.getName() return "_ \(raw: paramName): \(raw: typeName)" } diff --git a/Sources/JavaKit/BridgedValues/JavaValue+Array.swift b/Sources/JavaKit/BridgedValues/JavaValue+Array.swift index 3db30789..26879090 100644 --- a/Sources/JavaKit/BridgedValues/JavaValue+Array.swift +++ b/Sources/JavaKit/BridgedValues/JavaValue+Array.swift @@ -78,15 +78,19 @@ extension Array: JavaValue where Element: JavaValue { environment.interface.SetObjectField } - public static func jniStaticMethodCall(in environment: JNIEnvironment) -> JNIStaticMethodCall { + public static func jniStaticMethodCall(in environment: JNIEnvironment) -> JNIStaticMethodCall< + JNIType + > { environment.interface.CallStaticObjectMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticObjectField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticObjectField } @@ -98,7 +102,8 @@ extension Array: JavaValue where Element: JavaValue { } } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in 0.. JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start.. JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticBooleanField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticBooleanField } @@ -59,11 +61,13 @@ extension Bool: JavaValue { environment.interface.NewBooleanArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetBooleanArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetBooleanArrayRegion } diff --git a/Sources/JavaKit/BridgedValues/JavaValue+FloatingPoint.swift b/Sources/JavaKit/BridgedValues/JavaValue+FloatingPoint.swift index 32f4bd0a..b580859a 100644 --- a/Sources/JavaKit/BridgedValues/JavaValue+FloatingPoint.swift +++ b/Sources/JavaKit/BridgedValues/JavaValue+FloatingPoint.swift @@ -41,11 +41,13 @@ extension Float: JavaValue { environment.interface.CallStaticFloatMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticFloatField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticFloatField } @@ -53,11 +55,13 @@ extension Float: JavaValue { environment.interface.NewFloatArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetFloatArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetFloatArrayRegion } @@ -93,11 +97,13 @@ extension Double: JavaValue { environment.interface.CallStaticDoubleMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticDoubleField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticDoubleField } @@ -105,11 +111,13 @@ extension Double: JavaValue { environment.interface.NewDoubleArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetDoubleArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetDoubleArrayRegion } diff --git a/Sources/JavaKit/BridgedValues/JavaValue+Integers.swift b/Sources/JavaKit/BridgedValues/JavaValue+Integers.swift index 01a7bdba..c5026467 100644 --- a/Sources/JavaKit/BridgedValues/JavaValue+Integers.swift +++ b/Sources/JavaKit/BridgedValues/JavaValue+Integers.swift @@ -41,11 +41,13 @@ extension Int8: JavaValue { environment.interface.CallStaticByteMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticByteField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticByteField } @@ -53,11 +55,13 @@ extension Int8: JavaValue { environment.interface.NewByteArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetByteArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetByteArrayRegion } @@ -93,11 +97,13 @@ extension UInt16: JavaValue { environment.interface.CallStaticCharMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticCharField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticCharField } @@ -105,11 +111,13 @@ extension UInt16: JavaValue { environment.interface.NewCharArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetCharArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetCharArrayRegion } @@ -145,11 +153,13 @@ extension Int16: JavaValue { environment.interface.CallStaticShortMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticShortField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticShortField } @@ -157,11 +167,13 @@ extension Int16: JavaValue { environment.interface.NewShortArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetShortArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetShortArrayRegion } @@ -203,11 +215,13 @@ extension Int32: JavaValue { environment.interface.CallStaticIntMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticIntField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticIntField } @@ -215,11 +229,13 @@ extension Int32: JavaValue { environment.interface.NewIntArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetIntArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetIntArrayRegion } @@ -261,11 +277,13 @@ extension Int64: JavaValue { environment.interface.CallStaticLongMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticLongField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticLongField } @@ -273,11 +291,13 @@ extension Int64: JavaValue { environment.interface.NewLongArray } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { environment.interface.GetLongArrayRegion } - public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { environment.interface.SetLongArrayRegion } diff --git a/Sources/JavaKit/BridgedValues/JavaValue+String.swift b/Sources/JavaKit/BridgedValues/JavaValue+String.swift index e9c11e64..270c0bc0 100644 --- a/Sources/JavaKit/BridgedValues/JavaValue+String.swift +++ b/Sources/JavaKit/BridgedValues/JavaValue+String.swift @@ -49,15 +49,19 @@ extension String: JavaValue { environment.interface.SetObjectField } - public static func jniStaticMethodCall(in environment: JNIEnvironment) -> JNIStaticMethodCall { + public static func jniStaticMethodCall(in environment: JNIEnvironment) -> JNIStaticMethodCall< + JNIType + > { environment.interface.CallStaticObjectMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticObjectField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticObjectField } @@ -69,7 +73,8 @@ extension String: JavaValue { } } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in 0.. JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start...allocate(capacity: allVMOptions.count) + let optionsBuffer = UnsafeMutableBufferPointer.allocate( + capacity: allVMOptions.count) defer { optionsBuffer.deallocate() } diff --git a/Sources/JavaKit/JavaKitVM/LockedState.swift b/Sources/JavaKit/JavaKitVM/LockedState.swift index e095668c..f09f5065 100644 --- a/Sources/JavaKit/JavaKitVM/LockedState.swift +++ b/Sources/JavaKit/JavaKitVM/LockedState.swift @@ -13,148 +13,151 @@ //===----------------------------------------------------------------------===// #if canImport(os) -internal import os -#if FOUNDATION_FRAMEWORK && canImport(C.os.lock) -internal import C.os.lock -#endif + internal import os + #if FOUNDATION_FRAMEWORK && canImport(C.os.lock) + internal import C.os.lock + #endif #elseif canImport(Bionic) -import Bionic + import Bionic #elseif canImport(Glibc) -import Glibc + import Glibc #elseif canImport(Musl) -import Musl + import Musl #elseif canImport(WinSDK) -import WinSDK + import WinSDK #endif 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 { + return 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/JavaKit/JavaObject+MethodCalls.swift b/Sources/JavaKit/JavaObject+MethodCalls.swift index 0a48b8bd..6c623b87 100644 --- a/Sources/JavaKit/JavaObject+MethodCalls.swift +++ b/Sources/JavaKit/JavaObject+MethodCalls.swift @@ -40,7 +40,9 @@ private func countArgs(_ arg: repeat each Arg) -> Int { } /// Create an array of jvalue instances from the provided Java-compatible values. -private func getJValues(_ arg: repeat each Arg, in environment: JNIEnvironment) -> [jvalue] { +private func getJValues(_ arg: repeat each Arg, in environment: JNIEnvironment) + -> [jvalue] +{ .init(unsafeUninitializedCapacity: countArgs(repeat each arg)) { (buffer, initializedCount) in for arg in repeat each arg { buffer[initializedCount] = arg.getJValue(in: environment) @@ -199,7 +201,8 @@ extension AnyJavaObject { methodName: String, arguments: repeat each Param ) throws { - let methodID = try javaMethodLookup(methodName: methodName, parameterTypes: repeat (each Param).self) + let methodID = try javaMethodLookup( + methodName: methodName, parameterTypes: repeat (each Param).self) return try javaMethodCall( method: methodID, args: repeat each arguments @@ -265,7 +268,8 @@ extension AnyJavaObject { } /// Retrieve the JNI field ID for a field with the given name and type. - private func getJNIFieldID(_ fieldName: String, fieldType: FieldType.Type) -> jfieldID? + private func getJNIFieldID(_ fieldName: String, fieldType: FieldType.Type) + -> jfieldID? where FieldType: ~Copyable { let this = javaThis let environment = javaEnvironment @@ -273,7 +277,8 @@ extension AnyJavaObject { // Retrieve the Java class instance from the object. let thisClass = environment.interface.GetObjectClass(environment, this)! - return environment.interface.GetFieldID(environment, thisClass, fieldName, FieldType.jniMangling) + return environment.interface.GetFieldID( + environment, thisClass, fieldName, FieldType.jniMangling) } public subscript( @@ -363,10 +368,13 @@ extension JavaClass { } /// Retrieve the JNI field ID for a field with the given name and type. - private func getJNIStaticFieldID(_ fieldName: String, fieldType: FieldType.Type) -> jfieldID? { + private func getJNIStaticFieldID( + _ fieldName: String, fieldType: FieldType.Type + ) -> jfieldID? { let environment = javaEnvironment - return environment.interface.GetStaticFieldID(environment, javaThis, fieldName, FieldType.jniMangling) + return environment.interface.GetStaticFieldID( + environment, javaThis, fieldName, FieldType.jniMangling) } public subscript( diff --git a/Sources/JavaKit/JavaValue.swift b/Sources/JavaKit/JavaValue.swift index 310b54df..9c6eab8e 100644 --- a/Sources/JavaKit/JavaValue.swift +++ b/Sources/JavaKit/JavaValue.swift @@ -96,7 +96,9 @@ public protocol JavaValue: ~Copyable { public typealias JNIEnvironment = UnsafeMutablePointer /// Type of an operation that performs a JNI method call. -public typealias JNIMethodCall = (JNIEnvironment, jobject, jmethodID, UnsafePointer?) -> Result +public typealias JNIMethodCall = ( + JNIEnvironment, jobject, jmethodID, UnsafePointer? +) -> Result /// Type of an operation that gets a field's value via JNI. public typealias JNIFieldGet = (JNIEnvironment, jobject, jfieldID) -> FieldType @@ -105,13 +107,16 @@ public typealias JNIFieldGet = (JNIEnvironment, jobject, jfieldID) -> public typealias JNIFieldSet = (JNIEnvironment, jobject, jfieldID, FieldType) -> Void /// Type of an operation that performs a JNI static method call. -public typealias JNIStaticMethodCall = (JNIEnvironment, jclass, jmethodID, UnsafePointer?) -> Result +public typealias JNIStaticMethodCall = ( + JNIEnvironment, jclass, jmethodID, UnsafePointer? +) -> Result /// Type of an operation that gets a static field's value via JNI. public typealias JNIStaticFieldGet = (JNIEnvironment, jclass, jfieldID) -> FieldType /// Type of an operation that sets a static field's value via JNI. -public typealias JNIStaticFieldSet = (JNIEnvironment, jclass, jfieldID, FieldType) -> Void +public typealias JNIStaticFieldSet = (JNIEnvironment, jclass, jfieldID, FieldType) -> + Void /// The type of an operation that produces a new Java array of type ArrayType /// via JNI. @@ -127,7 +132,9 @@ public typealias JNIGetArrayRegion = ( /// The type of an operation that fills in a Java array with elements from /// a buffer. /// array via JNI. -public typealias JNISetArrayRegion = (JNIEnvironment, jobject, jsize, jsize, UnsafePointer?) +public typealias JNISetArrayRegion = ( + JNIEnvironment, jobject, jsize, jsize, UnsafePointer? +) -> Void extension JavaValue where Self: ~Copyable { diff --git a/Sources/JavaKit/Macros.swift b/Sources/JavaKit/Macros.swift index 12ae0c26..ed278ee7 100644 --- a/Sources/JavaKit/Macros.swift +++ b/Sources/JavaKit/Macros.swift @@ -92,8 +92,8 @@ public macro JavaInterface(_ fullClassName: String, extends: (any AnyJavaObject. /// } /// ``` @attached(accessor) -public macro JavaField(_ javaFieldName: String? = nil) = #externalMacro(module: "JavaKitMacros", type: "JavaFieldMacro") - +public macro JavaField(_ javaFieldName: String? = nil) = + #externalMacro(module: "JavaKitMacros", type: "JavaFieldMacro") /// Attached macro that turns a Swift property into one that accesses a Java static field on the underlying Java object. /// @@ -106,7 +106,8 @@ public macro JavaField(_ javaFieldName: String? = nil) = #externalMacro(module: /// } /// ``` @attached(accessor) -public macro JavaStaticField(_ javaFieldName: String? = nil) = #externalMacro(module: "JavaKitMacros", type: "JavaFieldMacro") +public macro JavaStaticField(_ javaFieldName: String? = nil) = + #externalMacro(module: "JavaKitMacros", type: "JavaFieldMacro") /// Attached macro that turns a Swift method into one that wraps a Java method on the underlying Java object. /// @@ -165,4 +166,5 @@ public macro JavaStaticMethod() = #externalMacro(module: "JavaKitMacros", type: /// } /// ``` @attached(peer) -public macro JavaImplementation(_ fullClassName: String) = #externalMacro(module: "JavaKitMacros", type: "JavaImplementationMacro") +public macro JavaImplementation(_ fullClassName: String) = + #externalMacro(module: "JavaKitMacros", type: "JavaImplementationMacro") diff --git a/Sources/JavaKit/Optional+JavaObject.swift b/Sources/JavaKit/Optional+JavaObject.swift index 55ad366e..b044355b 100644 --- a/Sources/JavaKit/Optional+JavaObject.swift +++ b/Sources/JavaKit/Optional+JavaObject.swift @@ -60,11 +60,13 @@ extension Optional: JavaValue where Wrapped: AnyJavaObject { environment.interface.CallStaticObjectMethodA } - public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet { + public static func jniStaticFieldGet(in environment: JNIEnvironment) -> JNIStaticFieldGet + { environment.interface.GetStaticObjectField } - public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet { + public static func jniStaticFieldSet(in environment: JNIEnvironment) -> JNIStaticFieldSet + { environment.interface.SetStaticObjectField } @@ -75,7 +77,8 @@ extension Optional: JavaValue where Wrapped: AnyJavaObject { } } - public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion { + public static func jniGetArrayRegion(in environment: JNIEnvironment) -> JNIGetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeMutableBufferPointer(start: outPointer, count: Int(length)) for i in start.. JNISetArrayRegion { + public static func jniSetArrayRegion(in environment: JNIEnvironment) -> JNISetArrayRegion + { return { environment, array, start, length, outPointer in let buffer = UnsafeBufferPointer(start: outPointer, count: Int(length)) for i in start...self)! } } - diff --git a/Sources/JavaKitCollection/generated/HashMap.swift b/Sources/JavaKitCollection/generated/HashMap.swift index 8bd86744..5aed51ec 100644 --- a/Sources/JavaKitCollection/generated/HashMap.swift +++ b/Sources/JavaKitCollection/generated/HashMap.swift @@ -90,5 +90,7 @@ public struct HashMap { } extension JavaClass { @JavaStaticMethod - public func newHashMap(_ arg0: Int32) -> HashMap? where ObjectType == HashMap + public func newHashMap(_ arg0: Int32) -> HashMap< + JavaObject, JavaObject + >? where ObjectType == HashMap } diff --git a/Sources/JavaKitCollection/generated/HashSet.swift b/Sources/JavaKitCollection/generated/HashSet.swift index ff194343..30f13c7d 100644 --- a/Sources/JavaKitCollection/generated/HashSet.swift +++ b/Sources/JavaKitCollection/generated/HashSet.swift @@ -87,5 +87,6 @@ public struct HashSet { } extension JavaClass { @JavaStaticMethod - public func newHashSet(_ arg0: Int32) -> HashSet? where ObjectType == HashSet + public func newHashSet(_ arg0: Int32) -> HashSet? + where ObjectType == HashSet } diff --git a/Sources/JavaKitCollection/generated/JavaSet.swift b/Sources/JavaKitCollection/generated/JavaSet.swift index b1412c9d..1784ef17 100644 --- a/Sources/JavaKitCollection/generated/JavaSet.swift +++ b/Sources/JavaKitCollection/generated/JavaSet.swift @@ -51,41 +51,68 @@ 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 + 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 + 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/JavaKitCollection/generated/List.swift b/Sources/JavaKitCollection/generated/List.swift index fb323301..0435621a 100644 --- a/Sources/JavaKitCollection/generated/List.swift +++ b/Sources/JavaKitCollection/generated/List.swift @@ -102,41 +102,68 @@ 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 + public func of(_ arg0: JavaObject?) -> List? + where ObjectType == List @JavaStaticMethod 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 + 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/JavaKitMacros/GenerationMode.swift b/Sources/JavaKitMacros/GenerationMode.swift index d000d209..5ef17c47 100644 --- a/Sources/JavaKitMacros/GenerationMode.swift +++ b/Sources/JavaKitMacros/GenerationMode.swift @@ -64,7 +64,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/JavaKitMacros/ImplementsJavaMacro.swift b/Sources/JavaKitMacros/ImplementsJavaMacro.swift index b3057ae4..2a4c3dd0 100644 --- a/Sources/JavaKitMacros/ImplementsJavaMacro.swift +++ b/Sources/JavaKitMacros/ImplementsJavaMacro.swift @@ -88,7 +88,8 @@ extension JavaImplementationMacro: PeerMacro { } // Map the arguments. - let swiftArguments: [ExprSyntax] = memberFunc.signature.parameterClause.parameters.map { param in + let swiftArguments: [ExprSyntax] = memberFunc.signature.parameterClause.parameters.map { + param in let label = if let argumentName = param.argumentName { "\(argumentName):" @@ -97,11 +98,14 @@ extension JavaImplementationMacro: PeerMacro { } // The "environment" is passed through directly. - if let environmentIndex, memberFunc.signature.parameterClause.parameters[environmentIndex] == param { + if let environmentIndex, + memberFunc.signature.parameterClause.parameters[environmentIndex] == param + { return "\(raw: label)\(param.secondName ?? param.firstName)" } - return "\(raw: label)\(param.type)(fromJNI: \(param.secondName ?? param.firstName), in: environment!)" + return + "\(raw: label)\(param.type)(fromJNI: \(param.secondName ?? param.firstName), in: environment!)" } // Map the return type, if there is one. diff --git a/Sources/JavaKitMacros/JavaClassMacro.swift b/Sources/JavaKitMacros/JavaClassMacro.swift index 2f0783f1..f982f478 100644 --- a/Sources/JavaKitMacros/JavaClassMacro.swift +++ b/Sources/JavaKitMacros/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 {} diff --git a/Sources/JavaKitMacros/JavaFieldMacro.swift b/Sources/JavaKitMacros/JavaFieldMacro.swift index d9c7929f..d2a3642f 100644 --- a/Sources/JavaKitMacros/JavaFieldMacro.swift +++ b/Sources/JavaKitMacros/JavaFieldMacro.swift @@ -26,7 +26,8 @@ extension JavaFieldMacro: AccessorMacro { ) throws -> [AccessorDeclSyntax] { guard let varDecl = declaration.as(VariableDeclSyntax.self), let binding = varDecl.bindings.first, - let fieldNameAsWritten = binding.pattern.as(IdentifierPatternSyntax.self)?.identifier.trimmed.text, + let fieldNameAsWritten = binding.pattern.as(IdentifierPatternSyntax.self)?.identifier.trimmed + .text, let fieldType = binding.typeAnnotation?.type.trimmed, binding.accessorBlock == nil else { diff --git a/Sources/JavaKitMacros/JavaMethodMacro.swift b/Sources/JavaKitMacros/JavaMethodMacro.swift index f525c985..f8eef355 100644 --- a/Sources/JavaKitMacros/JavaMethodMacro.swift +++ b/Sources/JavaKitMacros/JavaMethodMacro.swift @@ -81,7 +81,9 @@ extension JavaMethodMacro: BodyMacro { in context: some MacroExpansionContext ) throws -> [CodeBlockItemSyntax] { // Extract the "environment" parameter. - guard let environmentIndex = initDecl.signature.parameterClause.parameters.indexOfParameter(named: "environment") + guard + let environmentIndex = initDecl.signature.parameterClause.parameters.indexOfParameter( + named: "environment") else { throw MacroErrors.missingEnvironment } diff --git a/Sources/JavaKitNetwork/generated/URI.swift b/Sources/JavaKitNetwork/generated/URI.swift index 3135e466..7c389500 100644 --- a/Sources/JavaKitNetwork/generated/URI.swift +++ b/Sources/JavaKitNetwork/generated/URI.swift @@ -5,19 +5,26 @@ import JavaRuntime @JavaClass("java.net.URI") public struct URI { @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, _ arg4: String, environment: JNIEnvironment? = nil) throws + public init( + _ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, _ arg4: String, + environment: JNIEnvironment? = nil) throws @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, environment: JNIEnvironment? = nil) throws + public init( + _ arg0: String, _ arg1: String, _ arg2: String, _ arg3: String, + environment: JNIEnvironment? = nil) throws @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) throws + public init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) + throws @JavaMethod public init(_ arg0: String, environment: JNIEnvironment? = nil) throws @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: String, _ arg3: Int32, _ arg4: String, _ arg5: String, _ arg6: String, environment: JNIEnvironment? = nil) throws + public init( + _ arg0: String, _ arg1: String, _ arg2: String, _ arg3: Int32, _ arg4: String, _ arg5: String, + _ arg6: String, environment: JNIEnvironment? = nil) throws @JavaMethod public func equals(_ arg0: JavaObject?) -> Bool diff --git a/Sources/JavaKitNetwork/generated/URL.swift b/Sources/JavaKitNetwork/generated/URL.swift index 86c6c46a..8982c755 100644 --- a/Sources/JavaKitNetwork/generated/URL.swift +++ b/Sources/JavaKitNetwork/generated/URL.swift @@ -11,10 +11,13 @@ public struct URL { public init(_ arg0: String, environment: JNIEnvironment? = nil) throws @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: Int32, _ arg3: String, environment: JNIEnvironment? = nil) throws + public init( + _ arg0: String, _ arg1: String, _ arg2: Int32, _ arg3: String, + environment: JNIEnvironment? = nil) throws @JavaMethod - public init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) throws + public init(_ arg0: String, _ arg1: String, _ arg2: String, environment: JNIEnvironment? = nil) + throws @JavaMethod public func equals(_ arg0: JavaObject?) -> Bool diff --git a/Sources/JavaKitReflection/Field+Utilities.swift b/Sources/JavaKitReflection/Field+Utilities.swift index 1f803bac..11082ea6 100644 --- a/Sources/JavaKitReflection/Field+Utilities.swift +++ b/Sources/JavaKitReflection/Field+Utilities.swift @@ -13,8 +13,8 @@ //===----------------------------------------------------------------------===// 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 { + return (getModifiers() & 0x08) != 0 + } } diff --git a/Sources/JavaKitReflection/JavaClass+Reflection.swift b/Sources/JavaKitReflection/JavaClass+Reflection.swift index 65c93e15..2788515d 100644 --- a/Sources/JavaKitReflection/JavaClass+Reflection.swift +++ b/Sources/JavaKitReflection/JavaClass+Reflection.swift @@ -31,7 +31,7 @@ extension JavaClass { @JavaMethod public func getMethods() -> [Method?] - + @JavaMethod public func getFields() -> [Field?] diff --git a/Sources/JavaKitReflection/generated/Constructor.swift b/Sources/JavaKitReflection/generated/Constructor.swift index f3d1bb55..4a7ec8a8 100644 --- a/Sources/JavaKitReflection/generated/Constructor.swift +++ b/Sources/JavaKitReflection/generated/Constructor.swift @@ -130,5 +130,6 @@ extension JavaClass { public var DECLARED: Int32 @JavaStaticMethod - public func setAccessible(_ arg0: [AccessibleObject?], _ arg1: Bool) where ObjectType == Constructor + public func setAccessible(_ arg0: [AccessibleObject?], _ arg1: Bool) + where ObjectType == Constructor } diff --git a/Sources/JavaKitReflection/generated/Executable.swift b/Sources/JavaKitReflection/generated/Executable.swift index 4c337cbe..becdea12 100644 --- a/Sources/JavaKitReflection/generated/Executable.swift +++ b/Sources/JavaKitReflection/generated/Executable.swift @@ -3,7 +3,9 @@ import JavaKit import JavaKitCollection import JavaRuntime -@JavaClass("java.lang.reflect.Executable", extends: AccessibleObject.self, implements: GenericDeclaration.self) +@JavaClass( + "java.lang.reflect.Executable", extends: AccessibleObject.self, + implements: GenericDeclaration.self) public struct Executable { @JavaMethod public func getName() -> String diff --git a/Sources/JavaTypes/JavaType+JavaSource.swift b/Sources/JavaTypes/JavaType+JavaSource.swift index e1fa8129..8784307d 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): + case .class(let package, let name): if let package { "\(package).\(name)" } else { diff --git a/Sources/JavaTypes/JavaType+SwiftNames.swift b/Sources/JavaTypes/JavaType+SwiftNames.swift index 8577640e..d3ee2837 100644 --- a/Sources/JavaTypes/JavaType+SwiftNames.swift +++ b/Sources/JavaTypes/JavaType+SwiftNames.swift @@ -33,7 +33,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 diff --git a/Sources/JavaTypes/Mangling.swift b/Sources/JavaTypes/Mangling.swift index c4774dbb..d2e488a4 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);".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