[FIR] Properly setup search scope for IC symbol provider
This commit is contained in:
committed by
TeamCityServer
parent
6e4cc49f1d
commit
ff3f3d2f9b
+18
-2
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.backend.jvm.FirJvmBackendExtension
|
|||||||
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactory.createSessionWithDependencies
|
import org.jetbrains.kotlin.fir.session.FirSessionFactory.createSessionWithDependencies
|
||||||
|
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
|
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider
|
||||||
import org.jetbrains.kotlin.modules.Module
|
import org.jetbrains.kotlin.modules.Module
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
@@ -88,15 +89,30 @@ object FirKotlinToJvmBytecodeCompiler {
|
|||||||
val sourceScope = GlobalSearchScope.filesWithoutLibrariesScope(project, ktFiles.map { it.virtualFile })
|
val sourceScope = GlobalSearchScope.filesWithoutLibrariesScope(project, ktFiles.map { it.virtualFile })
|
||||||
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
|
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
|
||||||
|
|
||||||
val librariesScope = ProjectScope.getLibrariesScope(project)
|
var librariesScope = ProjectScope.getLibrariesScope(project)
|
||||||
|
|
||||||
val providerAndScopeForIncrementalCompilation = run {
|
val providerAndScopeForIncrementalCompilation = run {
|
||||||
if (targetIds == null || incrementalComponents == null) return@run null
|
if (targetIds == null || incrementalComponents == null) return@run null
|
||||||
|
val fileSystem = environment.projectEnvironment.environment.localFileSystem
|
||||||
|
val directoryWithIncrementalPartsFromPreviousCompilation =
|
||||||
|
moduleConfiguration[JVMConfigurationKeys.OUTPUT_DIRECTORY]
|
||||||
|
?: return@run null
|
||||||
|
val previouslyCompiledFiles = directoryWithIncrementalPartsFromPreviousCompilation.walk()
|
||||||
|
.filter { it.extension == "class" }
|
||||||
|
.mapNotNull { fileSystem.findFileByIoFile(it) }
|
||||||
|
.toList()
|
||||||
|
.takeIf { it.isNotEmpty() }
|
||||||
|
?: return@run null
|
||||||
val packagePartProvider = IncrementalPackagePartProvider(
|
val packagePartProvider = IncrementalPackagePartProvider(
|
||||||
environment.createPackagePartProvider(sourceScope),
|
environment.createPackagePartProvider(sourceScope),
|
||||||
targetIds.map(incrementalComponents::getIncrementalCache)
|
targetIds.map(incrementalComponents::getIncrementalCache)
|
||||||
)
|
)
|
||||||
FirSessionFactory.ProviderAndScopeForIncrementalCompilation(packagePartProvider, librariesScope)
|
val incrementalCompilationScope = GlobalSearchScope.filesWithoutLibrariesScope(
|
||||||
|
project,
|
||||||
|
previouslyCompiledFiles
|
||||||
|
)
|
||||||
|
librariesScope = librariesScope.intersectWith(GlobalSearchScope.notScope(incrementalCompilationScope))
|
||||||
|
FirSessionFactory.ProviderAndScopeForIncrementalCompilation(packagePartProvider, incrementalCompilationScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
val languageVersionSettings = moduleConfiguration.languageVersionSettings
|
val languageVersionSettings = moduleConfiguration.languageVersionSettings
|
||||||
|
|||||||
@@ -164,9 +164,9 @@ object FirSessionFactory {
|
|||||||
this,
|
this,
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
firProvider.symbolProvider,
|
firProvider.symbolProvider,
|
||||||
|
symbolProviderForBinariesFromIncrementalCompilation,
|
||||||
JavaSymbolProvider(this, moduleData, project, scope),
|
JavaSymbolProvider(this, moduleData, project, scope),
|
||||||
FirDependenciesSymbolProviderImpl(this),
|
FirDependenciesSymbolProviderImpl(this),
|
||||||
symbolProviderForBinariesFromIncrementalCompilation,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user