Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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"
}
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,11 @@ private boolean processImpl(Set<? extends TypeElement> 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) {
Expand All @@ -143,11 +148,6 @@ private boolean processImpl(Set<? extends TypeElement> annotations, RoundEnviron
Map<String, SwiftDelegateDescriptor> swiftDelegates = new HashMap<>();
Map<String, SwiftBlockDescriptor> 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) {
Expand Down Expand Up @@ -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);
Comment thread
cursor[bot] marked this conversation as resolved.
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\")");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class SwiftBlockDescriptor {
String simpleTypeName;
private String swiftType;
private String[] importPackages;
private boolean useSwiftJavaJniCore;

private String blockSignature;

Expand All @@ -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 {
Expand Down Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class SwiftDelegateDescriptor {
private String javaFullName;
String simpleTypeName;
private String[] importPackages;
private boolean useSwiftJavaJniCore;
private String pointerBasicTypeSig;

List<SwiftFuncDescriptor> functions = new LinkedList<>();
Expand All @@ -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 {
Expand Down Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ class SwiftModuleDescriptor {
String moduleName;
String[] importPackages;
HashMap<String, String> customTypeMappings;
boolean useSwiftJavaJniCore;

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ class SwiftReferenceDescriptor {
private String javaFullName;
private String simpleTypeName;
private String[] importPackages;
private boolean useSwiftJavaJniCore;

List<JavaSwiftProcessor.WritableElement> 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 {
Expand Down Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ class SwiftValueDescriptor {
private String javaFullName;
private String simpleTypeName;
private String[] importPackages;
private boolean useSwiftJavaJniCore;

private boolean hasSubclasses = false;

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

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

// Get the full QualifiedTypeName
try {
Expand Down Expand Up @@ -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);
Expand Down
14 changes: 11 additions & 3 deletions compiler/src/main/java/com/readdle/codegen/SwiftWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> 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));

Expand Down
9 changes: 7 additions & 2 deletions publish-module.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Loading