1
+ import DNJavaTypeConverter from './DNJavaTypeConverter.js'
2
+
3
+ let JC = new DNJavaTypeConverter
1
4
export class DNContext {
2
5
constructor ( internal ) {
3
6
this . internal = internal
@@ -16,33 +19,6 @@ export class DNContext {
16
19
}
17
20
18
21
var packageName = ''
19
- var basic_type_signature = new Map ( [
20
- [ 'char' , 'C' ] ,
21
- [ 'int' , 'I' ] ,
22
- [ 'double' , 'D' ] ,
23
- [ 'float' , 'F' ] ,
24
- [ 'byte' , 'B' ] ,
25
- [ 'short' , 'S' ] ,
26
- [ 'long' , 'J' ] ,
27
- [ 'boolean' , 'Z' ] ,
28
- [ 'void' , 'V' ]
29
- ] )
30
-
31
- var basic_type_conversion = function ( type ) {
32
- if ( type === 'float' ) return 'double'
33
-
34
- var intArray = [ 'short' , 'byte' , 'long' ]
35
- if ( intArray . includes ( type ) ) return 'int'
36
-
37
- if ( type === 'boolean' ) return 'bool'
38
-
39
- if ( type === 'char' ) return 'String'
40
-
41
- return type ;
42
- }
43
-
44
- var basic_type_wrapper = [ 'byte' , 'short' , 'long' , 'long' , 'float' , 'char' ]
45
-
46
22
export class DNArgumentContext extends DNContext {
47
23
constructor ( internal , name , type ) {
48
24
super ( internal )
@@ -61,67 +37,48 @@ export class DNMethodContext extends DNContext {
61
37
}
62
38
63
39
parse ( ) {
64
- var result = '\n ' + this . methodReturnType ( ) + ' ' + this . methodName + '(' + this . methodArgs ( ) + ')' + ' {\n'
40
+ var type = ''
41
+ if ( this . returnType == 'char' ) {
42
+ type = 'int'
43
+ } else {
44
+ type = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ this . returnType ]
45
+ }
46
+ var nullCheck = DNJavaTypeConverter . javaBasicType . includes ( this . returnType ) ? '' : '?'
47
+ var result = '\n ' + ( type == null ? this . returnType : type ) + nullCheck + ' ' + this . methodName + '(' + this . methodArgs ( ) + ')' + ' {\n'
65
48
result += ' ' + this . methodImpl ( )
66
49
result += ' }'
67
50
return result
68
51
}
69
52
70
- methodReturnType ( ) {
71
- return basic_type_conversion ( this . returnType ) ;
72
- }
73
-
74
53
methodImpl ( ) {
75
- // this.basicTypeWrapper()
76
- var callerPrefix = ' invoke(\'' + this . methodName + '\', '
77
- var args = '[' + this . basicTypeWrapper ( ) + '], '
78
- var returnType = '\'' + this . JNIReturnType ( ) + '\''
79
- return 'return' + callerPrefix + args + returnType + ');\n'
54
+ var callerPrefix = JC . convertToDartInvoke ( this . returnType ) + '(\'' + this . methodName + '\''
55
+ var args = ''
56
+ if ( this . args . length > 0 ) {
57
+ args = ', ' + 'args: [' + this . basicTypeWrapper ( ) + ']'
58
+ }
59
+ return 'return ' + callerPrefix + args + ');\n'
80
60
}
81
61
82
62
basicTypeWrapper ( ) {
83
63
var types = this . args . map ( arg => arg . type )
84
64
var argNames = this . args . map ( arg => arg . name )
85
65
var wrapperArgs = ''
86
66
for ( var i = 0 ; i < argNames . length ; i ++ ) {
87
- if ( i != 0 ) {
67
+ wrapperArgs += JC . convertToDartArgument ( types [ i ] , argNames [ i ] ) ;
68
+ if ( i != argNames . length - 1 ) {
88
69
wrapperArgs += ','
89
70
}
90
-
91
- if ( basic_type_wrapper . includes ( types [ i ] ) ) {
92
- if ( types [ i ] == 'char' ) {
93
- wrapperArgs += 'jchar(' + argNames [ i ] + '.codeUnitAt(0))'
94
- continue
95
- }
96
-
97
- wrapperArgs += types [ i ] + '(' + argNames [ i ] + ')'
98
- continue
99
- }
100
-
101
- wrapperArgs += argNames [ i ]
102
71
}
103
72
return wrapperArgs
104
73
}
105
74
106
- JNIReturnType ( ) {
107
- var result = basic_type_signature . get ( this . returnType )
108
- if ( result == undefined ) {
109
- //todo class jni signature
110
- if ( this . returnType == 'String' ) {
111
- result = 'Ljava/lang/String;'
112
- }
113
- }
114
- return result
115
- }
116
-
117
75
methodArgs ( ) {
118
76
var argList = ''
119
77
this . args . forEach ( ( element , index ) => {
120
- var argType = basic_type_conversion ( element . type )
121
- if ( index == this . args . length - 1 ) {
122
- argList += argType + ' ' + element . name
123
- } else {
124
- argList += argType + ' ' + element . name + ', '
78
+ var argType = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ element . type ]
79
+ argList += ( argType == null ? element . type : argType ) + ' ' + element . name
80
+ if ( index != this . args . length - 1 ) {
81
+ argList += ','
125
82
}
126
83
} )
127
84
return argList
@@ -140,12 +97,15 @@ export class DNClassContext extends DNContext {
140
97
}
141
98
142
99
parse ( ) {
143
- var result = 'class ' + this . name + ' extends JObject'
100
+ var result = '@native(javaClass: \'' + packageName + this . name + '\')\n'
101
+ result += 'class ' + this . name + ' extends JObject'
144
102
result += ' {\n'
145
- result += this . name + '([Pointer? ptr]) : super(\"' + packageName + this . name + '\", ' + 'pointer: ptr' + ');\n'
146
103
if ( this . args . length != 0 ) {
147
- result += this . name + '(' + this . methodArgs ( ) + ') : super(\"' + packageName + this . name + '\", [' + this . basicTypeWrapper ( ) + ']);\n'
148
- }
104
+ result += this . name + '.withParameters(' + this . methodArgs ( ) + ') : super(args: [' + this . basicTypeWrapper ( ) + ']);\n'
105
+ } else {
106
+ result += this . name + '() : super();\n'
107
+ }
108
+ result += this . name + '.fromPointer(Pointer<Void> pointer) : super.fromPointer(pointer);\n'
149
109
this . methods . forEach ( element => {
150
110
var parseRet = element . parse ( )
151
111
result += parseRet ? parseRet + '\n' : ''
@@ -157,11 +117,10 @@ export class DNClassContext extends DNContext {
157
117
methodArgs ( ) {
158
118
var argList = ''
159
119
this . args . forEach ( ( element , index ) => {
160
- var argType = basic_type_conversion ( element . type )
161
- if ( index == this . args . length - 1 ) {
162
- argList += argType + ' ' + element . name
163
- } else {
164
- argList += argType + ' ' + element . name + ', '
120
+ var argType = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ element . type ]
121
+ argList += ( argType == null ? element . type : argType ) + ' ' + element . name
122
+ if ( index != this . args . length - 1 ) {
123
+ argList += ','
165
124
}
166
125
} )
167
126
return argList
@@ -172,21 +131,10 @@ export class DNClassContext extends DNContext {
172
131
var argNames = this . args . map ( arg => arg . name )
173
132
var wrapperArgs = ''
174
133
for ( var i = 0 ; i < argNames . length ; i ++ ) {
175
- if ( i != 0 ) {
134
+ wrapperArgs += JC . convertToDartArgument ( types [ i ] , argNames [ i ] ) ;
135
+ if ( i != argNames . length - 1 ) {
176
136
wrapperArgs += ','
177
137
}
178
-
179
- if ( basic_type_wrapper . includes ( types [ i ] ) ) {
180
- if ( types [ i ] == 'char' ) {
181
- wrapperArgs += 'jchar(' + argNames [ i ] + '.codeUnitAt(0))'
182
- continue
183
- }
184
-
185
- wrapperArgs += types [ i ] + '(' + argNames [ i ] + ')'
186
- continue
187
- }
188
-
189
- wrapperArgs += argNames [ i ]
190
138
}
191
139
return wrapperArgs
192
140
}
@@ -250,6 +198,7 @@ export class DNRootContext extends DNContext {
250
198
var result = ""
251
199
var packageSet = new Set ( )
252
200
result += '// Generated by @dartnative/codegen:\n// https://www.npmjs.com/package/@dartnative/codegen\n\n'
201
+ result += "import 'dart:ffi';\n"
253
202
result += "import 'package:dart_native/dart_native.dart';\n"
254
203
result += "import 'package:dart_native_gen/dart_native_gen.dart';\n"
255
204
result += this . children . map ( ctx => ctx . parse ( ) ) . join ( '\n\n' )
0 commit comments