From 01ff17cc9ae0d6f1e0faa054919c6d42e204075d Mon Sep 17 00:00:00 2001 From: Dmitrii Naumov Date: Fri, 28 Feb 2025 16:52:30 +0800 Subject: [PATCH 1/3] fix Signed-off-by: Dmitrii Naumov --- arkoala/ets-plugin/src/DollarDollarTransformer.ts | 14 +++++++++----- .../golden/arkoala/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/arkoala/spec/@builderParam.ts | 4 ++-- .../test/golden/arkoala/spec/animateTo.ts | 2 +- .../golden/arkts/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/arkts/spec/@builderParam.ts | 4 ++-- .../ets-plugin/test/golden/arkts/spec/animateTo.ts | 2 +- .../golden/koala/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/koala/spec/@builderParam.ts | 4 ++-- .../ets-plugin/test/golden/koala/spec/animateTo.ts | 2 +- 10 files changed, 39 insertions(+), 35 deletions(-) diff --git a/arkoala/ets-plugin/src/DollarDollarTransformer.ts b/arkoala/ets-plugin/src/DollarDollarTransformer.ts index 0efe9a334..9fe00469f 100644 --- a/arkoala/ets-plugin/src/DollarDollarTransformer.ts +++ b/arkoala/ets-plugin/src/DollarDollarTransformer.ts @@ -52,12 +52,16 @@ export class DollarDollarTransformer extends AbstractVisitor { // TODO } if (ts.isEtsComponentExpression(node)) { + const initializations = DollarDollarTransformer.componentCallInitializations(node) + .map(it => + (node: ts.EtsComponentExpression | ts.CallExpression) => + DollarDollarTransformer.addOnChanged(node, it) + ) + if (initializations.length === 0) { + return node + } return DollarDollarTransformer.dropDollarDollarCalls( - DollarDollarTransformer.componentCallInitializations(node) - .map(it => - (node: ts.EtsComponentExpression | ts.CallExpression) => - DollarDollarTransformer.addOnChanged(node, it) - ) + initializations .reduce( (addTo, add) => add(addTo), node as ts.EtsComponentExpression | ts.CallExpression diff --git a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts index ad66e5003..3852e0191 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts @@ -96,16 +96,16 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance.index(_$("com.application.example", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: this.n }); - ArkTextInput(undefined, undefined, { text: this.s }); - ArkTextArea(undefined, undefined, { text: this.s }); - ArkTextInput(undefined, undefined, { text: this.s }); + ArkTabs(undefined, undefined, { index: _$("com.application.example", "entry", this.n) }); + ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); + ArkTextArea(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); + ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) }); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); - ArkRefresh(undefined, undefined, { refreshing: this.b }); - ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("com.application.example", "entry", this.n) }); + ArkRefresh(undefined, undefined, { refreshing: _$("com.application.example", "entry", this.b) }); + ArkTextPicker(undefined, undefined, { range: [], value: _$("com.application.example", "entry", this.s), selected: _$("com.application.example", "entry", this.n) }); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("com.application.example", "entry", this.s)) .selected(_$("com.application.example", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts index 69d8f8347..f176b327c 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts @@ -169,7 +169,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -191,7 +191,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance.index(_$("com.application.example", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: this.n } as TabsOptions); - ArkTextInput(undefined, undefined, { text: this.s } as TextInputOptions); - ArkTextArea(undefined, undefined, { text: this.s } as TextAreaOptions); - ArkTextInput(undefined, undefined, { text: this.s } as TextInputOptions); + ArkTabs(undefined, undefined, { index: _$("com.application.example", "entry", this.n) } as TabsOptions); + ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextInputOptions); + ArkTextArea(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextAreaOptions); + ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextInputOptions); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) } as ToggleOptions); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n } as AlphabetIndexerOptions); - ArkRefresh(undefined, undefined, { refreshing: this.b } as RefreshOptions); - ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n } as TextPickerOptions); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("com.application.example", "entry", this.n) } as AlphabetIndexerOptions); + ArkRefresh(undefined, undefined, { refreshing: _$("com.application.example", "entry", this.b) } as RefreshOptions); + ArkTextPicker(undefined, undefined, { range: [], value: _$("com.application.example", "entry", this.s), selected: _$("com.application.example", "entry", this.n) } as TextPickerOptions); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("com.application.example", "entry", this.s)) .selected(_$("com.application.example", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts index a530a8596..e8655bdeb 100644 --- a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance.index(_$("", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: this.n }); - ArkTextInput(undefined, undefined, { text: this.s }); - ArkTextArea(undefined, undefined, { text: this.s }); - ArkTextInput(undefined, undefined, { text: this.s }); + ArkTabs(undefined, undefined, { index: _$("", "entry", this.n) }); + ArkTextInput(undefined, undefined, { text: _$("", "entry", this.s) }); + ArkTextArea(undefined, undefined, { text: _$("", "entry", this.s) }); + ArkTextInput(undefined, undefined, { text: _$("", "entry", this.s) }); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("", "entry", this.b) }); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); - ArkRefresh(undefined, undefined, { refreshing: this.b }); - ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("", "entry", this.n) }); + ArkRefresh(undefined, undefined, { refreshing: _$("", "entry", this.b) }); + ArkTextPicker(undefined, undefined, { range: [], value: _$("", "entry", this.s), selected: _$("", "entry", this.n) }); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("", "entry", this.s)) .selected(_$("", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts index 366c5932f..fe3d6a4ab 100644 --- a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase Date: Fri, 28 Feb 2025 16:53:45 +0800 Subject: [PATCH 2/3] Revert "fix" This reverts commit ef1bb3ba8471591ee454c7ad905af23987ee627f. --- arkoala/ets-plugin/src/DollarDollarTransformer.ts | 14 +++++--------- .../golden/arkoala/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/arkoala/spec/@builderParam.ts | 4 ++-- .../test/golden/arkoala/spec/animateTo.ts | 2 +- .../golden/arkts/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/arkts/spec/@builderParam.ts | 4 ++-- .../ets-plugin/test/golden/arkts/spec/animateTo.ts | 2 +- .../golden/koala/ets/dollar-dollar/components.ts | 14 +++++++------- .../test/golden/koala/spec/@builderParam.ts | 4 ++-- .../ets-plugin/test/golden/koala/spec/animateTo.ts | 2 +- 10 files changed, 35 insertions(+), 39 deletions(-) diff --git a/arkoala/ets-plugin/src/DollarDollarTransformer.ts b/arkoala/ets-plugin/src/DollarDollarTransformer.ts index 9fe00469f..0efe9a334 100644 --- a/arkoala/ets-plugin/src/DollarDollarTransformer.ts +++ b/arkoala/ets-plugin/src/DollarDollarTransformer.ts @@ -52,16 +52,12 @@ export class DollarDollarTransformer extends AbstractVisitor { // TODO } if (ts.isEtsComponentExpression(node)) { - const initializations = DollarDollarTransformer.componentCallInitializations(node) - .map(it => - (node: ts.EtsComponentExpression | ts.CallExpression) => - DollarDollarTransformer.addOnChanged(node, it) - ) - if (initializations.length === 0) { - return node - } return DollarDollarTransformer.dropDollarDollarCalls( - initializations + DollarDollarTransformer.componentCallInitializations(node) + .map(it => + (node: ts.EtsComponentExpression | ts.CallExpression) => + DollarDollarTransformer.addOnChanged(node, it) + ) .reduce( (addTo, add) => add(addTo), node as ts.EtsComponentExpression | ts.CallExpression diff --git a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts index 3852e0191..ad66e5003 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts @@ -96,16 +96,16 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance.index(_$("com.application.example", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: _$("com.application.example", "entry", this.n) }); - ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); - ArkTextArea(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); - ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) }); + ArkTabs(undefined, undefined, { index: this.n }); + ArkTextInput(undefined, undefined, { text: this.s }); + ArkTextArea(undefined, undefined, { text: this.s }); + ArkTextInput(undefined, undefined, { text: this.s }); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) }); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("com.application.example", "entry", this.n) }); - ArkRefresh(undefined, undefined, { refreshing: _$("com.application.example", "entry", this.b) }); - ArkTextPicker(undefined, undefined, { range: [], value: _$("com.application.example", "entry", this.s), selected: _$("com.application.example", "entry", this.n) }); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); + ArkRefresh(undefined, undefined, { refreshing: this.b }); + ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("com.application.example", "entry", this.s)) .selected(_$("com.application.example", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts index f176b327c..69d8f8347 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts @@ -169,7 +169,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -191,7 +191,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance.index(_$("com.application.example", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: _$("com.application.example", "entry", this.n) } as TabsOptions); - ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextInputOptions); - ArkTextArea(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextAreaOptions); - ArkTextInput(undefined, undefined, { text: _$("com.application.example", "entry", this.s) } as TextInputOptions); + ArkTabs(undefined, undefined, { index: this.n } as TabsOptions); + ArkTextInput(undefined, undefined, { text: this.s } as TextInputOptions); + ArkTextArea(undefined, undefined, { text: this.s } as TextAreaOptions); + ArkTextInput(undefined, undefined, { text: this.s } as TextInputOptions); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) } as ToggleOptions); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("com.application.example", "entry", this.n) } as AlphabetIndexerOptions); - ArkRefresh(undefined, undefined, { refreshing: _$("com.application.example", "entry", this.b) } as RefreshOptions); - ArkTextPicker(undefined, undefined, { range: [], value: _$("com.application.example", "entry", this.s), selected: _$("com.application.example", "entry", this.n) } as TextPickerOptions); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n } as AlphabetIndexerOptions); + ArkRefresh(undefined, undefined, { refreshing: this.b } as RefreshOptions); + ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n } as TextPickerOptions); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("com.application.example", "entry", this.s)) .selected(_$("com.application.example", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts index e8655bdeb..a530a8596 100644 --- a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance.index(_$("", "entry", this.n)); }, undefined); - ArkTabs(undefined, undefined, { index: _$("", "entry", this.n) }); - ArkTextInput(undefined, undefined, { text: _$("", "entry", this.s) }); - ArkTextArea(undefined, undefined, { text: _$("", "entry", this.s) }); - ArkTextInput(undefined, undefined, { text: _$("", "entry", this.s) }); + ArkTabs(undefined, undefined, { index: this.n }); + ArkTextInput(undefined, undefined, { text: this.s }); + ArkTextArea(undefined, undefined, { text: this.s }); + ArkTextInput(undefined, undefined, { text: this.s }); ArkToggle((__instance: ArkToggleComponent) => { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); }, undefined, { type: ToggleType.Checkbox, isOn: _$("", "entry", this.b) }); - ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: _$("", "entry", this.n) }); - ArkRefresh(undefined, undefined, { refreshing: _$("", "entry", this.b) }); - ArkTextPicker(undefined, undefined, { range: [], value: _$("", "entry", this.s), selected: _$("", "entry", this.n) }); + ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); + ArkRefresh(undefined, undefined, { refreshing: this.b }); + ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); ArkSelect((__instance: ArkSelectComponent) => { __instance.value(_$("", "entry", this.s)) .selected(_$("", "entry", this.n)); diff --git a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts index fe3d6a4ab..366c5932f 100644 --- a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase Date: Fri, 28 Feb 2025 21:49:57 +0800 Subject: [PATCH 3/3] fix leftovers Signed-off-by: Dmitrii Naumov --- arkoala/ets-plugin/src/ArkExpander.ts | 5 +- .../src/DollarDollarRemoveTransformer.ts | 30 ++++++++++ .../ets-plugin/src/DollarDollarTransformer.ts | 55 ++++--------------- .../arkoala/ets/dollar-dollar/components.ts | 38 ++++++------- .../test/golden/arkoala/spec/@builderParam.ts | 4 +- .../test/golden/arkoala/spec/animateTo.ts | 2 +- .../arkts/ets/dollar-dollar/components.ts | 38 ++++++------- .../test/golden/arkts/spec/@builderParam.ts | 4 +- .../test/golden/arkts/spec/animateTo.ts | 2 +- .../koala/ets/dollar-dollar/components.ts | 38 ++++++------- .../test/golden/koala/spec/@builderParam.ts | 4 +- .../test/golden/koala/spec/animateTo.ts | 2 +- 12 files changed, 112 insertions(+), 110 deletions(-) create mode 100644 arkoala/ets-plugin/src/DollarDollarRemoveTransformer.ts diff --git a/arkoala/ets-plugin/src/ArkExpander.ts b/arkoala/ets-plugin/src/ArkExpander.ts index 4ea4d31c7..cefe2fa24 100644 --- a/arkoala/ets-plugin/src/ArkExpander.ts +++ b/arkoala/ets-plugin/src/ArkExpander.ts @@ -34,6 +34,7 @@ import { DebugVisitor } from './AbstractVisitor' import { LegacyCallTransformer } from './LegacyCallTransformer' import { AbilityTransformer } from './AbilityTransformer' import { DollarDollarTransformer } from "./DollarDollarTransformer" +import { DollarDollarRemoveTransformer } from "./DollarDollarRemoveTransformer" import { ObservedResolver } from "./ObservedResolver" interface ArkToKoOptions { @@ -126,6 +127,7 @@ export function arkExpandFile( .visitor(sourceFile) const dollarDollarTransformer = new DollarDollarTransformer(sourceFile, ctx) + const dollarDollarRemoveTransformer = new DollarDollarRemoveTransformer(sourceFile, ctx) const callTransformer = new CallTransformer(sourceFile, ctx, typeChecker, callTable, importer) const lazyTransformer = new LazyTransformer(sourceFile, ctx, importer, callTable) const newTransformer = new NewTransformer(sourceFile, ctx, importer, issueTable) @@ -143,7 +145,8 @@ export function arkExpandFile( nameCollector.visitor(sourceFile) const translatedDollarDollar = dollarDollarTransformer.visitor(sourceFile) as ts.SourceFile - const translatedCalls = callTransformer.visitor(translatedDollarDollar) as ts.SourceFile + const removedDollarDollar = dollarDollarRemoveTransformer.visitor(translatedDollarDollar) as ts.SourceFile + const translatedCalls = callTransformer.visitor(removedDollarDollar) as ts.SourceFile const translatedDollar = dollarTransformer.visitor(translatedCalls) as ts.SourceFile const translatedLazy = lazyTransformer.visitor(translatedDollar) as ts.SourceFile const translatedNew = newTransformer.visitor(translatedLazy) as ts.SourceFile diff --git a/arkoala/ets-plugin/src/DollarDollarRemoveTransformer.ts b/arkoala/ets-plugin/src/DollarDollarRemoveTransformer.ts new file mode 100644 index 000000000..101c17722 --- /dev/null +++ b/arkoala/ets-plugin/src/DollarDollarRemoveTransformer.ts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as ts from "@koalaui/ets-tsc" +import { AbstractVisitor } from "./AbstractVisitor" +import { DollarDollarTransformer } from "./DollarDollarTransformer"; + +export class DollarDollarRemoveTransformer extends AbstractVisitor { + visitor(beforeChildren: ts.Node): ts.Node { + const node = this.visitEachChild(beforeChildren) + + if (ts.isCallExpression(node)) { + return DollarDollarTransformer.argumentIfDollarDollarCall(node) + } + + return node + } +} diff --git a/arkoala/ets-plugin/src/DollarDollarTransformer.ts b/arkoala/ets-plugin/src/DollarDollarTransformer.ts index 0efe9a334..d63614105 100644 --- a/arkoala/ets-plugin/src/DollarDollarTransformer.ts +++ b/arkoala/ets-plugin/src/DollarDollarTransformer.ts @@ -32,7 +32,7 @@ export class DollarDollarTransformer extends AbstractVisitor { return ts.idText(node.expression) } - private static isDollarDollar(node: ts.CallExpression): boolean { + static isDollarDollar(node: ts.CallExpression): boolean { if (!ts.isIdentifier(node.expression)) { return false } @@ -48,21 +48,19 @@ export class DollarDollarTransformer extends AbstractVisitor { visitor(beforeChildren: ts.Node): ts.Node { const node = this.visitEachChild(beforeChildren) if (ts.isCallExpression(node)) { - const initializations = DollarDollarTransformer.componentMethodCallInitializations(node) - // TODO + // TODO componentMethodCallInitializations } + if (ts.isEtsComponentExpression(node)) { - return DollarDollarTransformer.dropDollarDollarCalls( - DollarDollarTransformer.componentCallInitializations(node) - .map(it => - (node: ts.EtsComponentExpression | ts.CallExpression) => - DollarDollarTransformer.addOnChanged(node, it) - ) - .reduce( - (addTo, add) => add(addTo), - node as ts.EtsComponentExpression | ts.CallExpression - ) - ) + return DollarDollarTransformer.componentCallInitializations(node) + .map(it => + (node: ts.EtsComponentExpression | ts.CallExpression) => + DollarDollarTransformer.addOnChanged(node, it) + ) + .reduce( + (addTo, add) => add(addTo), + node as ts.EtsComponentExpression | ts.CallExpression + ) } return node } @@ -194,35 +192,6 @@ export class DollarDollarTransformer extends AbstractVisitor { })) } - static dropDollarDollarCalls(node: ts.EtsComponentExpression | ts.CallExpression): ts.EtsComponentExpression | ts.CallExpression { - if (ts.isCallExpression(node)) { - // TODO - return node - } - if (node.arguments.length !== 1) { - return node - } - const singleArgument = node.arguments[0] - if (!ts.isObjectLiteralExpression(singleArgument)) { - return node - } - return ts.factory.updateEtsComponentExpression( - node, - node.expression, - [ts.factory.updateObjectLiteralExpression( - singleArgument, - singleArgument.properties - .filter(ts.isPropertyAssignment) - .map(it => ts.factory.updatePropertyAssignment( - it, - it.name, - DollarDollarTransformer.argumentIfDollarDollarCall(it.initializer) - )) - )], - node.body - ) - } - static argumentIfDollarDollarCall(node: ts.Expression): ts.Expression { if (!ts.isCallExpression(node)) { return node diff --git a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts index ad66e5003..464017dd3 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/ets/dollar-dollar/components.ts @@ -1,4 +1,4 @@ -import { $$, ArkAlphabetIndexer, ArkButton, ArkButtonComponent, ArkCheckbox, ArkCheckboxComponent, ArkCheckboxGroup, ArkCheckboxGroupComponent, ArkColumn, ArkCommonMethodComponent, ArkDatePicker, ArkDatePickerComponent, ArkGrid, ArkGridItem, ArkGridItemComponent, ArkList, ArkListItem, ArkListItemComponent, ArkListItemGroup, ArkMenuItem, ArkMenuItemComponent, ArkPageTransitionEnterComponent, ArkPageTransitionExitComponent, ArkPanel, ArkPanelComponent, ArkRadio, ArkRadioComponent, ArkRefresh, ArkSearch, ArkSearchComponent, ArkSelect, ArkSelectComponent, ArkSideBarContainer, ArkSideBarContainerComponent, ArkSlider, ArkStepper, ArkStructBase, ArkSwiper, ArkSwiperComponent, ArkTabs, ArkText, ArkTextArea, ArkTextInput, ArkTextPicker, ArkTimePicker, ArkTimePickerComponent, ArkToggle, ArkToggleComponent, ListItemStyle, LocalStorage, MutableState, PanelMode, SideBarContainerType, ToggleType, _$, contextLocalStateOf, observableProxy, stateOf } from "@koalaui/arkoala-arkui"; +import { $$, ArkAlphabetIndexer, ArkButton, ArkButtonComponent, ArkCheckbox, ArkCheckboxComponent, ArkCheckboxGroup, ArkCheckboxGroupComponent, ArkColumn, ArkCommonMethodComponent, ArkDatePicker, ArkDatePickerComponent, ArkGrid, ArkGridItem, ArkGridItemComponent, ArkList, ArkListItem, ArkListItemComponent, ArkListItemGroup, ArkMenuItem, ArkMenuItemComponent, ArkPageTransitionEnterComponent, ArkPageTransitionExitComponent, ArkPanel, ArkPanelComponent, ArkRadio, ArkRadioComponent, ArkRefresh, ArkSearch, ArkSearchComponent, ArkSelect, ArkSelectComponent, ArkSideBarContainer, ArkSideBarContainerComponent, ArkSlider, ArkStepper, ArkStructBase, ArkSwiper, ArkSwiperComponent, ArkTabs, ArkText, ArkTextArea, ArkTextInput, ArkTextPicker, ArkTimePicker, ArkTimePickerComponent, ArkToggle, ArkToggleComponent, ListItemStyle, LocalStorage, MutableState, PanelMode, SideBarContainerType, ToggleType, contextLocalStateOf, observableProxy, stateOf } from "@koalaui/arkoala-arkui"; import { registerArkuiEntry } from "@koalaui/arkoala-arkui/ohos.router"; class ArkDollarDollarComponent extends ArkStructBase { private _entry_local_storage_ = new LocalStorage(); @@ -64,37 +64,37 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Switch, isOn: _$("com.application.example", "entry", this.b) }); + }, undefined, { type: ToggleType.Switch, isOn: this.b }); ArkStepper(undefined, undefined, { index: this.n }); ArkCheckbox((__instance: ArkCheckboxComponent) => { - __instance.select(_$("com.application.example", "entry", this.b)); + __instance.select(this.b); }, undefined); ArkCheckboxGroup((__instance: ArkCheckboxGroupComponent) => { - __instance.selectAll(_$("com.application.example", "entry", this.b)); + __instance.selectAll(this.b); }, undefined); ArkDatePicker((__instance: ArkDatePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("com.application.example", "entry", this.d) }); + }, undefined, { selected: this.d }); ArkTimePicker((__instance: ArkTimePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("com.application.example", "entry", this.d) }); + }, undefined, { selected: this.d }); ArkMenuItem((__instance: ArkMenuItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined); ArkPanel((__instance: ArkPanelComponent) => { - __instance.mode(_$("com.application.example", "entry", this.m)); + __instance.mode(this.m); }, undefined, false); ArkRadio((__instance: ArkRadioComponent) => { - __instance.checked(_$("com.application.example", "entry", this.b)); + __instance.checked(this.b); }, undefined, { group: "", value: "" }); ArkSearch((__instance: ArkSearchComponent) => { __instance._onChangeEvent_value((value: string): void => { this.s = value; }); - }, undefined, { value: _$("com.application.example", "entry", this.s) }); + }, undefined, { value: this.s }); ArkSideBarContainer((__instance: ArkSideBarContainerComponent) => { - __instance.showSideBar(_$("com.application.example", "entry", this.b)); + __instance.showSideBar(this.b); }, undefined, SideBarContainerType.Embed); ArkSwiper((__instance: ArkSwiperComponent) => { - __instance.index(_$("com.application.example", "entry", this.n)); + __instance.index(this.n); }, undefined); ArkTabs(undefined, undefined, { index: this.n }); ArkTextInput(undefined, undefined, { text: this.s }); @@ -102,29 +102,29 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) }); + }, undefined, { type: ToggleType.Checkbox, isOn: this.b }); ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); ArkRefresh(undefined, undefined, { refreshing: this.b }); ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); ArkSelect((__instance: ArkSelectComponent) => { - __instance.value(_$("com.application.example", "entry", this.s)) - .selected(_$("com.application.example", "entry", this.n)); + __instance.value(this.s) + .selected(this.n); }, undefined, []); ArkList(undefined, () => { ArkListItemGroup(undefined, () => { ArkListItem((__instance: ArkListItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined, { style: this.l }); }); }); ArkGrid(undefined, () => { ArkGridItem((__instance: ArkGridItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined, {}); }); ArkButton((__instance: ArkButtonComponent) => { - __instance.bindSheet(_$("com.application.example", "entry", this.b), builder) - .bindContentCover(_$("com.application.example", "entry", this.b), builder); + __instance.bindSheet(this.b, builder) + .bindContentCover(this.b, builder); }, undefined); }); } diff --git a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts index 69d8f8347..f176b327c 100644 --- a/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkoala/spec/@builderParam.ts @@ -169,7 +169,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -191,7 +191,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Switch, isOn: _$("com.application.example", "entry", this.b) } as ToggleOptions); + }, undefined, { type: ToggleType.Switch, isOn: this.b } as ToggleOptions); ArkStepper(undefined, undefined, { index: this.n } as StepperOptions); ArkCheckbox((__instance: ArkCheckboxComponent) => { - __instance.select(_$("com.application.example", "entry", this.b)); + __instance.select(this.b); }, undefined); ArkCheckboxGroup((__instance: ArkCheckboxGroupComponent) => { - __instance.selectAll(_$("com.application.example", "entry", this.b)); + __instance.selectAll(this.b); }, undefined); ArkDatePicker((__instance: ArkDatePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("com.application.example", "entry", this.d) } as DatePickerOptions); + }, undefined, { selected: this.d } as DatePickerOptions); ArkTimePicker((__instance: ArkTimePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("com.application.example", "entry", this.d) } as TimePickerOptions); + }, undefined, { selected: this.d } as TimePickerOptions); ArkMenuItem((__instance: ArkMenuItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined); ArkPanel((__instance: ArkPanelComponent) => { - __instance.mode(_$("com.application.example", "entry", this.m)); + __instance.mode(this.m); }, undefined, false); ArkRadio((__instance: ArkRadioComponent) => { - __instance.checked(_$("com.application.example", "entry", this.b)); + __instance.checked(this.b); }, undefined, { group: "", value: "" } as RadioOptions); ArkSearch((__instance: ArkSearchComponent) => { __instance._onChangeEvent_value((value: string): void => { this.s = value; }); - }, undefined, { value: _$("com.application.example", "entry", this.s) } as SearchOptions); + }, undefined, { value: this.s } as SearchOptions); ArkSideBarContainer((__instance: ArkSideBarContainerComponent) => { - __instance.showSideBar(_$("com.application.example", "entry", this.b)); + __instance.showSideBar(this.b); }, undefined, SideBarContainerType.Embed); ArkSwiper((__instance: ArkSwiperComponent) => { - __instance.index(_$("com.application.example", "entry", this.n)); + __instance.index(this.n); }, undefined); ArkTabs(undefined, undefined, { index: this.n } as TabsOptions); ArkTextInput(undefined, undefined, { text: this.s } as TextInputOptions); @@ -104,29 +104,29 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Checkbox, isOn: _$("com.application.example", "entry", this.b) } as ToggleOptions); + }, undefined, { type: ToggleType.Checkbox, isOn: this.b } as ToggleOptions); ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n } as AlphabetIndexerOptions); ArkRefresh(undefined, undefined, { refreshing: this.b } as RefreshOptions); ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n } as TextPickerOptions); ArkSelect((__instance: ArkSelectComponent) => { - __instance.value(_$("com.application.example", "entry", this.s)) - .selected(_$("com.application.example", "entry", this.n)); + __instance.value(this.s) + .selected(this.n); }, undefined, []); ArkList(undefined, () => { ArkListItemGroup(undefined, () => { ArkListItem((__instance: ArkListItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined, { style: this.l } as ListItemOptions); }); }); ArkGrid(undefined, () => { ArkGridItem((__instance: ArkGridItemComponent) => { - __instance.selected(_$("com.application.example", "entry", this.b)); + __instance.selected(this.b); }, undefined, {} as GridItemOptions); }); ArkButton((__instance: ArkButtonComponent) => { - __instance.bindSheet(_$("com.application.example", "entry", this.b), builder) - .bindContentCover(_$("com.application.example", "entry", this.b), builder); + __instance.bindSheet(this.b, builder) + .bindContentCover(this.b, builder); }, undefined); }); } diff --git a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts index a530a8596..e8655bdeb 100644 --- a/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/arkts/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Switch, isOn: _$("", "entry", this.b) }); + }, undefined, { type: ToggleType.Switch, isOn: this.b }); ArkStepper(undefined, undefined, { index: this.n }); ArkCheckbox((__instance: ArkCheckboxComponent) => { - __instance.select(_$("", "entry", this.b)); + __instance.select(this.b); }, undefined); ArkCheckboxGroup((__instance: ArkCheckboxGroupComponent) => { - __instance.selectAll(_$("", "entry", this.b)); + __instance.selectAll(this.b); }, undefined); ArkDatePicker((__instance: ArkDatePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("", "entry", this.d) }); + }, undefined, { selected: this.d }); ArkTimePicker((__instance: ArkTimePickerComponent) => { __instance._onChangeEvent_selected((selected: Date): void => { this.d = selected; }); - }, undefined, { selected: _$("", "entry", this.d) }); + }, undefined, { selected: this.d }); ArkMenuItem((__instance: ArkMenuItemComponent) => { - __instance.selected(_$("", "entry", this.b)); + __instance.selected(this.b); }, undefined); ArkPanel((__instance: ArkPanelComponent) => { - __instance.mode(_$("", "entry", this.m)); + __instance.mode(this.m); }, undefined, false); ArkRadio((__instance: ArkRadioComponent) => { - __instance.checked(_$("", "entry", this.b)); + __instance.checked(this.b); }, undefined, { group: "", value: "" }); ArkSearch((__instance: ArkSearchComponent) => { __instance._onChangeEvent_value((value: string): void => { this.s = value; }); - }, undefined, { value: _$("", "entry", this.s) }); + }, undefined, { value: this.s }); ArkSideBarContainer((__instance: ArkSideBarContainerComponent) => { - __instance.showSideBar(_$("", "entry", this.b)); + __instance.showSideBar(this.b); }, undefined, SideBarContainerType.Embed); ArkSwiper((__instance: ArkSwiperComponent) => { - __instance.index(_$("", "entry", this.n)); + __instance.index(this.n); }, undefined); ArkTabs(undefined, undefined, { index: this.n }); ArkTextInput(undefined, undefined, { text: this.s }); @@ -104,29 +104,29 @@ class ArkDollarDollarComponent extends ArkStructBase { __instance._onChangeEvent_isOn((isOn: boolean): void => { this.b = isOn; }); - }, undefined, { type: ToggleType.Checkbox, isOn: _$("", "entry", this.b) }); + }, undefined, { type: ToggleType.Checkbox, isOn: this.b }); ArkAlphabetIndexer(undefined, undefined, { arrayValue: [], selected: this.n }); ArkRefresh(undefined, undefined, { refreshing: this.b }); ArkTextPicker(undefined, undefined, { range: [], value: this.s, selected: this.n }); ArkSelect((__instance: ArkSelectComponent) => { - __instance.value(_$("", "entry", this.s)) - .selected(_$("", "entry", this.n)); + __instance.value(this.s) + .selected(this.n); }, undefined, []); ArkList(undefined, () => { ArkListItemGroup(undefined, () => { ArkListItem((__instance: ArkListItemComponent) => { - __instance.selected(_$("", "entry", this.b)); + __instance.selected(this.b); }, undefined, { style: this.l }); }); }); ArkGrid(undefined, () => { ArkGridItem((__instance: ArkGridItemComponent) => { - __instance.selected(_$("", "entry", this.b)); + __instance.selected(this.b); }, undefined, {}); }); ArkButton((__instance: ArkButtonComponent) => { - __instance.bindSheet(_$("", "entry", this.b), builder) - .bindContentCover(_$("", "entry", this.b), builder); + __instance.bindSheet(this.b, builder) + .bindContentCover(this.b, builder); }, undefined); }); } diff --git a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts index 366c5932f..fe3d6a4ab 100644 --- a/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts +++ b/arkoala/ets-plugin/test/golden/koala/spec/@builderParam.ts @@ -171,7 +171,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase { CustomContainer(undefined, undefined, { @@ -193,7 +193,7 @@ class ArkCustomContainerUserComponent extends ArkStructBase