release logic in Column&XComponent

Signed-off-by: houhaoyu <houhaoyu@huawei.com>
Change-Id: I739f9e687592fb1f273ec36f6378d2c1f4f6fc19
This commit is contained in:
houhaoyu
2022-08-18 21:07:33 +08:00
parent 4af54783b3
commit 77c4ef2754
2 changed files with 23 additions and 8 deletions
-1
View File
@@ -1,6 +1,5 @@
{
"name": "XComponent",
"atomic": true,
"attrs": [
"id", "type", "libraryname", "onLoad", "onDestroy"
]
+23 -7
View File
@@ -94,6 +94,7 @@ import {
import { projectConfig } from '../main';
import { transformLog, contextGlobal } from './process_ui_syntax';
import { props } from './compile_info';
import { CUSTOM_COMPONENT } from '../lib/pre_define';
export function processComponentBuild(node: ts.MethodDeclaration,
log: LogInfo[]): ts.MethodDeclaration {
@@ -214,7 +215,7 @@ let sourceNode: ts.SourceFile;
export function processComponentChild(node: ts.Block | ts.SourceFile, newStatements: ts.Statement[],
log: LogInfo[], supplement: supplementType = {isAcceleratePreview: false, line: 0, column: 0, fileName: ''},
isInnerBuilder: boolean = false): void {
isInnerBuilder: boolean = false, parent: string = undefined): void {
if (supplement.isAcceleratePreview) {
newsupplement = supplement;
const compilerOptions = ts.readConfigFile(
@@ -229,11 +230,13 @@ export function processComponentChild(node: ts.Block | ts.SourceFile, newStateme
if (ts.isExpressionStatement(item)) {
checkEtsComponent(item, log);
const name: string = getName(item);
switch (getComponentType(item, log, name)) {
switch (getComponentType(item, log, name, parent)) {
case ComponentType.innerComponent:
processInnerComponent(item, newStatements, log);
parent = name;
processInnerComponent(item, newStatements, log, parent);
break;
case ComponentType.customComponent:
parent = undefined;
if (!newsupplement.isAcceleratePreview) {
if (item.expression && ts.isEtsComponentExpression(item.expression) && item.expression.body) {
const expressionResult: ts.ExpressionStatement =
@@ -246,9 +249,11 @@ export function processComponentChild(node: ts.Block | ts.SourceFile, newStateme
}
break;
case ComponentType.forEachComponent:
parent = undefined;
processForEachComponent(item, newStatements, log, isInnerBuilder);
break;
case ComponentType.customBuilderMethod:
parent = undefined;
if (INNER_CUSTOM_BUILDER_METHOD.has(name)) {
newStatements.push(addInnerBuilderParameter(item));
} else {
@@ -256,8 +261,13 @@ export function processComponentChild(node: ts.Block | ts.SourceFile, newStateme
}
break;
case ComponentType.builderParamMethod:
parent = undefined;
newStatements.push(addInnerBuilderParameter(item));
break;
case ComponentType.function:
parent = undefined;
newStatements.push(item);
break;
}
} else if (ts.isIfStatement(item)) {
processIfStatement(item, newStatements, log, isInnerBuilder);
@@ -360,7 +370,8 @@ function parseEtsComponentExpression(node: ts.ExpressionStatement): EtsComponent
return { etsComponentNode: etsComponentNode, hasAttr: hasAttr };
}
function processInnerComponent(node: ts.ExpressionStatement, newStatements: ts.Statement[], log: LogInfo[]): void {
function processInnerComponent(node: ts.ExpressionStatement, newStatements: ts.Statement[],
log: LogInfo[], parent: string = undefined): void {
const res: CreateResult = createComponent(node, COMPONENT_CREATE_FUNCTION);
newStatements.push(res.newNode);
const nameResult: NameResult = { name: null };
@@ -408,7 +419,8 @@ function processInnerComponent(node: ts.ExpressionStatement, newStatements: ts.S
if (etsComponentResult.hasAttr) {
bindComponentAttr(node, res.identifierNode, newStatements, log);
}
processComponentChild(etsComponentResult.etsComponentNode.body, newStatements, log);
processComponentChild(etsComponentResult.etsComponentNode.body, newStatements, log,
{isAcceleratePreview: false, line: 0, column: 0, fileName: ''}, false, parent);
} else {
bindComponentAttr(node, res.identifierNode, newStatements, log);
}
@@ -1288,7 +1300,8 @@ enum ComponentType {
customComponent,
forEachComponent,
customBuilderMethod,
builderParamMethod
builderParamMethod,
function
}
function isEtsComponent(node: ts.ExpressionStatement): boolean {
@@ -1304,7 +1317,7 @@ function isEtsComponent(node: ts.ExpressionStatement): boolean {
}
function getComponentType(node: ts.ExpressionStatement, log: LogInfo[],
name: string): ComponentType {
name: string, parent: string): ComponentType {
if (isEtsComponent(node)) {
if (componentCollection.customComponents.has(name)) {
return ComponentType.customComponent;
@@ -1320,6 +1333,9 @@ function getComponentType(node: ts.ExpressionStatement, log: LogInfo[],
} else if (builderParamObjectCollection.get(componentCollection.currentClassName) &&
builderParamObjectCollection.get(componentCollection.currentClassName).has(name)) {
return ComponentType.builderParamMethod;
} else if (parent === 'Column' || parent === 'XComponent' && ts.isCallExpression(node.expression) &&
ts.isIdentifier(node.expression.expression)) {
return ComponentType.function;
} else if (!isAttributeNode(node)) {
log.push({
type: LogType.ERROR,