Create map from fileNames in referenced projects to resolvedProjectReference for quick determination of fileName to projectReferenceRedirect
This commit is contained in:
parent
79b9fa51b6
commit
979dac3ced
|
@ -683,6 +683,7 @@ namespace ts {
|
||||||
// A parallel array to projectReferences storing the results of reading in the referenced tsconfig files
|
// A parallel array to projectReferences storing the results of reading in the referenced tsconfig files
|
||||||
let resolvedProjectReferences: ReadonlyArray<ResolvedProjectReference | undefined> | undefined;
|
let resolvedProjectReferences: ReadonlyArray<ResolvedProjectReference | undefined> | undefined;
|
||||||
let projectReferenceRedirects: Map<ResolvedProjectReference | false> | undefined;
|
let projectReferenceRedirects: Map<ResolvedProjectReference | false> | undefined;
|
||||||
|
let mapFromFileToProjectReferenceRedirects: Map<Path> | undefined;
|
||||||
|
|
||||||
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
|
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
|
||||||
const structuralIsReused = tryReuseStructureFromOldProgram();
|
const structuralIsReused = tryReuseStructureFromOldProgram();
|
||||||
|
@ -2231,7 +2232,6 @@ namespace ts {
|
||||||
if (!referencedProject) {
|
if (!referencedProject) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const out = referencedProject.commandLine.options.outFile || referencedProject.commandLine.options.out;
|
const out = referencedProject.commandLine.options.outFile || referencedProject.commandLine.options.out;
|
||||||
return out ?
|
return out ?
|
||||||
changeExtension(out, Extension.Dts) :
|
changeExtension(out, Extension.Dts) :
|
||||||
|
@ -2242,16 +2242,20 @@ namespace ts {
|
||||||
* Get the referenced project if the file is input file from that reference project
|
* Get the referenced project if the file is input file from that reference project
|
||||||
*/
|
*/
|
||||||
function getResolvedProjectReferenceToRedirect(fileName: string) {
|
function getResolvedProjectReferenceToRedirect(fileName: string) {
|
||||||
return forEachResolvedProjectReference((referencedProject, referenceProjectPath) => {
|
if (mapFromFileToProjectReferenceRedirects === undefined) {
|
||||||
// not input file from the referenced project, ignore
|
mapFromFileToProjectReferenceRedirects = createMap();
|
||||||
if (!referencedProject ||
|
forEachResolvedProjectReference((referencedProject, referenceProjectPath) => {
|
||||||
toPath(options.configFilePath!) === referenceProjectPath ||
|
// not input file from the referenced project, ignore
|
||||||
!contains(referencedProject.commandLine.fileNames, fileName, isSameFile)) {
|
if (referencedProject &&
|
||||||
return undefined;
|
toPath(options.configFilePath!) !== referenceProjectPath) {
|
||||||
}
|
referencedProject.commandLine.fileNames.forEach(f =>
|
||||||
|
mapFromFileToProjectReferenceRedirects!.set(toPath(f), referenceProjectPath));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return referencedProject;
|
const referencedProjectPath = mapFromFileToProjectReferenceRedirects.get(toPath(fileName));
|
||||||
});
|
return referencedProjectPath && getResolvedProjectReferenceByPath(referencedProjectPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function forEachResolvedProjectReference<T>(
|
function forEachResolvedProjectReference<T>(
|
||||||
|
|
Loading…
Reference in a new issue