Skip to content

Commit 489d7ef

Browse files
committed
Dev: add useSwiftJavaJniCore option to control generated imports
1 parent 6e670fb commit 489d7ef

9 files changed

Lines changed: 39 additions & 17 deletions

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ buildscript {
1111

1212
dependencies {
1313
classpath 'com.android.tools.build:gradle:8.3.2'
14-
classpath "com.readdle.android.swift:gradle:6.0.3"
14+
classpath "com.readdle.android.swift:gradle:6.2.1"
1515
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1616
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
1717
classpath 'io.github.gradle-nexus:publish-plugin:1.1.0'
@@ -34,5 +34,5 @@ apply from: "${rootDir}/publish-root.gradle"
3434

3535
ext {
3636
PUBLISH_GROUP_ID = 'com.readdle.swift.java.codegen'
37-
PUBLISH_VERSION = "0.9.6"
37+
PUBLISH_VERSION = "0.9.7"
3838
}

compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ private boolean processImpl(Set<? extends TypeElement> annotations, RoundEnviron
122122
Filer filer = processingEnv.getFiler();
123123
note("JavaSwiftProcessor start code generation");
124124

125+
if (moduleDescriptor == null) {
126+
messager.printMessage(Diagnostic.Kind.ERROR, "No package description with SwiftModule.class", null);
127+
return true; // Exit processing
128+
}
129+
125130
try {
126131
generateJavaSwift(filer);
127132
} catch (IOException e) {
@@ -143,11 +148,6 @@ private boolean processImpl(Set<? extends TypeElement> annotations, RoundEnviron
143148
Map<String, SwiftDelegateDescriptor> swiftDelegates = new HashMap<>();
144149
Map<String, SwiftBlockDescriptor> swiftBlocks = new HashMap<>();
145150

146-
if (moduleDescriptor == null) {
147-
messager.printMessage(Diagnostic.Kind.ERROR, "No package description with SwiftModule.class", null);
148-
return true; // Exit processing
149-
}
150-
151151
for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(SwiftValue.class)) {
152152
// Check if a class has been annotated with @SwiftValue
153153
if (annotatedElement.getKind() != ElementKind.CLASS && annotatedElement.getKind() != ElementKind.ENUM) {
@@ -309,7 +309,7 @@ private void generateJavaSwift(Filer filer) throws IOException {
309309
swiftExtensionFile.getParentFile().mkdir();
310310
note("JavaSwiftProcessor will generate sources at: " + swiftExtensionFile.getParent());
311311
SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile);
312-
swiftWriter.emitImports(new String[0]);
312+
swiftWriter.emitImports(new String[0], moduleDescriptor.useSwiftJavaJniCore);
313313
swiftWriter.emitEmptyLine();
314314
swiftWriter.emitStatement("public let SwiftErrorClass = JNI.GlobalFindClass(\"com/readdle/codegen/anotation/SwiftError\")");
315315
swiftWriter.emitStatement("public let SwiftRuntimeErrorClass = JNI.GlobalFindClass(\"com/readdle/codegen/anotation/SwiftRuntimeError\")");

compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class SwiftBlockDescriptor {
3030
String simpleTypeName;
3131
private String swiftType;
3232
private String[] importPackages;
33+
private boolean useSwiftJavaJniCore;
3334

3435
private String blockSignature;
3536

@@ -44,6 +45,7 @@ class SwiftBlockDescriptor {
4445
SwiftBlockDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException {
4546
this.annotatedClassElement = classElement;
4647
this.importPackages = processor.moduleDescriptor.importPackages;
48+
this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore;
4749

4850
// Get the full QualifiedTypeName
4951
try {
@@ -114,7 +116,7 @@ File generateCode() throws IOException {
114116
SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile);
115117

116118
// Write imports
117-
swiftWriter.emitImports(importPackages);
119+
swiftWriter.emitImports(importPackages, useSwiftJavaJniCore);
118120
swiftWriter.emitEmptyLine();
119121

120122
swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName));

compiler/src/main/java/com/readdle/codegen/SwiftDelegateDescriptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class SwiftDelegateDescriptor {
3333
private String javaFullName;
3434
String simpleTypeName;
3535
private String[] importPackages;
36+
private boolean useSwiftJavaJniCore;
3637
private String pointerBasicTypeSig;
3738

3839
List<SwiftFuncDescriptor> functions = new LinkedList<>();
@@ -45,6 +46,7 @@ class SwiftDelegateDescriptor {
4546
this.annotatedClassElement = classElement;
4647
this.isInterface = classElement.getKind() == ElementKind.INTERFACE;
4748
this.importPackages = processor.moduleDescriptor.importPackages;
49+
this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore;
4850

4951
// Get the full QualifiedTypeName
5052
try {
@@ -179,7 +181,7 @@ File generateCode() throws IOException {
179181
SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile);
180182

181183
// Write imports
182-
swiftWriter.emitImports(importPackages);
184+
swiftWriter.emitImports(importPackages, useSwiftJavaJniCore);
183185
swiftWriter.emitEmptyLine();
184186

185187
swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName));

compiler/src/main/java/com/readdle/codegen/SwiftModuleDescriptor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ class SwiftModuleDescriptor {
77
String moduleName;
88
String[] importPackages;
99
HashMap<String, String> customTypeMappings;
10+
boolean useSwiftJavaJniCore;
1011

1112
}

compiler/src/main/java/com/readdle/codegen/SwiftReferenceDescriptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ class SwiftReferenceDescriptor {
3030
private String javaFullName;
3131
private String simpleTypeName;
3232
private String[] importPackages;
33+
private boolean useSwiftJavaJniCore;
3334

3435
List<JavaSwiftProcessor.WritableElement> functions = new LinkedList<>();
3536

3637
SwiftReferenceDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException {
3738
this.importPackages = processor.moduleDescriptor.importPackages;
39+
this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore;
3840

3941
// Get the full QualifiedTypeName
4042
try {
@@ -136,7 +138,7 @@ File generateCode() throws IOException {
136138
SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile);
137139

138140
// Write imports
139-
swiftWriter.emitImports(importPackages);
141+
swiftWriter.emitImports(importPackages, useSwiftJavaJniCore);
140142
swiftWriter.emitEmptyLine();
141143

142144
swiftWriter.emitStatement(String.format("private let javaClass = JNI.GlobalFindClass(\"%s\")!", javaFullName));

compiler/src/main/java/com/readdle/codegen/SwiftValueDescriptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ class SwiftValueDescriptor {
3030
private String javaFullName;
3131
private String simpleTypeName;
3232
private String[] importPackages;
33+
private boolean useSwiftJavaJniCore;
3334

3435
private boolean hasSubclasses = false;
3536

3637
private List<JavaSwiftProcessor.WritableElement> functions = new LinkedList<>();
3738

3839
SwiftValueDescriptor(TypeElement classElement, Filer filer, JavaSwiftProcessor processor) throws IllegalArgumentException {
3940
this.importPackages = processor.moduleDescriptor.importPackages;
41+
this.useSwiftJavaJniCore = processor.moduleDescriptor.useSwiftJavaJniCore;
4042

4143
// Get the full QualifiedTypeName
4244
try {
@@ -112,7 +114,7 @@ File generateCode() throws IOException {
112114
SwiftWriter swiftWriter = new SwiftWriter(swiftExtensionFile);
113115

114116
// Write imports
115-
swiftWriter.emitImports(importPackages);
117+
swiftWriter.emitImports(importPackages, useSwiftJavaJniCore);
116118

117119
swiftWriter.emitEmptyLine();
118120
swiftWriter.beginExtension(simpleTypeName);

compiler/src/main/java/com/readdle/codegen/SwiftWriter.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,22 @@ public void close() throws IOException {
6969
this.writer.close();
7070
}
7171

72-
private static final String[] defaultImports = {"Foundation", "Java", "java_swift", "JavaCoder", "AnyCodable"};
72+
// Readdle stack dependencies
73+
private static final String[] legacyDefaultImports = {"Foundation", "Java", "java_swift", "JavaCoder", "AnyCodable"};
7374

74-
public void emitImports(String[] importPackages) throws IOException {
75+
// swiftlang jni-core based stack: JavaCoder + java_swift compatibility shim.
76+
private static final String[] jniCoreDefaultImports = {"Foundation", "java_swift", "JavaCoder", "AnyCodable"};
77+
78+
static String[] defaultImports(boolean useSwiftJavaJniCore) {
79+
return useSwiftJavaJniCore ? jniCoreDefaultImports : legacyDefaultImports;
80+
}
81+
82+
public void emitImports(String[] importPackages, boolean useSwiftJavaJniCore) throws IOException {
7583
this.writer.append("/* This file was generated with Readdle SwiftJava Codegen */\n");
7684
this.writer.append("/* Don't change it manually! */\n");
7785

7886
List<String> allPackages = new ArrayList<>();
79-
allPackages.addAll(Arrays.asList(defaultImports));
87+
allPackages.addAll(Arrays.asList(defaultImports(useSwiftJavaJniCore)));
8088
allPackages.addAll(Arrays.asList(importPackages));
8189
Collections.sort(allPackages, Collator.getInstance(Locale.US));
8290

publish-module.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ ext["signing.keyId"] = rootProject.ext["signing.keyId"]
4646
ext["signing.password"] = rootProject.ext["signing.password"]
4747
ext["signing.secretKeyRingFile"] = rootProject.ext["signing.secretKeyRingFile"]
4848

49-
signing {
50-
sign publishing.publications
49+
// Only configure signing when a signing key is available (CI/remote release).
50+
// This lets `publishToMavenLocal` work locally without GPG keys configured.
51+
def signingKeyId = (rootProject.ext["signing.keyId"] ?: "").toString().trim()
52+
if (!signingKeyId.isEmpty()) {
53+
signing {
54+
sign publishing.publications
55+
}
5156
}

0 commit comments

Comments
 (0)