diff --git a/compiler/main.js b/compiler/main.js index 84829165dc394b6dca6d39c3073cfe8f3558319e..cd902953ca031bb205e5a64d04ae8e92d5f6562e 100644 --- a/compiler/main.js +++ b/compiler/main.js @@ -307,9 +307,12 @@ function processResourceArr(resourceArr, resourceMap, filePath) { } } +const globalProgram = { program: null }; + +exports.globalProgram = globalProgram; exports.projectConfig = projectConfig; exports.loadEntryObj = loadEntryObj; exports.readAppResource = readAppResource; exports.resources = resources; exports.loadWorker = loadWorker; -exports.abilityConfig = abilityConfig; \ No newline at end of file +exports.abilityConfig = abilityConfig; diff --git a/compiler/src/compile_info.ts b/compiler/src/compile_info.ts index a599f7f792be2ca1c5c1437c710536be90160bda..201c44b79a4a2a048388a8ffb383a1a70c8e7c0b 100644 --- a/compiler/src/compile_info.ts +++ b/compiler/src/compile_info.ts @@ -40,6 +40,7 @@ import { decoratorParamsCollection, extendCollection } from './ets_checker'; +import { globalProgram } from '../main'; configure({ appenders: { 'ETS': {type: 'stderr', layout: {type: 'messagePassThrough'}}}, @@ -136,13 +137,17 @@ export class ResultStates { }); }); - compiler.hooks.run.tapPromise('CheckSyntax', async(compiler) => { + compiler.hooks.beforeRun.tap('beforeRun', () => { const rootFileNames: string[] = []; Object.values(projectConfig.entryObj).forEach((fileName: string) => { rootFileNames.push(fileName.replace('?entry', '')); }); const languageService: ts.LanguageService = createLanguageService(rootFileNames); - const rootProgram: ts.Program = languageService.getProgram(); + globalProgram.program = languageService.getProgram(); + }); + + compiler.hooks.run.tapPromise('CheckSyntax', async(compiler) => { + const rootProgram: ts.Program = globalProgram.program; props.push(...dollarCollection, ...decoratorParamsCollection, ...extendCollection); let allDiagnostics: ts.Diagnostic[] = rootProgram .getSyntacticDiagnostics() diff --git a/compiler/src/process_component_member.ts b/compiler/src/process_component_member.ts index 77ddab7d4e8dbd827a2f642c0f7a354fa478884c..a4ca48e9c8f772e3468873598f0baf934c5e1a83 100644 --- a/compiler/src/process_component_member.ts +++ b/compiler/src/process_component_member.ts @@ -75,6 +75,7 @@ import { createReference, isProperty } from './process_component_class'; +import { globalProgram } from '../main'; export type ControllerType = { hasController: boolean @@ -741,7 +742,9 @@ function isForbiddenUseStateType(typeNode: ts.TypeNode): boolean { export function isSimpleType(typeNode: ts.TypeNode, program: ts.Program): boolean { let checker: ts.TypeChecker; - if (program) { + if (globalProgram.program) { + checker = globalProgram.program.getTypeChecker(); + } else if (program) { checker = program.getTypeChecker(); } const enumType: ts.SyntaxKind = getEnumType(typeNode, checker);