mirror of
https://github.com/openharmony/developtools_ace-ets2bundle.git
synced 2026-07-21 12:05:24 -04:00
fix constructor with ts type Signed-off-by: houhaoyu <houhaoyu@huawei.com> Change-Id: I7f31c0a5102b40fbae74b39ac0afb5dc90760e7e
This commit is contained in:
@@ -20,7 +20,9 @@ import {
|
||||
COMPONENT_CONSTRUCTOR_PARENT,
|
||||
COMPONENT_CONSTRUCTOR_PARAMS,
|
||||
COMPONENT_CONSTRUCTOR_UPDATE_PARAMS,
|
||||
COMPONENT_WATCH_FUNCTION
|
||||
COMPONENT_WATCH_FUNCTION,
|
||||
BASE_COMPONENT_NAME,
|
||||
INTERFACE_NAME_SUFFIX
|
||||
} from './pre_define';
|
||||
|
||||
export function getInitConstructor(members: ts.NodeArray<ts.Node>): ts.ConstructorDeclaration {
|
||||
@@ -34,7 +36,7 @@ export function getInitConstructor(members: ts.NodeArray<ts.Node>): ts.Construct
|
||||
}
|
||||
|
||||
export function updateConstructor(ctorNode: ts.ConstructorDeclaration,
|
||||
para: ts.ParameterDeclaration[], addStatements: ts.Statement[], isSuper: boolean = false):
|
||||
para: ts.ParameterDeclaration[], addStatements: ts.Statement[], isSuper: boolean = false, isAdd: boolean = false, parentComponentName?: ts.Identifier):
|
||||
ts.ConstructorDeclaration {
|
||||
let modifyPara: ts.ParameterDeclaration[];
|
||||
if (para && para.length) {
|
||||
@@ -55,8 +57,13 @@ export function updateConstructor(ctorNode: ts.ConstructorDeclaration,
|
||||
}
|
||||
}
|
||||
if (ctorNode) {
|
||||
let ctorPara: ts.ParameterDeclaration[] | ts.NodeArray<ts.ParameterDeclaration> =
|
||||
modifyPara || ctorNode.parameters;
|
||||
if (isAdd) {
|
||||
ctorPara = addParamsType(ctorNode, modifyPara, parentComponentName);
|
||||
}
|
||||
ctorNode = ts.factory.updateConstructorDeclaration(ctorNode, ctorNode.decorators,
|
||||
ctorNode.modifiers, modifyPara || ctorNode.parameters,
|
||||
ctorNode.modifiers, ctorPara,
|
||||
ts.factory.createBlock(modifyBody || ctorNode.body.statements, true));
|
||||
}
|
||||
return ctorNode;
|
||||
@@ -80,6 +87,37 @@ function initConstructorParams(node: ts.ConstructorDeclaration): ts.ConstructorD
|
||||
node.body);
|
||||
}
|
||||
|
||||
function addParamsType(ctorNode: ts.ConstructorDeclaration, modifyPara: ts.ParameterDeclaration[],
|
||||
parentComponentName: ts.Identifier): ts.ParameterDeclaration[] {
|
||||
const tsPara: ts.ParameterDeclaration[] | ts.NodeArray<ts.ParameterDeclaration> =
|
||||
modifyPara || ctorNode.parameters;
|
||||
const newTSPara: ts.ParameterDeclaration[] = [];
|
||||
tsPara.forEach((item) => {
|
||||
let parameter: ts.ParameterDeclaration = item;
|
||||
switch (item.name.escapedText) {
|
||||
case COMPONENT_CONSTRUCTOR_ID:
|
||||
parameter = ts.factory.updateParameterDeclaration(item, item.decorators, item.modifiers,
|
||||
item.dotDotDotToken, item.name, item.questionToken,
|
||||
ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), item.initializer);
|
||||
break;
|
||||
case COMPONENT_CONSTRUCTOR_PARENT:
|
||||
parameter = ts.factory.createParameterDeclaration(item.decorators, item.modifiers,
|
||||
item.dotDotDotToken, item.name, item.questionToken,
|
||||
ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(BASE_COMPONENT_NAME), undefined),
|
||||
item.initializer);
|
||||
break;
|
||||
case COMPONENT_CONSTRUCTOR_PARAMS:
|
||||
parameter = ts.factory.updateParameterDeclaration(item, item.decorators, item.modifiers,
|
||||
item.dotDotDotToken, item.name, item.questionToken,
|
||||
ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(
|
||||
parentComponentName.getText() + INTERFACE_NAME_SUFFIX), undefined), item.initializer);
|
||||
break;
|
||||
}
|
||||
newTSPara.push(parameter);
|
||||
})
|
||||
return newTSPara;
|
||||
}
|
||||
|
||||
export function addConstructor(ctorNode: any, watchMap: Map<string, ts.Node>,
|
||||
parentComponentName: ts.Identifier): ts.ConstructorDeclaration {
|
||||
const watchStatements: ts.ExpressionStatement[] = [];
|
||||
@@ -109,5 +147,5 @@ export function addConstructor(ctorNode: any, watchMap: Map<string, ts.Node>,
|
||||
ts.factory.createThis(), ts.factory.createIdentifier(COMPONENT_CONSTRUCTOR_UPDATE_PARAMS)),
|
||||
undefined, [ts.factory.createIdentifier(COMPONENT_CONSTRUCTOR_PARAMS)]));
|
||||
return updateConstructor(updateConstructor(ctorNode, [], [callSuperStatement], true), [],
|
||||
[updateWithValueParamsStatement, ...watchStatements], false);
|
||||
[updateWithValueParamsStatement, ...watchStatements], false, true, parentComponentName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user