From 64d5e7578ae3e4ca3655b519e7acef5303f27dd9 Mon Sep 17 00:00:00 2001 From: Anton Pogonets Date: Fri, 30 Aug 2019 05:09:48 +0300 Subject: [PATCH 1/2] Dev: migrate to new swift plugin --- build.gradle | 11 ++++++++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- sample/build.gradle | 10 +++++++--- sample/src/main/swift/Package.swift | 25 ++++++++++-------------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index ecc9a26..9759018 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,19 @@ buildscript { + ext.kotlin_version = '1.3.50' + repositories { google() jcenter() + mavenLocal() maven { url "https://dl.bintray.com/readdle/maven" } } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' - classpath 'com.readdle.android.swift:gradle:1.1.10' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' + classpath "com.android.tools.build:gradle:3.5.0" + classpath "com.readdle.android.swift:gradle:1.3.0" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7edd9de..7bc7905 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Apr 29 18:40:15 EEST 2018 +#Thu Aug 29 12:50:13 EEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/sample/build.gradle b/sample/build.gradle index 5a7a56c..75b3365 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,9 +1,13 @@ apply plugin: 'com.android.application' apply plugin: 'com.readdle.android.swift' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + swift { cleanEnabled true debug { + abiFilters("arm64-v8a", "x86_64") extraBuildFlags("-Xswiftc", "-DDEBUG") } } @@ -30,10 +34,10 @@ dependencies { annotationProcessor project(':compiler') implementation project(':library') - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.0' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support:support-annotations:27.1.1' + androidTestImplementation 'com.android.support:support-annotations:28.0.0' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/sample/src/main/swift/Package.swift b/sample/src/main/swift/Package.swift index f4649d0..c645191 100755 --- a/sample/src/main/swift/Package.swift +++ b/sample/src/main/swift/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:4.0 +// swift-tools-version:5.0 import Foundation import PackageDescription @@ -9,15 +9,11 @@ let generatedName = "Generated" let generatedPath = ".build/\(generatedName.lowercased())" let isSourcesGenerated: Bool = { - let basePath = URL(fileURLWithPath: #file) - .deletingLastPathComponent() - .path - - let fileManager = FileManager() - fileManager.changeCurrentDirectoryPath(basePath) + let baseURL = URL(fileURLWithPath: #file).deletingLastPathComponent() + let generatedURL = baseURL.appendingPathComponent(generatedPath) var isDirectory: ObjCBool = false - let exists = fileManager.fileExists(atPath: generatedPath, isDirectory: &isDirectory) + let exists = FileManager.default.fileExists(atPath: generatedURL.path, isDirectory: &isDirectory) return exists && isDirectory.boolValue }() @@ -41,7 +37,7 @@ func addGenerated(_ targets: [Target]) -> [Target] { .target( name: generatedName, dependencies: [ - .byNameItem(name: packageName), + .byName(name: packageName), "java_swift", "Java", "JavaCoder", @@ -57,13 +53,12 @@ let package = Package( products: addGenerated([ ]), dependencies: [ - .package(url: "https://github.com/readdle/java_swift.git", .exact("2.1.3")), - .package(url: "https://github.com/readdle/swift-java.git", .exact("0.1.5")), - .package(url: "https://github.com/readdle/swift-java-coder.git", .exact("1.0.5")), - .package(url: "https://github.com/readdle/swift-anycodable.git", .exact("1.0.0")), + .package(url: "https://github.com/readdle/java_swift.git", .exact("2.1.7")), + .package(url: "https://github.com/readdle/swift-java.git", .exact("0.2.0")), + .package(url: "https://github.com/readdle/swift-java-coder.git", .exact("1.0.13")), + .package(url: "https://github.com/readdle/swift-anycodable.git", .exact("1.0.2")), ], targets: addGenerated([ .target(name: packageName, dependencies: ["AnyCodable"]) - ]), - swiftLanguageVersions: [4] + ]) ) From 940fe7be9b39b078c9e1a6880a55093fda44af10 Mon Sep 17 00:00:00 2001 From: Anton Pogonets Date: Fri, 30 Aug 2019 05:44:06 +0300 Subject: [PATCH 2/2] Dev: fix warnings in generated code --- .../readdle/codegen/SwiftFuncDescriptor.java | 16 +++++-------- .../codegen/SwiftGetterDescriptor.java | 10 ++++---- .../codegen/SwiftReferenceDescriptor.java | 24 ++++++++++++------- .../codegen/SwiftSetterDescriptor.java | 6 ++--- .../readdle/codegen/SwiftValueDescriptor.java | 6 ++--- 5 files changed, 30 insertions(+), 32 deletions(-) diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftFuncDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftFuncDescriptor.java index 602ad63..7c9654c 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftFuncDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftFuncDescriptor.java @@ -5,7 +5,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; import javax.lang.model.element.ExecutableElement; @@ -129,9 +128,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw if (shouldCatchPreamble) { swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)"); swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : "")); swiftWriter.emitStatement("}"); @@ -177,9 +175,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw } swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)"); swiftWriter.emitStatement("return nil"); swiftWriter.emitStatement("}"); @@ -188,9 +185,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw if (isThrown) { swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)"); swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : "")); swiftWriter.emitStatement("}"); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java index dc0e968..e34d489 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java @@ -61,9 +61,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw swiftWriter.emitStatement(String.format("swiftSelf = try %s.from(javaObject: this)", swiftType)); swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)"); swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : "")); swiftWriter.emitStatement("}"); @@ -81,9 +80,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw } swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)"); swiftWriter.emitStatement("return nil"); swiftWriter.emitStatement("}"); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java index 4b0d389..897e2d6 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java @@ -4,16 +4,22 @@ import com.readdle.codegen.anotation.SwiftReference; import com.readdle.codegen.anotation.SwiftSetter; -import javax.annotation.processing.Filer; -import javax.lang.model.element.*; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.type.MirroredTypeException; -import javax.tools.StandardLocation; import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; +import javax.annotation.processing.Filer; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.MirroredTypeException; +import javax.tools.StandardLocation; + import static com.readdle.codegen.JavaSwiftProcessor.FOLDER; class SwiftReferenceDescriptor { @@ -143,7 +149,7 @@ File generateCode() throws IOException { swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Get swift object from pointer"); - swiftWriter.emitStatement(String.format("public static func from(javaObject: jobject) throws -> %s {", simpleTypeName)); + swiftWriter.emitStatement(String.format("static func from(javaObject: jobject) throws -> %s {", simpleTypeName)); swiftWriter.emitStatement("let longPointer = JNI.api.GetLongField(JNI.env, javaObject, javaSwiftPointerFiled)"); swiftWriter.emitStatement("guard longPointer != 0, let pointer = UnsafeRawPointer(bitPattern: Int(longPointer)) else {\nthrow NSError(domain: \"java.lang.NullPointerException\", code: 1)\n}"); swiftWriter.emitStatement(String.format("return Unmanaged<%s>.fromOpaque(pointer).takeUnretainedValue()", simpleTypeName)); @@ -151,7 +157,7 @@ File generateCode() throws IOException { swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Create java object with native pointer"); - swiftWriter.emitStatement("public func javaObject() throws -> jobject {"); + swiftWriter.emitStatement("func javaObject() throws -> jobject {"); swiftWriter.emitStatement("let nativePointer = jlong(Int(bitPattern: Unmanaged.passRetained(self).toOpaque()))"); swiftWriter.emitStatement("guard let result = JNI.NewObject(javaClass, methodID: javaConstructor) else {\nthrow NSError(domain: \"CantCreateObject\", code: 1)\n}"); swiftWriter.emitStatement("JNI.api.SetLongField(JNI.env, result, javaSwiftPointerFiled, nativePointer)"); @@ -160,13 +166,13 @@ File generateCode() throws IOException { swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Unbalance release"); - swiftWriter.emitStatement("public func release() {"); + swiftWriter.emitStatement("func release() {"); swiftWriter.emitStatement("Unmanaged.passUnretained(self).release()"); swiftWriter.emitStatement("}"); swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Unbalanced retain"); - swiftWriter.emitStatement("public func retain() {"); + swiftWriter.emitStatement("func retain() {"); swiftWriter.emitStatement("_ = Unmanaged.passUnretained(self).retain()"); swiftWriter.emitStatement("}"); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftSetterDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftSetterDescriptor.java index 945ce87..de32c6d 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftSetterDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftSetterDescriptor.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.util.Collections; -import java.util.HashMap; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.Modifier; @@ -81,9 +80,8 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw swiftWriter.emitStatement("}"); swiftWriter.emitStatement("catch {"); - swiftWriter.emitStatement("let errorString: String"); - swiftWriter.emitStatement("if let nsError = error as? NSError { errorString = \"\\(nsError.domain): \\(nsError.code)\" }"); - swiftWriter.emitStatement("else { errorString = String(reflecting: type(of: error)) + \": \" + String(describing: error) }"); + swiftWriter.emitStatement("let nsError = error as NSError"); + swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\""); swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)"); swiftWriter.emitStatement("return"); swiftWriter.emitStatement("}"); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java index aeadfbe..3cbbdb4 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java @@ -127,7 +127,7 @@ File generateCode() throws IOException { if (hasSubclasses) { swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Decoding SwiftValue type with JavaCoder"); - swiftWriter.emitStatement(String.format("public static func from(javaObject: jobject) throws -> T {", simpleTypeName)); + swiftWriter.emitStatement(String.format("static func from(javaObject: jobject) throws -> T {", simpleTypeName)); swiftWriter.emitStatement(String.format("let any = try JavaDecoder(forPackage: \"%s\", missingFieldsStrategy: .ignore).decode(AnyCodable.self, from: javaObject)", javaPackage.replace(".", "/"))); swiftWriter.emitStatement("return any.value as! T"); swiftWriter.emitStatement("}"); @@ -135,14 +135,14 @@ File generateCode() throws IOException { else { swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Decoding SwiftValue type with JavaCoder"); - swiftWriter.emitStatement(String.format("public static func from(javaObject: jobject) throws -> %s {", simpleTypeName)); + swiftWriter.emitStatement(String.format("static func from(javaObject: jobject) throws -> %s {", simpleTypeName)); swiftWriter.emitStatement(String.format("return try JavaDecoder(forPackage: \"%s\", missingFieldsStrategy: .ignore).decode(%s.self, from: javaObject)", javaPackage.replace(".", "/"), simpleTypeName)); swiftWriter.emitStatement("}"); } swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("// Encoding SwiftValue type with JavaCoder"); - swiftWriter.emitStatement("public func javaObject() throws -> jobject {"); + swiftWriter.emitStatement("func javaObject() throws -> jobject {"); swiftWriter.emitStatement(String.format("return try JavaEncoder(forPackage: \"%s\", missingFieldsStrategy: .ignore).encode(self)", javaPackage.replace(".", "/"))); swiftWriter.emitStatement("}");