diff --git a/build.gradle b/build.gradle index 51370d9..bd9ab47 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:8.3.2' - classpath "com.readdle.android.swift:gradle:6.0.3" + classpath "com.readdle.android.swift:gradle:6.2.1" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" classpath 'io.github.gradle-nexus:publish-plugin:1.1.0' @@ -34,5 +34,5 @@ apply from: "${rootDir}/publish-root.gradle" ext { PUBLISH_GROUP_ID = 'com.readdle.swift.java.codegen' - PUBLISH_VERSION = "0.9.6" + PUBLISH_VERSION = "0.9.7" } \ No newline at end of file diff --git a/compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java b/compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java index 5ff4553..bb6f650 100644 --- a/compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java +++ b/compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java @@ -122,6 +122,11 @@ private boolean processImpl(Set annotations, RoundEnviron Filer filer = processingEnv.getFiler(); note("JavaSwiftProcessor start code generation"); + if (moduleDescriptor == null) { + messager.printMessage(Diagnostic.Kind.ERROR, "No package description with SwiftModule.class", null); + return true; // Exit processing + } + try { generateJavaSwift(filer); } catch (IOException e) { @@ -143,11 +148,6 @@ private boolean processImpl(Set annotations, RoundEnviron Map swiftDelegates = new HashMap<>(); Map swiftBlocks = new HashMap<>(); - if (moduleDescriptor == null) { - messager.printMessage(Diagnostic.Kind.ERROR, "No package description with SwiftModule.class", null); - return true; // Exit processing - } - for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(SwiftValue.class)) { // Check if a class has been annotated with @SwiftValue if (annotatedElement.getKind() != ElementKind.CLASS && annotatedElement.getKind() != ElementKind.ENUM) { @@ -309,7 +309,7 @@ private void generateJavaSwift(Filer filer) throws IOException { swiftExtensionFile.getParentFile().mkdir(); note("JavaSwiftProcessor will generate sources at: " + swiftExtensionFile.getParent()); SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile); - swiftWriter.emitImports(new String[0]); + swiftWriter.emitImports(new String[0], moduleDescriptor.useSwiftJavaJniCore); swiftWriter.emitEmptyLine(); swiftWriter.emitStatement("public let SwiftErrorClass = JNI.GlobalFindClass(\"com/readdle/codegen/anotation/SwiftError\")"); swiftWriter.emitStatement("public let SwiftRuntimeErrorClass = JNI.GlobalFindClass(\"com/readdle/codegen/anotation/SwiftRuntimeError\")"); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java index 3e45bce..d95e60b 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java @@ -30,6 +30,7 @@ class SwiftBlockDescriptor { String simpleTypeName; private String swiftType; private String[] importPackages; + private boolean useSwiftJavaJniCore; private String blockSignature; @@ -44,6 +45,7 @@ class SwiftBlockDescriptor { SwiftBlockDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException { this.annotatedClassElement = classElement; this.importPackages = processor.moduleDescriptor.importPackages; + this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore; // Get the full QualifiedTypeName try { @@ -114,7 +116,7 @@ File generateCode() throws IOException { SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile); // Write imports - swiftWriter.emitImports(importPackages); + swiftWriter.emitImports(importPackages, useSwiftJavaJniCore); swiftWriter.emitEmptyLine(); swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName)); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftDelegateDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftDelegateDescriptor.java index d44f54d..999d646 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftDelegateDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftDelegateDescriptor.java @@ -33,6 +33,7 @@ class SwiftDelegateDescriptor { private String javaFullName; String simpleTypeName; private String[] importPackages; + private boolean useSwiftJavaJniCore; private String pointerBasicTypeSig; List functions = new LinkedList<>(); @@ -45,6 +46,7 @@ class SwiftDelegateDescriptor { this.annotatedClassElement = classElement; this.isInterface = classElement.getKind() == ElementKind.INTERFACE; this.importPackages = processor.moduleDescriptor.importPackages; + this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore; // Get the full QualifiedTypeName try { @@ -179,7 +181,7 @@ File generateCode() throws IOException { SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile); // Write imports - swiftWriter.emitImports(importPackages); + swiftWriter.emitImports(importPackages, useSwiftJavaJniCore); swiftWriter.emitEmptyLine(); swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName)); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java index b7f8492..40a8d8a 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java @@ -7,5 +7,6 @@ class SwiftModuleDescriptor { String moduleName; String[] importPackages; HashMap customTypeMappings; + boolean useSwiftJavaJniCore; } diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java index b9cc12c..98bdd9e 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java @@ -30,11 +30,13 @@ class SwiftReferenceDescriptor { private String javaFullName; private String simpleTypeName; private String[] importPackages; + private boolean useSwiftJavaJniCore; List functions = new LinkedList<>(); SwiftReferenceDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException { this.importPackages = processor.moduleDescriptor.importPackages; + this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore; // Get the full QualifiedTypeName try { @@ -136,7 +138,7 @@ File generateCode() throws IOException { SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile); // Write imports - swiftWriter.emitImports(importPackages); + swiftWriter.emitImports(importPackages, useSwiftJavaJniCore); swiftWriter.emitEmptyLine(); swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName)); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java b/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java index 5019177..24a5ed9 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java @@ -30,6 +30,7 @@ class SwiftValueDescriptor { private String javaFullName; private String simpleTypeName; private String[] importPackages; + private boolean useSwiftJavaJniCore; private boolean hasSubclasses = false; @@ -37,6 +38,7 @@ class SwiftValueDescriptor { SwiftValueDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException { this.importPackages = processor.moduleDescriptor.importPackages; + this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore; // Get the full QualifiedTypeName try { @@ -112,7 +114,7 @@ File generateCode() throws IOException { SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile); // Write imports - swiftWriter.emitImports(importPackages); + swiftWriter.emitImports(importPackages, useSwiftJavaJniCore); swiftWriter.emitEmptyLine(); swiftWriter.beginExtension(simpleTypeName); diff --git a/compiler/src/main/java/com/readdle/codegen/SwiftWriter.java b/compiler/src/main/java/com/readdle/codegen/SwiftWriter.java index 6514a8e..0d10a40 100644 --- a/compiler/src/main/java/com/readdle/codegen/SwiftWriter.java +++ b/compiler/src/main/java/com/readdle/codegen/SwiftWriter.java @@ -69,14 +69,22 @@ public void close() throws IOException { this.writer.close(); } - private static final String[] defaultImports = {"Foundation", "Java", "java_swift", "JavaCoder", "AnyCodable"}; + // Readdle stack dependencies + private static final String[] legacyDefaultImports = {"Foundation", "Java", "java_swift", "JavaCoder", "AnyCodable"}; - public void emitImports(String[] importPackages) throws IOException { + // swiftlang jni-core based stack: JavaCoder + java_swift compatibility shim. + private static final String[] jniCoreDefaultImports = {"Foundation", "java_swift", "JavaCoder", "AnyCodable"}; + + static String[] defaultImports(boolean useSwiftJavaJniCore) { + return useSwiftJavaJniCore ? jniCoreDefaultImports : legacyDefaultImports; + } + + public void emitImports(String[] importPackages, boolean useSwiftJavaJniCore) throws IOException { this.writer.append("/* This file was generated with Readdle SwiftJava Codegen */\n"); this.writer.append("/* Don't change it manually! */\n"); List allPackages = new ArrayList<>(); - allPackages.addAll(Arrays.asList(defaultImports)); + allPackages.addAll(Arrays.asList(defaultImports(useSwiftJavaJniCore))); allPackages.addAll(Arrays.asList(importPackages)); Collections.sort(allPackages, Collator.getInstance(Locale.US)); diff --git a/publish-module.gradle b/publish-module.gradle index 3600713..ac1b598 100644 --- a/publish-module.gradle +++ b/publish-module.gradle @@ -46,6 +46,11 @@ ext["signing.keyId"] = rootProject.ext["signing.keyId"] ext["signing.password"] = rootProject.ext["signing.password"] ext["signing.secretKeyRingFile"] = rootProject.ext["signing.secretKeyRingFile"] -signing { - sign publishing.publications +// Only configure signing when a signing key is available (CI/remote release). +// This lets `publishToMavenLocal` work locally without GPG keys configured. +def signingKeyId = (rootProject.ext["signing.keyId"] ?: "").toString().trim() +if (!signingKeyId.isEmpty()) { + signing { + sign publishing.publications + } } \ No newline at end of file