Skip to content

Commit d8e7ef2

Browse files
authored
Merge pull request #12 from zayass/feature/java-renamed-methods
Fix incorrect runtime call to SwiftCallbackFunc
2 parents c3bcea4 + 3eba146 commit d8e7ef2

File tree

4 files changed

+38
-34
lines changed

4 files changed

+38
-34
lines changed

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

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,64 +13,70 @@
1313

1414
public class SwiftCallbackFuncDescriptor {
1515

16-
private String name;
16+
private String javaMethodName;
17+
private String swiftMethodName;
1718

1819
private boolean isStatic;
1920
private boolean isThrown;
2021

2122
private SwiftEnvironment.Type returnSwiftType;
2223
private boolean isReturnTypeOptional;
2324

24-
private String description;
25-
2625
private String sig;
2726

2827
private List<SwiftParamDescriptor> params = new LinkedList<>();
2928
private List<String> paramNames = new LinkedList<>();
3029

3130
SwiftCallbackFuncDescriptor(ExecutableElement executableElement) {
32-
this.name = executableElement.getSimpleName().toString();
31+
String elementName = executableElement.getSimpleName().toString();
32+
this.javaMethodName = elementName;
33+
this.swiftMethodName = elementName;
34+
3335
this.isStatic = executableElement.getModifiers().contains(Modifier.STATIC);
3436
this.isThrown = executableElement.getThrownTypes() != null && executableElement.getThrownTypes().size() > 0;
3537
this.returnSwiftType = SwiftEnvironment.parseJavaType(executableElement.getReturnType().toString());
3638
this.isReturnTypeOptional = JavaSwiftProcessor.isNullable(executableElement);
3739

38-
this.sig = "(";
40+
StringBuilder signatureBuilder = new StringBuilder("(");
3941

4042
for (VariableElement variableElement : executableElement.getParameters()) {
4143
params.add(new SwiftParamDescriptor(variableElement));
42-
sig += javaClassToSig(variableElement.asType().toString());
44+
String javaClass = variableElement.asType().toString();
45+
signatureBuilder.append(javaClassToSig(javaClass));
4346
}
4447

45-
sig += ")";
48+
signatureBuilder.append(")");
4649

4750
if (returnSwiftType != null) {
48-
sig += javaClassToSig(executableElement.getReturnType().toString());
51+
String javaClass = executableElement.getReturnType().toString();
52+
signatureBuilder.append(javaClassToSig(javaClass));
4953
}
5054
else {
51-
sig += "V";
55+
signatureBuilder.append("V");
5256
}
5357

58+
this.sig = signatureBuilder.toString();
59+
5460
SwiftCallbackFunc swiftFunc = executableElement.getAnnotation(SwiftCallbackFunc.class);
5561

5662
if (swiftFunc != null && !swiftFunc.value().isEmpty()) {
5763
String funcFullName = swiftFunc.value();
5864
int paramStart = funcFullName.indexOf("(");
5965
int paramEnd = funcFullName.indexOf(")");
60-
if (paramStart > 0 && paramEnd > 0 && paramEnd > paramStart) {
61-
this.name = funcFullName.substring(0, paramStart);
62-
String arguments = funcFullName.substring(paramStart + 1, paramEnd);
63-
String[] paramNames = arguments.split(":");
64-
if (paramNames.length == params.size()) {
65-
this.paramNames = Arrays.asList(paramNames);
66-
}
67-
else {
68-
throw new IllegalArgumentException("Wrong count of arguments in func name");
69-
}
70-
}
71-
else {
66+
67+
if (paramStart <= 0 || paramEnd <= 0 || paramEnd <= paramStart) {
7268
throw new IllegalArgumentException("Wrong func name");
7369
}
70+
71+
this.swiftMethodName = funcFullName.substring(0, paramStart);
72+
String arguments = funcFullName.substring(paramStart + 1, paramEnd);
73+
String[] paramNames = arguments.split(":");
74+
75+
if (paramNames.length != params.size()) {
76+
throw new IllegalArgumentException("Wrong count of arguments in func name");
77+
}
78+
79+
this.paramNames = Arrays.asList(paramNames);
7480
}
7581
else {
7682
for (int i = 0; i < params.size(); i++) {
@@ -80,16 +86,15 @@ public class SwiftCallbackFuncDescriptor {
8086
}
8187

8288
void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType) throws IOException {
83-
8489
swiftWriter.emitEmptyLine();
8590
swiftWriter.emitStatement(String.format("static let javaMethod%1$s = try! JNI.%4$s(forClass:\"%2$s\", method: \"%1$s\", sig: \"%3$s\")",
86-
name,
91+
javaMethodName,
8792
javaFullName,
8893
sig,
8994
isStatic ? "getStaticJavaMethod" : "getJavaMethod"));
9095

9196
swiftWriter.emitEmptyLine();
92-
swiftWriter.emit(String.format("public %s func %s(", isStatic ? "static" : "", name));
97+
swiftWriter.emit(String.format("public %s func %s(", isStatic ? "static" : "", swiftMethodName));
9398
for (int i = 0; i < params.size(); i++) {
9499
SwiftParamDescriptor param = params.get(i);
95100
String paramType = param.swiftType.swiftType + (param.isOptional ? "?" : "");
@@ -166,7 +171,7 @@ else if (isReturnTypeOptional) {
166171
}
167172
}
168173

169-
swiftWriter.emit(String.format(jniMethodTemplate, swiftType, name));
174+
swiftWriter.emit(String.format(jniMethodTemplate, swiftType, javaMethodName));
170175

171176
for (SwiftParamDescriptor param : params) {
172177
swiftWriter.emitStatement(String.format(", java%s", param.name));
@@ -238,12 +243,12 @@ private String javaClassToSig(String javaClass) {
238243
@Override
239244
public String toString() {
240245
return "SwiftFuncDescriptor{" +
241-
"name='" + name + '\'' +
246+
"javaMethodName='" + javaMethodName + '\'' +
247+
", swiftMethodName='" + swiftMethodName + '\'' +
242248
", isStatic=" + isStatic +
243249
", isThrown=" + isThrown +
244250
", returnSwiftType='" + returnSwiftType + '\'' +
245251
", isReturnTypeOptional=" + isReturnTypeOptional +
246-
", description='" + description + '\'' +
247252
", params=" + params +
248253
'}';
249254
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.io.IOException;
66
import java.util.ArrayList;
77
import java.util.Collections;
8-
import java.util.LinkedList;
98
import java.util.List;
109

1110
import javax.lang.model.element.ExecutableElement;
@@ -117,7 +116,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
117116
swiftWriter.emitStatement("}");
118117
swiftWriter.emitStatement("catch {");
119118
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
120-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
119+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
121120
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
122121
swiftWriter.emitStatement("}");
123122

@@ -153,7 +152,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
153152
swiftWriter.emitStatement("}");
154153
swiftWriter.emitStatement("catch {");
155154
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
156-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
155+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
157156
swiftWriter.emitStatement("return nil");
158157
swiftWriter.emitStatement("}");
159158
}
@@ -162,7 +161,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
162161
swiftWriter.emitStatement("}");
163162
swiftWriter.emitStatement("catch {");
164163
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
165-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
164+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftErrorClass, errorString)");
166165
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
167166
swiftWriter.emitStatement("}");
168167
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
6464
swiftWriter.emitStatement("}");
6565
swiftWriter.emitStatement("catch {");
6666
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
67-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
67+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
6868
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
6969
swiftWriter.emitStatement("}");
7070
}
@@ -82,7 +82,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
8282
swiftWriter.emitStatement("}");
8383
swiftWriter.emitStatement("catch {");
8484
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
85-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
85+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
8686
swiftWriter.emitStatement("return nil");
8787
swiftWriter.emitStatement("}");
8888
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
8282
swiftWriter.emitStatement("}");
8383
swiftWriter.emitStatement("catch {");
8484
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
85-
swiftWriter.emitStatement("JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
85+
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
8686
swiftWriter.emitStatement("return");
8787
swiftWriter.emitStatement("}");
8888

0 commit comments

Comments
 (0)