Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ddded2d

Browse filesBrowse files
authored
Merge pull request microsoft#28610 from Microsoft/resolvedReferencedDirectMap
Create map from fileNames in referenced projects to resolvedProjectReference for quick determination of fileName to projectReferenceRedirect
2 parents 0776948 + 979dac3 commit ddded2d
Copy full SHA for ddded2d

1 file changed

+14-10Lines changed: 14 additions & 10 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/program.ts‎

Copy file name to clipboardExpand all lines: src/compiler/program.ts
+14-10Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ namespace ts {
683683
// A parallel array to projectReferences storing the results of reading in the referenced tsconfig files
684684
let resolvedProjectReferences: ReadonlyArray<ResolvedProjectReference | undefined> | undefined;
685685
let projectReferenceRedirects: Map<ResolvedProjectReference | false> | undefined;
686+
let mapFromFileToProjectReferenceRedirects: Map<Path> | undefined;
686687

687688
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
688689
const structuralIsReused = tryReuseStructureFromOldProgram();
@@ -2231,7 +2232,6 @@ namespace ts {
22312232
if (!referencedProject) {
22322233
return undefined;
22332234
}
2234-
22352235
const out = referencedProject.commandLine.options.outFile || referencedProject.commandLine.options.out;
22362236
return out ?
22372237
changeExtension(out, Extension.Dts) :
@@ -2242,16 +2242,20 @@ namespace ts {
22422242
* Get the referenced project if the file is input file from that reference project
22432243
*/
22442244
function getResolvedProjectReferenceToRedirect(fileName: string) {
2245-
return forEachResolvedProjectReference((referencedProject, referenceProjectPath) => {
2246-
// not input file from the referenced project, ignore
2247-
if (!referencedProject ||
2248-
toPath(options.configFilePath!) === referenceProjectPath ||
2249-
!contains(referencedProject.commandLine.fileNames, fileName, isSameFile)) {
2250-
return undefined;
2251-
}
2245+
if (mapFromFileToProjectReferenceRedirects === undefined) {
2246+
mapFromFileToProjectReferenceRedirects = createMap();
2247+
forEachResolvedProjectReference((referencedProject, referenceProjectPath) => {
2248+
// not input file from the referenced project, ignore
2249+
if (referencedProject &&
2250+
toPath(options.configFilePath!) !== referenceProjectPath) {
2251+
referencedProject.commandLine.fileNames.forEach(f =>
2252+
mapFromFileToProjectReferenceRedirects!.set(toPath(f), referenceProjectPath));
2253+
}
2254+
});
2255+
}
22522256

2253-
return referencedProject;
2254-
});
2257+
const referencedProjectPath = mapFromFileToProjectReferenceRedirects.get(toPath(fileName));
2258+
return referencedProjectPath && getResolvedProjectReferenceByPath(referencedProjectPath);
22552259
}
22562260

22572261
function forEachResolvedProjectReference<T>(

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.