@@ -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