From c03b623f856386102d70313a303485b9200930c6 Mon Sep 17 00:00:00 2001 From: bojiang Date: Mon, 18 Jul 2022 21:14:09 +0800 Subject: [PATCH 1/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @Builder @State 无法使用其他装饰器 Signed-off-by: bojiang Change-Id: Ia062d5520eb977ad9c62043e0b9f3bf36deaf452 --- compiler/src/process_component_class.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/src/process_component_class.ts b/compiler/src/process_component_class.ts index f1b6087..17016e5 100644 --- a/compiler/src/process_component_class.ts +++ b/compiler/src/process_component_class.ts @@ -300,7 +300,14 @@ function processComponentMethod(node: ts.MethodDeclaration, parentComponentName: node.type, processComponentBlock(node.body, false, log, true)); } else if (hasDecorator(node, COMPONENT_BUILDER_DECORATOR)) { CUSTOM_BUILDER_METHOD.add(name); - const builderNode: ts.MethodDeclaration = ts.factory.updateMethodDeclaration(node, undefined, node.modifiers, + let unknownBuilderDecorator: ts.Decorator[] = []; + if (Array.isArray(node.decorators)) { + unknownBuilderDecorator = node.decorators.filter((item) => { + return item.getText().replace(/\(.*\)$/, '').trim() !== COMPONENT_BUILDER_DECORATOR; + }) + } + const removeBuilderDecorator: ts.Decorator[] = node.decorators.length === 1 ? undefined : unknownBuilderDecorator; + const builderNode: ts.MethodDeclaration = ts.factory.updateMethodDeclaration(node, removeBuilderDecorator, node.modifiers, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, processComponentBlock(node.body, false, log)); updateItem = processBuildMember(builderNode, context, log); From 6d6b89acb68f78d5934d874160f8e353493f8a30 Mon Sep 17 00:00:00 2001 From: bojiang Date: Wed, 20 Jul 2022 11:05:27 +0800 Subject: [PATCH 2/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add Refresh parameter refreshing 双向绑定 Signed-off-by: bojiang Change-Id: I67f0c872825df922a81181d30172038c11a1f095 --- compiler/src/ets_checker.ts | 9 +++++---- compiler/src/pre_define.ts | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/compiler/src/ets_checker.ts b/compiler/src/ets_checker.ts index 66fb980..d494022 100644 --- a/compiler/src/ets_checker.ts +++ b/compiler/src/ets_checker.ts @@ -33,7 +33,8 @@ import { COMPONENT_BUILD_FUNCTION, STYLE_ADD_DOUBLE_DOLLAR, $$, - PROPERTIES_ADD_DOUBLE_DOLLAR + PROPERTIES_ADD_DOUBLE_DOLLAR, + REFRESH } from './pre_define'; import { JS_BIND_COMPONENTS } from './component_map'; import { getName } from './process_component_build'; @@ -291,7 +292,7 @@ function traverseBuild(node: ts.Node, index: number): void { parentComponentName = node.parent.statements[index - 1].expression.expression.escapedText; } node = node.expression; - if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body)) { + if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && node.expression.escapedText !== REFRESH) { node.body.statements.forEach((item, indexBlock) => { traverseBuild(item, indexBlock); }); @@ -322,8 +323,8 @@ function loopNodeFindDoubleDollar(node: ts.Node, parentComponentName: string): v doubleDollarCollection(item); }); } - } else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments - && node.arguments.length) { + } else if ((ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments + && node.arguments.length) || (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && node.expression.escapedText === REFRESH)) { node.arguments.forEach((item: ts.Node) => { if (ts.isObjectLiteralExpression(item) && item.properties && item.properties.length) { item.properties.forEach((param: ts.Node) => { diff --git a/compiler/src/pre_define.ts b/compiler/src/pre_define.ts index 20dfabd..3fcca50 100644 --- a/compiler/src/pre_define.ts +++ b/compiler/src/pre_define.ts @@ -215,6 +215,8 @@ export const RADIO: string = 'Radio'; export const $$_VALUE: string = 'value'; export const $$_CHANGE_EVENT: string = 'changeEvent'; export const TEXT_TIMER: string = 'TextTimer'; +export const REFRESH: string = 'Refresh'; +export const REFRESHING: string = 'refreshing'; export const FORMAT: string = 'format'; export const IS_COUNT_DOWN: string = 'isCountDown'; export const COUNT: string = 'count'; @@ -225,7 +227,7 @@ export const $$_VISIBILITY: string = 'visibility'; export const STYLE_ADD_DOUBLE_DOLLAR: Set = new Set([BIND_POPUP, $$_VISIBILITY]); export const PROPERTIES_ADD_DOUBLE_DOLLAR: Map> = new Map([ - [RADIO, new Set([CHECKED])], [TEXT_TIMER, new Set([FORMAT, COUNT, IS_COUNT_DOWN])] + [RADIO, new Set([CHECKED])], [TEXT_TIMER,new Set([FORMAT, COUNT, IS_COUNT_DOWN])], [REFRESH,new Set([REFRESHING])] ]); export const INTERFACE_NAME_SUFFIX:string = '_Params'; From 62aa7f196e80d78851e9865e7110ee9515358fb0 Mon Sep 17 00:00:00 2001 From: bojiang Date: Wed, 20 Jul 2022 11:23:09 +0800 Subject: [PATCH 3/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add Refresh parameter refreshing 双向绑定 Signed-off-by: bojiang Change-Id: I4521f3c4da934d7b964618a6fcee22d1e007f5a5 --- compiler/src/pre_define.ts | 2 +- compiler/src/process_component_class.ts | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/compiler/src/pre_define.ts b/compiler/src/pre_define.ts index 3fcca50..f24caaa 100644 --- a/compiler/src/pre_define.ts +++ b/compiler/src/pre_define.ts @@ -227,7 +227,7 @@ export const $$_VISIBILITY: string = 'visibility'; export const STYLE_ADD_DOUBLE_DOLLAR: Set = new Set([BIND_POPUP, $$_VISIBILITY]); export const PROPERTIES_ADD_DOUBLE_DOLLAR: Map> = new Map([ - [RADIO, new Set([CHECKED])], [TEXT_TIMER,new Set([FORMAT, COUNT, IS_COUNT_DOWN])], [REFRESH,new Set([REFRESHING])] + [RADIO, new Set([CHECKED])], [TEXT_TIMER, new Set([FORMAT, COUNT, IS_COUNT_DOWN])], [REFRESH, new Set([REFRESHING])] ]); export const INTERFACE_NAME_SUFFIX:string = '_Params'; diff --git a/compiler/src/process_component_class.ts b/compiler/src/process_component_class.ts index 17016e5..f1b6087 100644 --- a/compiler/src/process_component_class.ts +++ b/compiler/src/process_component_class.ts @@ -300,14 +300,7 @@ function processComponentMethod(node: ts.MethodDeclaration, parentComponentName: node.type, processComponentBlock(node.body, false, log, true)); } else if (hasDecorator(node, COMPONENT_BUILDER_DECORATOR)) { CUSTOM_BUILDER_METHOD.add(name); - let unknownBuilderDecorator: ts.Decorator[] = []; - if (Array.isArray(node.decorators)) { - unknownBuilderDecorator = node.decorators.filter((item) => { - return item.getText().replace(/\(.*\)$/, '').trim() !== COMPONENT_BUILDER_DECORATOR; - }) - } - const removeBuilderDecorator: ts.Decorator[] = node.decorators.length === 1 ? undefined : unknownBuilderDecorator; - const builderNode: ts.MethodDeclaration = ts.factory.updateMethodDeclaration(node, removeBuilderDecorator, node.modifiers, + const builderNode: ts.MethodDeclaration = ts.factory.updateMethodDeclaration(node, undefined, node.modifiers, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, processComponentBlock(node.body, false, log)); updateItem = processBuildMember(builderNode, context, log); From 7837303c15150a5e09c56358ed8fd45daed86c4f Mon Sep 17 00:00:00 2001 From: bojiang Date: Thu, 21 Jul 2022 21:01:25 +0800 Subject: [PATCH 4/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码规范化 Signed-off-by: bojiang Change-Id: I3ee6d13907f5a5b9f1de129c87cda0c78590d671 --- compiler/src/ets_checker.ts | 17 +++++++++++++---- compiler/src/pre_define.ts | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/compiler/src/ets_checker.ts b/compiler/src/ets_checker.ts index d494022..69bdb2a 100644 --- a/compiler/src/ets_checker.ts +++ b/compiler/src/ets_checker.ts @@ -34,7 +34,7 @@ import { STYLE_ADD_DOUBLE_DOLLAR, $$, PROPERTIES_ADD_DOUBLE_DOLLAR, - REFRESH + BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR } from './pre_define'; import { JS_BIND_COMPONENTS } from './component_map'; import { getName } from './process_component_build'; @@ -292,7 +292,8 @@ function traverseBuild(node: ts.Node, index: number): void { parentComponentName = node.parent.statements[index - 1].expression.expression.escapedText; } node = node.expression; - if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && node.expression.escapedText !== REFRESH) { + if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && + !BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR.has(node.expression.escapedText.toString())) { node.body.statements.forEach((item, indexBlock) => { traverseBuild(item, indexBlock); }); @@ -313,6 +314,15 @@ function traverseBuild(node: ts.Node, index: number): void { } } +function isPropertiesAddDoubleDollar(node: ts.Node): boolean { + if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments && node.arguments.length) { + return true; + } + if(ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && + BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR.has(node.expression.escapedText.toString())) { + return true; + } +} function loopNodeFindDoubleDollar(node: ts.Node, parentComponentName: string): void { while (node) { if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) { @@ -323,8 +333,7 @@ function loopNodeFindDoubleDollar(node: ts.Node, parentComponentName: string): v doubleDollarCollection(item); }); } - } else if ((ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments - && node.arguments.length) || (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && node.expression.escapedText === REFRESH)) { + } else if (Boolean(isPropertiesAddDoubleDollar(node))) { node.arguments.forEach((item: ts.Node) => { if (ts.isObjectLiteralExpression(item) && item.properties && item.properties.length) { item.properties.forEach((param: ts.Node) => { diff --git a/compiler/src/pre_define.ts b/compiler/src/pre_define.ts index f24caaa..93b0b29 100644 --- a/compiler/src/pre_define.ts +++ b/compiler/src/pre_define.ts @@ -224,7 +224,7 @@ export const $$_THIS: string = '$$this'; export const $$_NEW_VALUE: string = 'newValue'; export const $$: string = '$$'; export const $$_VISIBILITY: string = 'visibility'; - +export const BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR: Set = new Set([REFRESH]); export const STYLE_ADD_DOUBLE_DOLLAR: Set = new Set([BIND_POPUP, $$_VISIBILITY]); export const PROPERTIES_ADD_DOUBLE_DOLLAR: Map> = new Map([ [RADIO, new Set([CHECKED])], [TEXT_TIMER, new Set([FORMAT, COUNT, IS_COUNT_DOWN])], [REFRESH, new Set([REFRESHING])] From 7811bca13dacbe58c9890134dafd3978e9a22e48 Mon Sep 17 00:00:00 2001 From: bojiang Date: Fri, 22 Jul 2022 10:36:47 +0800 Subject: [PATCH 5/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 变量名修改 Signed-off-by: bojiang Change-Id: I4039a0daf7dce338d71426f829a834e93f86d51d --- compiler/src/ets_checker.ts | 6 +++--- compiler/src/pre_define.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler/src/ets_checker.ts b/compiler/src/ets_checker.ts index 69bdb2a..f0112d6 100644 --- a/compiler/src/ets_checker.ts +++ b/compiler/src/ets_checker.ts @@ -34,7 +34,7 @@ import { STYLE_ADD_DOUBLE_DOLLAR, $$, PROPERTIES_ADD_DOUBLE_DOLLAR, - BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR + $$_BLOCK_INTERFACE } from './pre_define'; import { JS_BIND_COMPONENTS } from './component_map'; import { getName } from './process_component_build'; @@ -293,7 +293,7 @@ function traverseBuild(node: ts.Node, index: number): void { } node = node.expression; if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && - !BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR.has(node.expression.escapedText.toString())) { + !$$_BLOCK_INTERFACE.has(node.expression.escapedText.toString())) { node.body.statements.forEach((item, indexBlock) => { traverseBuild(item, indexBlock); }); @@ -319,7 +319,7 @@ function isPropertiesAddDoubleDollar(node: ts.Node): boolean { return true; } if(ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && - BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR.has(node.expression.escapedText.toString())) { + $$_BLOCK_INTERFACE.has(node.expression.escapedText.toString())) { return true; } } diff --git a/compiler/src/pre_define.ts b/compiler/src/pre_define.ts index 93b0b29..b89e5d5 100644 --- a/compiler/src/pre_define.ts +++ b/compiler/src/pre_define.ts @@ -224,7 +224,7 @@ export const $$_THIS: string = '$$this'; export const $$_NEW_VALUE: string = 'newValue'; export const $$: string = '$$'; export const $$_VISIBILITY: string = 'visibility'; -export const BLOCK_INTERFACE_PROPERTIES_ADD_DOUBLE_DOLLAR: Set = new Set([REFRESH]); +export const $$_BLOCK_INTERFACE: Set = new Set([REFRESH]); export const STYLE_ADD_DOUBLE_DOLLAR: Set = new Set([BIND_POPUP, $$_VISIBILITY]); export const PROPERTIES_ADD_DOUBLE_DOLLAR: Map> = new Map([ [RADIO, new Set([CHECKED])], [TEXT_TIMER, new Set([FORMAT, COUNT, IS_COUNT_DOWN])], [REFRESH, new Set([REFRESHING])] From 9a43ebd22539a86dcc77d9a0c854edaafcc76431 Mon Sep 17 00:00:00 2001 From: bojiang Date: Fri, 22 Jul 2022 11:00:08 +0800 Subject: [PATCH 6/6] jiangbo91@huawei.com MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码规划 Signed-off-by: bojiang Change-Id: I4df05be6720d7f5a0f1492cd6c5e576ade97bb4e --- compiler/src/ets_checker.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/compiler/src/ets_checker.ts b/compiler/src/ets_checker.ts index f0112d6..1c4ea0f 100644 --- a/compiler/src/ets_checker.ts +++ b/compiler/src/ets_checker.ts @@ -17,9 +17,9 @@ import fs from 'fs'; import path from 'path'; import * as ts from 'typescript'; -import { +import { projectConfig, - systemModules + systemModules } from '../main'; import { processSystemApi, @@ -292,7 +292,7 @@ function traverseBuild(node: ts.Node, index: number): void { parentComponentName = node.parent.statements[index - 1].expression.expression.escapedText; } node = node.expression; - if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && + if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && !$$_BLOCK_INTERFACE.has(node.expression.escapedText.toString())) { node.body.statements.forEach((item, indexBlock) => { traverseBuild(item, indexBlock); @@ -316,11 +316,12 @@ function traverseBuild(node: ts.Node, index: number): void { function isPropertiesAddDoubleDollar(node: ts.Node): boolean { if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.arguments && node.arguments.length) { - return true; - } - if(ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && - $$_BLOCK_INTERFACE.has(node.expression.escapedText.toString())) { return true; + } else if (ts.isEtsComponentExpression(node) && node.body && ts.isBlock(node.body) && + $$_BLOCK_INTERFACE.has(node.expression.escapedText.toString())) { + return true; + } else { + return false; } } function loopNodeFindDoubleDollar(node: ts.Node, parentComponentName: string): void { @@ -333,7 +334,7 @@ function loopNodeFindDoubleDollar(node: ts.Node, parentComponentName: string): v doubleDollarCollection(item); }); } - } else if (Boolean(isPropertiesAddDoubleDollar(node))) { + } else if (isPropertiesAddDoubleDollar(node)) { node.arguments.forEach((item: ts.Node) => { if (ts.isObjectLiteralExpression(item) && item.properties && item.properties.length) { item.properties.forEach((param: ts.Node) => {