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() {