From 848e5db646e6b0f994cb2c7520c2b5ab1ec25aa1 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Thu, 14 Aug 2014 17:57:17 -0700 Subject: [PATCH] defer creation of fullTypeCheckChecker --- src/services/services.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index d426c7c7905..f1a8960c54b 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1259,7 +1259,8 @@ module ts { // this checker is used to answer all LS questions except errors var typeInfoResolver: TypeChecker; // the sole purpose of this checkes is to reutrn semantic diagnostics - var fullTypeCheckChecker: TypeChecker; + // creation is deferred - use getFullTypeCheckChecker to get instance + var fullTypeCheckChecker_doNotAccessDirectly: TypeChecker; var useCaseSensitivefilenames = false; var sourceFilesByName: Map = {}; var documentRegistry = documentRegistry; @@ -1275,6 +1276,10 @@ module ts { return lookUp(sourceFilesByName, filename); } + function getFullTypeCheckChecker() { + return fullTypeCheckChecker_doNotAccessDirectly || (fullTypeCheckChecker_doNotAccessDirectly = program.getTypeChecker(/*fullTypeCheck*/ true)); + } + function createCompilerHost(): CompilerHost { return { getSourceFile: (filename, languageVersion) => { @@ -1407,7 +1412,7 @@ module ts { // Now create a new compiler program = createProgram(hostfilenames, compilationSettings, createCompilerHost()); typeInfoResolver = program.getTypeChecker(/*fullTypeCheckMode*/ false); - fullTypeCheckChecker = program.getTypeChecker(/*fullTypeCheckMode*/ true); + fullTypeCheckChecker_doNotAccessDirectly = undefined; } /// Clean up any semantic caches that are not needed. @@ -1416,7 +1421,7 @@ module ts { function cleanupSemanticCache(): void { if (program) { typeInfoResolver = program.getTypeChecker(/*fullTypeCheckMode*/ false); - fullTypeCheckChecker = program.getTypeChecker(/*fullTypeCheckMode*/ true); + fullTypeCheckChecker_doNotAccessDirectly = undefined; } } @@ -1441,7 +1446,7 @@ module ts { filename = TypeScript.switchToForwardSlashes(filename) - return fullTypeCheckChecker.getDiagnostics(getSourceFile(filename)); + return getFullTypeCheckChecker().getDiagnostics(getSourceFile(filename)); } function getCompilerOptionsDiagnostics() {