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
@@ -28,16 +31,15 @@ var basic_type_signature = new Map([
28
31
[ 'void' , 'V' ]
29
32
] )
30
33
34
+ var intArray = [ 'short' , 'byte' , 'long' ]
35
+
31
36
var basic_type_conversion = function ( type ) {
32
37
if ( type === 'float' ) return 'double'
33
-
34
- var intArray = [ 'short' , 'byte' , 'long' ]
38
+
35
39
if ( intArray . includes ( type ) ) return 'int'
36
40
37
41
if ( type === 'boolean' ) return 'bool'
38
42
39
- if ( type === 'char' ) return 'String'
40
-
41
43
return type ;
42
44
}
43
45
@@ -61,67 +63,40 @@ export class DNMethodContext extends DNContext {
61
63
}
62
64
63
65
parse ( ) {
64
- var result = '\n ' + this . methodReturnType ( ) + ' ' + this . methodName + '(' + this . methodArgs ( ) + ')' + ' {\n'
66
+ var type = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ this . returnType ]
67
+ var result = '\n ' + ( type == null ? this . returnType : type ) + ' ' + this . methodName + '(' + this . methodArgs ( ) + ')' + ' {\n'
65
68
result += ' ' + this . methodImpl ( )
66
69
result += ' }'
67
70
return result
68
71
}
69
72
70
- methodReturnType ( ) {
71
- return basic_type_conversion ( this . returnType ) ;
72
- }
73
-
74
73
methodImpl ( ) {
75
74
// 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'
75
+ var callerPrefix = JC . convertToDartInvoke ( this . returnType ) + '(\'' + this . methodName + '\', '
76
+ var args = 'args: [' + this . basicTypeWrapper ( ) + '] '
77
+ return 'return ' + callerPrefix + args + ');\n'
80
78
}
81
79
82
80
basicTypeWrapper ( ) {
83
81
var types = this . args . map ( arg => arg . type )
84
82
var argNames = this . args . map ( arg => arg . name )
85
83
var wrapperArgs = ''
86
84
for ( var i = 0 ; i < argNames . length ; i ++ ) {
87
- if ( i != 0 ) {
85
+ wrapperArgs += JC . convertToDartArgument ( types [ i ] , argNames [ i ] ) ;
86
+ if ( i != argNames . length - 1 ) {
88
87
wrapperArgs += ','
89
88
}
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
89
}
103
90
return wrapperArgs
104
91
}
105
92
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
93
methodArgs ( ) {
118
94
var argList = ''
119
95
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 + ', '
96
+ var argType = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ element . type ]
97
+ argList += ( argType == null ? element . type : argType ) + ' ' + element . name
98
+ if ( index != this . args . length - 1 ) {
99
+ argList += ','
125
100
}
126
101
} )
127
102
return argList
@@ -140,12 +115,15 @@ export class DNClassContext extends DNContext {
140
115
}
141
116
142
117
parse ( ) {
143
- var result = 'class ' + this . name + ' extends JObject'
118
+ var result = '@native(javaClass: \'' + packageName + this . name + '\')\n'
119
+ result += 'class ' + this . name + ' extends JObject'
144
120
result += ' {\n'
145
- result += this . name + '([Pointer? ptr]) : super(\"' + packageName + this . name + '\", ' + 'pointer: ptr' + ');\n'
146
121
if ( this . args . length != 0 ) {
147
- result += this . name + '(' + this . methodArgs ( ) + ') : super(\"' + packageName + this . name + '\", [' + this . basicTypeWrapper ( ) + ']);\n'
148
- }
122
+ result += this . name + '.withParameters(' + this . methodArgs ( ) + ') : super(args: [' + this . basicTypeWrapper ( ) + ']);\n'
123
+ } else {
124
+ result += this . name + '() : super();\n'
125
+ }
126
+ result += this . name + '.fromPointer(Pointer<Void> pointer) : super.fromPointer(pointer);\n'
149
127
this . methods . forEach ( element => {
150
128
var parseRet = element . parse ( )
151
129
result += parseRet ? parseRet + '\n' : ''
@@ -157,11 +135,10 @@ export class DNClassContext extends DNContext {
157
135
methodArgs ( ) {
158
136
var argList = ''
159
137
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 + ', '
138
+ var argType = DNJavaTypeConverter . DNJava2DartBasicTypeMap [ element . type ]
139
+ argList += ( argType == null ? element . type : argType ) + ' ' + element . name
140
+ if ( index != this . args . length - 1 ) {
141
+ argList += ','
165
142
}
166
143
} )
167
144
return argList
@@ -172,21 +149,10 @@ export class DNClassContext extends DNContext {
172
149
var argNames = this . args . map ( arg => arg . name )
173
150
var wrapperArgs = ''
174
151
for ( var i = 0 ; i < argNames . length ; i ++ ) {
175
- if ( i != 0 ) {
152
+ wrapperArgs += JC . convertToDartArgument ( types [ i ] , argNames [ i ] ) ;
153
+ if ( i != argNames . length - 1 ) {
176
154
wrapperArgs += ','
177
155
}
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
156
}
191
157
return wrapperArgs
192
158
}
@@ -250,6 +216,7 @@ export class DNRootContext extends DNContext {
250
216
var result = ""
251
217
var packageSet = new Set ( )
252
218
result += '// Generated by @dartnative/codegen:\n// https://www.npmjs.com/package/@dartnative/codegen\n\n'
219
+ result += "import 'dart:ffi';\n"
253
220
result += "import 'package:dart_native/dart_native.dart';\n"
254
221
result += "import 'package:dart_native_gen/dart_native_gen.dart';\n"
255
222
result += this . children . map ( ctx => ctx . parse ( ) ) . join ( '\n\n' )
0 commit comments