@@ -683,6 +683,7 @@ namespace ts {
683
683
// A parallel array to projectReferences storing the results of reading in the referenced tsconfig files
684
684
let resolvedProjectReferences : ReadonlyArray < ResolvedProjectReference | undefined > | undefined ;
685
685
let projectReferenceRedirects : Map < ResolvedProjectReference | false > | undefined ;
686
+ let mapFromFileToProjectReferenceRedirects : Map < Path > | undefined ;
686
687
687
688
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles ( oldProgram , options ) ;
688
689
const structuralIsReused = tryReuseStructureFromOldProgram ( ) ;
@@ -2231,7 +2232,6 @@ namespace ts {
2231
2232
if ( ! referencedProject ) {
2232
2233
return undefined ;
2233
2234
}
2234
-
2235
2235
const out = referencedProject . commandLine . options . outFile || referencedProject . commandLine . options . out ;
2236
2236
return out ?
2237
2237
changeExtension ( out , Extension . Dts ) :
@@ -2242,16 +2242,20 @@ namespace ts {
2242
2242
* Get the referenced project if the file is input file from that reference project
2243
2243
*/
2244
2244
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
+ }
2252
2256
2253
- return referencedProject ;
2254
- } ) ;
2257
+ const referencedProjectPath = mapFromFileToProjectReferenceRedirects . get ( toPath ( fileName ) ) ;
2258
+ return referencedProjectPath && getResolvedProjectReferenceByPath ( referencedProjectPath ) ;
2255
2259
}
2256
2260
2257
2261
function forEachResolvedProjectReference < T > (
0 commit comments