13
13
14
14
public class SwiftCallbackFuncDescriptor {
15
15
16
- private String name ;
16
+ private String javaMethodName ;
17
+ private String swiftMethodName ;
17
18
18
19
private boolean isStatic ;
19
20
private boolean isThrown ;
20
21
21
22
private SwiftEnvironment .Type returnSwiftType ;
22
23
private boolean isReturnTypeOptional ;
23
24
24
- private String description ;
25
-
26
25
private String sig ;
27
26
28
27
private List <SwiftParamDescriptor > params = new LinkedList <>();
29
28
private List <String > paramNames = new LinkedList <>();
30
29
31
30
SwiftCallbackFuncDescriptor (ExecutableElement executableElement ) {
32
- this .name = executableElement .getSimpleName ().toString ();
31
+ String elementName = executableElement .getSimpleName ().toString ();
32
+ this .javaMethodName = elementName ;
33
+ this .swiftMethodName = elementName ;
34
+
33
35
this .isStatic = executableElement .getModifiers ().contains (Modifier .STATIC );
34
36
this .isThrown = executableElement .getThrownTypes () != null && executableElement .getThrownTypes ().size () > 0 ;
35
37
this .returnSwiftType = SwiftEnvironment .parseJavaType (executableElement .getReturnType ().toString ());
36
38
this .isReturnTypeOptional = JavaSwiftProcessor .isNullable (executableElement );
37
39
38
- this . sig = "(" ;
40
+ StringBuilder signatureBuilder = new StringBuilder ( "(" ) ;
39
41
40
42
for (VariableElement variableElement : executableElement .getParameters ()) {
41
43
params .add (new SwiftParamDescriptor (variableElement ));
42
- sig += javaClassToSig (variableElement .asType ().toString ());
44
+ String javaClass = variableElement .asType ().toString ();
45
+ signatureBuilder .append (javaClassToSig (javaClass ));
43
46
}
44
47
45
- sig += ")" ;
48
+ signatureBuilder . append ( ")" ) ;
46
49
47
50
if (returnSwiftType != null ) {
48
- sig += javaClassToSig (executableElement .getReturnType ().toString ());
51
+ String javaClass = executableElement .getReturnType ().toString ();
52
+ signatureBuilder .append (javaClassToSig (javaClass ));
49
53
}
50
54
else {
51
- sig += "V" ;
55
+ signatureBuilder . append ( "V" ) ;
52
56
}
53
57
58
+ this .sig = signatureBuilder .toString ();
59
+
54
60
SwiftCallbackFunc swiftFunc = executableElement .getAnnotation (SwiftCallbackFunc .class );
55
61
56
62
if (swiftFunc != null && !swiftFunc .value ().isEmpty ()) {
57
63
String funcFullName = swiftFunc .value ();
58
64
int paramStart = funcFullName .indexOf ("(" );
59
65
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 ) {
72
68
throw new IllegalArgumentException ("Wrong func name" );
73
69
}
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 );
74
80
}
75
81
else {
76
82
for (int i = 0 ; i < params .size (); i ++) {
@@ -80,16 +86,15 @@ public class SwiftCallbackFuncDescriptor {
80
86
}
81
87
82
88
void generateCode (SwiftWriter swiftWriter , String javaFullName , String swiftType ) throws IOException {
83
-
84
89
swiftWriter .emitEmptyLine ();
85
90
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 ,
87
92
javaFullName ,
88
93
sig ,
89
94
isStatic ? "getStaticJavaMethod" : "getJavaMethod" ));
90
95
91
96
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 ));
93
98
for (int i = 0 ; i < params .size (); i ++) {
94
99
SwiftParamDescriptor param = params .get (i );
95
100
String paramType = param .swiftType .swiftType + (param .isOptional ? "?" : "" );
@@ -166,7 +171,7 @@ else if (isReturnTypeOptional) {
166
171
}
167
172
}
168
173
169
- swiftWriter .emit (String .format (jniMethodTemplate , swiftType , name ));
174
+ swiftWriter .emit (String .format (jniMethodTemplate , swiftType , javaMethodName ));
170
175
171
176
for (SwiftParamDescriptor param : params ) {
172
177
swiftWriter .emitStatement (String .format (", java%s" , param .name ));
@@ -238,12 +243,12 @@ private String javaClassToSig(String javaClass) {
238
243
@ Override
239
244
public String toString () {
240
245
return "SwiftFuncDescriptor{" +
241
- "name='" + name + '\'' +
246
+ "javaMethodName='" + javaMethodName + '\'' +
247
+ ", swiftMethodName='" + swiftMethodName + '\'' +
242
248
", isStatic=" + isStatic +
243
249
", isThrown=" + isThrown +
244
250
", returnSwiftType='" + returnSwiftType + '\'' +
245
251
", isReturnTypeOptional=" + isReturnTypeOptional +
246
- ", description='" + description + '\'' +
247
252
", params=" + params +
248
253
'}' ;
249
254
}
0 commit comments