mirror of
https://github.com/openharmony/developtools_ace-ets2bundle.git
synced 2026-07-20 00:54:09 -04:00
release logic in Column&XComponent Signed-off-by: houhaoyu <houhaoyu@huawei.com> Change-Id: I739f9e687592fb1f273ec36f6378d2c1f4f6fc19
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"name": "XComponent",
|
||||
"atomic": true,
|
||||
"attrs": [
|
||||
"id", "type", "libraryname", "onLoad", "onDestroy"
|
||||
]
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user