From 9680735a30d2105d4d300ba6e87080fa64edde46 Mon Sep 17 00:00:00 2001 From: maoruihao Date: Thu, 17 Apr 2025 14:49:59 +0800 Subject: [PATCH] Optimize validateError and getRealModulePath Signed-off-by: maoruihao --- compiler/src/ets_checker.ts | 24 +++++++++++++++--------- compiler/src/process_component_build.ts | 5 ++--- compiler/src/process_component_member.ts | 9 ++++----- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/compiler/src/ets_checker.ts b/compiler/src/ets_checker.ts index 5f382fb94..5583b7d26 100644 --- a/compiler/src/ets_checker.ts +++ b/compiler/src/ets_checker.ts @@ -362,11 +362,11 @@ export function createLanguageService(rootFileNames: string[], resolveModulePath getJsDocNodeConditionCheckedResult: (jsDocFileCheckedInfo: ts.FileCheckModuleInfo, jsDocs: ts.JsDocTagInfo[]) => { return getJsDocNodeConditionCheckResult(jsDocFileCheckedInfo, jsDocs); }, - uiProps: [], + uiProps: new Set(), clearProps: function() { dollarCollection.clear(); extendCollection.clear(); - this.uiProps.length = 0; + this.uiProps = new Set(); }, // TSC will re-do resolution if this callback return true. hasInvalidatedResolutions: (filePath: string): boolean => { @@ -490,7 +490,7 @@ const allResolvedModules: Set = new Set(); export const allSourceFilePaths: Set = new Set(); // Used to collect file paths that have not been converted toUnixPath. export const allModuleIds: Set = new Set(); -export let props: string[] = []; +export let props: Set = new Set(); export let fastBuildLogger = null; @@ -568,7 +568,7 @@ export function serviceChecker(rootFileNames: string[], newLogger: Object = null } } -export function traverseProgramSourceFiles(props: string[]): void { +export function traverseProgramSourceFiles(props: Set): void { globalProgram.program.getSourceFiles().forEach((sourceFile: ts.SourceFile) => { checkUISyntax(sourceFile, sourceFile.fileName, [], props); }); @@ -931,7 +931,7 @@ function validateError(message: string): boolean { function matchMessage(message: string, nameArr: any, reg: RegExp): boolean { if (reg.test(message)) { const match: string[] = message.match(reg); - if (match[1] && nameArr.includes(match[1])) { + if (match[1] && nameArr.has(match[1])) { return true; } } @@ -1269,7 +1269,7 @@ export function watchChecker(rootFileNames: string[], newLogger: any = null, res } export function instanceInsteadThis(content: string, fileName: string, extendFunctionInfo: extendInfo[], - props: string[]): string { + props: Set): string { extendFunctionInfo.reverse().forEach((item) => { const subStr: string = content.substring(item.start, item.end); const insert: string = subStr.replace(/(\s)\$(\.)/g, (origin, item1, item2) => { @@ -1292,14 +1292,20 @@ export const dollarCollection: Set = new Set(); export const extendCollection: Set = new Set(); export const importModuleCollection: Set = new Set(); -function checkUISyntax(sourceFile: ts.SourceFile, fileName: string, extendFunctionInfo: extendInfo[], props: string[]): void { +function checkUISyntax(sourceFile: ts.SourceFile, fileName: string, extendFunctionInfo: extendInfo[], + props: Set): void { if (/\.ets$/.test(fileName) && !/\.d.ets$/.test(fileName)) { if (process.env.compileMode === 'moduleJson' || path.resolve(fileName) !== path.resolve(projectConfig.projectPath, 'app.ets')) { collectComponents(sourceFile); collectionCustomizeStyles(sourceFile); parseAllNode(sourceFile, sourceFile, extendFunctionInfo); - props.push(...dollarCollection, ...extendCollection); + dollarCollection.forEach((item) => { + props.add(item); + }); + extendCollection.forEach((item) => { + props.add(item); + }); } } } @@ -1795,7 +1801,7 @@ export function resetEtsCheckTypeScript(): void { export function resetEtsCheck(): void { cache = {}; - props = []; + props = new Set(); needReCheckForChangedDepUsers = false; resetEtsCheckTypeScript(); allResolvedModules.clear(); diff --git a/compiler/src/process_component_build.ts b/compiler/src/process_component_build.ts index 1a9dac174..a8fbbfc5a 100644 --- a/compiler/src/process_component_build.ts +++ b/compiler/src/process_component_build.ts @@ -2308,11 +2308,10 @@ function isBuilderChangeNode(argument: ts.Node, identifierNode: ts.Identifier, p } export function isWrappedBuilder(node: ts.PropertyAccessExpression): boolean { + const typeAtLocation = globalProgram.checker?.getTypeAtLocation(node.expression); if (projectConfig.minAPIVersion >= 11 && ts.isPropertyAccessExpression(node) && node.name && ts.isIdentifier(node.name) && node.name.escapedText.toString() === WRAPBUILDER_BUILDERPROP && - globalProgram.checker.getTypeAtLocation(node.expression) && - globalProgram.checker.getTypeAtLocation(node.expression).symbol && - globalProgram.checker.getTypeAtLocation(node.expression).symbol.escapedName === WRAPPEDBUILDER_CLASS) { + typeAtLocation && typeAtLocation.symbol && typeAtLocation.symbol.escapedName === WRAPPEDBUILDER_CLASS) { return true; } return false; diff --git a/compiler/src/process_component_member.ts b/compiler/src/process_component_member.ts index d43d8ac92..c1a46109a 100644 --- a/compiler/src/process_component_member.ts +++ b/compiler/src/process_component_member.ts @@ -974,11 +974,10 @@ function manageLocalStorageComponents(node: ts.CallExpression, argumentsArray: t } export function isLocalStorageParameter(node: ts.CallExpression): boolean { - return globalProgram.checker && globalProgram.checker.getResolvedSignature && - globalProgram.checker.getResolvedSignature(node) && - globalProgram.checker.getResolvedSignature(node).parameters && - globalProgram.checker.getResolvedSignature(node).parameters.length === 1 && - globalProgram.checker.getResolvedSignature(node).parameters[0].escapedName === '##storage'; + const resolvedSignature = globalProgram.checker?.getResolvedSignature ? + globalProgram.checker.getResolvedSignature(node) : undefined; + return resolvedSignature && resolvedSignature.parameters && resolvedSignature.parameters.length === 1 && + resolvedSignature.parameters[0].escapedName === '##storage'; } function componentParamRowAndColumn(line: number, col: number): ts.ObjectLiteralExpression { -- Gitee