diff --git a/packages/pigeon/lib/arkts_generator.dart b/packages/pigeon/lib/arkts_generator.dart index 5d9391554a2cd3b7744386fe615f43fa7c16d4fa..2cedf046d6bf81e97c4115a9c5fe7d299b06f725 100644 --- a/packages/pigeon/lib/arkts_generator.dart +++ b/packages/pigeon/lib/arkts_generator.dart @@ -202,14 +202,15 @@ class ArkTSGenerator extends StructuredGenerator { if (klass.fields.isNotEmpty) { for (final NamedType element in klass.fields) { final String type = _arkTSTypeForDartType(element.type); - final String name = element.name; + final String name = getSafeConstructorArgument(element.name); argSignature.add('$name: $type'); } } indent.add('(${argSignature.join(', ')}) '); indent.addScoped('{', '}', () { for (final NamedType field in getFieldsInSerializationOrder(klass)) { - indent.writeln('this.${field.name} = ${field.name};'); + final String value = getSafeConstructorArgument(field.name); + indent.writeln('this.${field.name} = $value;'); } }); } @@ -288,17 +289,6 @@ class ArkTSGenerator extends StructuredGenerator { if (getCodecClasses(api, root).isNotEmpty) { _writeCodec(indent, api, root); } - // This warning can't be fixed without a breaking change, and the next - // breaking change to this part of the code should be eliminating Reply - // entirely in favor of using Result for - // https://github.com/flutter/flutter/issues/118243 - // See also the comment on the Result code. - indent.writeln('/** Public interface for sending reply. */ '); - indent.write('interface Reply '); - indent.addScoped('{', '}', () { - indent.writeln('reply(reply: T): void;'); - }); - indent.newln(); const List generatedMessages = [ ' Generated class from Pigeon that represents Flutter messages that can be called from ArkTS.' @@ -368,30 +358,6 @@ class ArkTSGenerator extends StructuredGenerator { indent.write( '${func.name}($argsSignature, callback: Reply<$returnType>) '); } - // indent.addScoped('{', '}', () { - // const String channel = 'channel'; - // indent.writeln('let $channel: BasicMessageChannel ='); - // indent.nest(2, () { - // indent.addln('new BasicMessageChannel('); - // indent.nest(2, () { - // indent.add('this.binaryMessenger, "$channelName", this.getCodec());'); - // }); - // }); - // indent.newln(); - // indent.write('const methodResult: MethodResult = '); - // indent.addScoped('{', '}', () { - // indent.writeln('success(result: object) {'); - // indent.writeln('reply();'); - // indent.writeln('}'); - // }); - // indent.newln(); - // indent.write('this.$channel.invokeMethod('); - // indent.nest(2, () { - // indent.add('"${func.name}",'); - // indent.add('$sendArgument,'); - // indent.addln(' methodResult)'); - // }); - // } indent.addScoped('{', '}', () { const String channel = 'channel'; indent.writeln('let $channel: BasicMessageChannel = '); @@ -563,7 +529,7 @@ class ArkTSGenerator extends StructuredGenerator { class ResultImp implements Result<$returnType>{ \t\t\tsuccess(result: $returnType): void { \t\t\t\tlet res: Array = []; -\t\t\t\tres.push(result); +\t\t\t\tres.push($resultValue); \t\t\t\treply.reply(res); \t\t\t} @@ -805,6 +771,11 @@ getByte(n: number): number { String _getSafeArgumentName(int count, NamedType argument) => '${_getArgumentName(count, argument)}Arg'; + /// arkts方法参数如果是arguments,会与参数关键字冲突 + String getSafeConstructorArgument(String argument){ + return (argument=='arguments')?'argumentsArg':argument; + } + // get函数 String _makeGetter(NamedType field) { final String uppercased =