Skip to content

Commit 8cb4ee5

Browse files
author
Anton Pogonets
committed
Dev: separate java and swift method names in CallbackFuncDescriptor
1 parent c3bcea4 commit 8cb4ee5

1 file changed

Lines changed: 32 additions & 27 deletions

File tree

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
}

0 commit comments

Comments
 (0)