Skip to content

Commit a8f2480

Browse files
committed
feat: support constructor
1 parent 5119b38 commit a8f2480

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

lib/java/DNJavaContext.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export class DNMethodContext extends DNContext {
9090

9191
if(basic_type_wrapper.includes(types[i])) {
9292
if(types[i] == 'char') {
93-
wrapperArgs += 'char(' + argNames[i] + '.codeUnitAt(0))'
93+
wrapperArgs += 'jchar(' + argNames[i] + '.codeUnitAt(0))'
9494
continue
9595
}
9696

@@ -136,19 +136,60 @@ export class DNClassContext extends DNContext {
136136
this.name = internalChildren.children[2].start.text
137137
this.superClass = []
138138
this.methods = []
139+
this.args = []
139140
}
140141

141142
parse() {
142143
var result = 'class ' + this.name + ' extends JObject'
143144
result += ' {\n'
144-
result += ' ' + this.name + '() : super(\"' + packageName + this.name + '\");\n'
145+
result += this.name + '([Pointer? ptr]) : super(\"' + packageName + this.name + '\", ' + 'pointer: ptr' + ');\n'
146+
if (this.args.length != 0) {
147+
result += this.name + '(' + this.methodArgs() + ') : super(\"' + packageName + this.name + '\", [' + this.basicTypeWrapper() + ']);\n'
148+
}
145149
this.methods.forEach(element => {
146150
var parseRet = element.parse()
147151
result += parseRet ? parseRet + '\n' : ''
148152
})
149153
result += '\n}'
150154
return result
151155
}
156+
157+
methodArgs() {
158+
var argList = ''
159+
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 + ', '
165+
}
166+
})
167+
return argList
168+
}
169+
170+
basicTypeWrapper() {
171+
var types = this.args.map(arg => arg.type)
172+
var argNames = this.args.map(arg => arg.name)
173+
var wrapperArgs = ''
174+
for(var i = 0; i < argNames.length; i++) {
175+
if(i != 0) {
176+
wrapperArgs += ','
177+
}
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+
}
191+
return wrapperArgs
192+
}
152193
}
153194

154195
export class DNImportContext extends DNContext {
@@ -208,6 +249,7 @@ export class DNRootContext extends DNContext {
208249
parse() {
209250
var result = ""
210251
var packageSet = new Set()
252+
result += '// Generated by @dartnative/codegen:\n// https://www.npmjs.com/package/@dartnative/codegen\n\n'
211253
result += "import 'package:dart_native/dart_native.dart';\n"
212254
result += "import 'package:dart_native_gen/dart_native_gen.dart';\n"
213255
result += this.children.map(ctx => ctx.parse()).join('\n\n')

lib/java/DNJavaParserListener.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,13 @@ export default class DNJavaParserListener extends Java9Listener {
775775
argument.name = ctx.children[1].start.text
776776
this.currentContext.addChild(argument)
777777
this.currentContext = argument
778+
} else if (this.currentContext instanceof DNClassContext) {
779+
// Add method names.
780+
var argument = new DNArgumentContext(ctx)
781+
argument.type = ctx.children[0].start.text
782+
argument.name = ctx.children[1].start.text
783+
this.currentContext.addChild(argument)
784+
this.currentContext = argument
778785
}
779786
};
780787

@@ -784,6 +791,10 @@ export default class DNJavaParserListener extends Java9Listener {
784791
var argument = this.currentContext
785792
this.currentContext = this.currentContext.parent
786793
this.currentContext.args.push(argument)
794+
} else if (this.currentContext instanceof DNClassContext) {
795+
var argument = this.currentContext
796+
this.currentContext = this.currentContext.parent
797+
this.currentContext.args.push(argument)
787798
}
788799
};
789800

0 commit comments

Comments
 (0)