diff --git a/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel b/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel index 62ace8b72ce..d89d3aa232f 100644 --- a/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel @@ -17,6 +17,7 @@ ts_library( "//packages/compiler-cli/src/ngtsc/indexer", "//packages/compiler-cli/src/ngtsc/perf", "//packages/compiler-cli/src/ngtsc/reflection", + "//packages/compiler-cli/src/ngtsc/shims", "//packages/compiler-cli/src/ngtsc/translator", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", diff --git a/packages/compiler-cli/src/ngtsc/transform/src/compilation.ts b/packages/compiler-cli/src/ngtsc/transform/src/compilation.ts index f2b269f7ba7..6141d3cadb3 100644 --- a/packages/compiler-cli/src/ngtsc/transform/src/compilation.ts +++ b/packages/compiler-cli/src/ngtsc/transform/src/compilation.ts @@ -15,6 +15,7 @@ import {SemanticDepGraphUpdater, SemanticSymbol} from '../../incremental/semanti import {IndexingContext} from '../../indexer'; import {PerfEvent, PerfRecorder} from '../../perf'; import {ClassDeclaration, DeclarationNode, Decorator, isNamedClassDeclaration, ReflectionHost} from '../../reflection'; +import {isShim} from '../../shims'; import {ProgramTypeCheckAdapter, TypeCheckContext} from '../../typecheck/api'; import {ExtendedTemplateChecker} from '../../typecheck/extended/api'; import {getSourceFile, isExported} from '../../util/src/typescript'; @@ -118,7 +119,7 @@ export class TraitCompiler implements ProgramTypeCheckAdapter { private analyze(sf: ts.SourceFile, preanalyze: true): Promise|undefined; private analyze(sf: ts.SourceFile, preanalyze: boolean): Promise|undefined { // We shouldn't analyze declaration files. - if (sf.isDeclarationFile) { + if (sf.isDeclarationFile || isShim(sf)) { return undefined; } @@ -153,6 +154,13 @@ export class TraitCompiler implements ProgramTypeCheckAdapter { visit(sf); + if (!this.fileToClasses.has(sf)) { + // If no traits were detected in the source file we record the source file itself to not have + // any traits, such that analysis of the source file can be skipped during incremental + // rebuilds. + this.filesWithoutTraits.add(sf); + } + if (preanalyze && promises.length > 0) { return Promise.all(promises).then(() => undefined as void); } else {