Don't store analyze result longer than ModuleResolverProvider valid time
For synthetic files there might be file modifications without PsiModificationTracker.MODIFICATION_COUNT increment.
This commit is contained in:
+5
-5
@@ -165,7 +165,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
|||||||
fun makeGlobalResolveSessionProvider(reuseDataFrom: ProjectResolutionFacade? = null,
|
fun makeGlobalResolveSessionProvider(reuseDataFrom: ProjectResolutionFacade? = null,
|
||||||
moduleFilter: (IdeaModuleInfo) -> Boolean = { true },
|
moduleFilter: (IdeaModuleInfo) -> Boolean = { true },
|
||||||
allModules: Collection<IdeaModuleInfo>? = null
|
allModules: Collection<IdeaModuleInfo>? = null
|
||||||
): (GlobalContextImpl, Project) -> CachedValueProvider.Result<ModuleResolverProvider> {
|
): (GlobalContextImpl, Project) -> ModuleResolverProvider {
|
||||||
return globalResolveSessionProvider(
|
return globalResolveSessionProvider(
|
||||||
debugName,
|
debugName,
|
||||||
targetPlatform,
|
targetPlatform,
|
||||||
@@ -316,7 +316,7 @@ private fun globalResolveSessionProvider(
|
|||||||
reuseDataFrom: ProjectResolutionFacade? = null,
|
reuseDataFrom: ProjectResolutionFacade? = null,
|
||||||
syntheticFiles: Collection<KtFile> = listOf(),
|
syntheticFiles: Collection<KtFile> = listOf(),
|
||||||
allModules: Collection<IdeaModuleInfo>? = null // null means create resolvers for modules from idea model
|
allModules: Collection<IdeaModuleInfo>? = null // null means create resolvers for modules from idea model
|
||||||
): (GlobalContextImpl, Project) -> CachedValueProvider.Result<ModuleResolverProvider> = { globalContext, project ->
|
): (GlobalContextImpl, Project) -> ModuleResolverProvider = { globalContext, project ->
|
||||||
val delegateResolverProvider = reuseDataFrom?.moduleResolverProvider
|
val delegateResolverProvider = reuseDataFrom?.moduleResolverProvider
|
||||||
val delegateResolverForProject = delegateResolverProvider?.resolverForProject ?: EmptyResolverForProject()
|
val delegateResolverForProject = delegateResolverProvider?.resolverForProject ?: EmptyResolverForProject()
|
||||||
|
|
||||||
@@ -334,7 +334,8 @@ private fun globalResolveSessionProvider(
|
|||||||
AnalyzerFacadeProvider.getAnalyzerFacade(platform),
|
AnalyzerFacadeProvider.getAnalyzerFacade(platform),
|
||||||
syntheticFiles, delegateResolverForProject, moduleFilter,
|
syntheticFiles, delegateResolverForProject, moduleFilter,
|
||||||
allModules,
|
allModules,
|
||||||
builtIns
|
builtIns,
|
||||||
|
dependencies
|
||||||
)
|
)
|
||||||
|
|
||||||
if (newBuiltIns is JvmBuiltIns) {
|
if (newBuiltIns is JvmBuiltIns) {
|
||||||
@@ -342,7 +343,6 @@ private fun globalResolveSessionProvider(
|
|||||||
newBuiltIns.setOwnerModuleDescriptor(moduleResolverProvider.resolverForProject.descriptorForModule(sdkInfo))
|
newBuiltIns.setOwnerModuleDescriptor(moduleResolverProvider.resolverForProject.descriptorForModule(sdkInfo))
|
||||||
}
|
}
|
||||||
|
|
||||||
val allDependencies = dependencies + listOf(moduleResolverProvider.exceptionTracker)
|
moduleResolverProvider
|
||||||
CachedValueProvider.Result.create(moduleResolverProvider, allDependencies)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-8
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.load.java.structure.JavaClass
|
|||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||||
import org.jetbrains.kotlin.storage.ExceptionTracker
|
|
||||||
|
|
||||||
fun createModuleResolverProvider(
|
fun createModuleResolverProvider(
|
||||||
debugName: String,
|
debugName: String,
|
||||||
@@ -45,7 +44,8 @@ fun createModuleResolverProvider(
|
|||||||
delegateResolver: ResolverForProject<IdeaModuleInfo>,
|
delegateResolver: ResolverForProject<IdeaModuleInfo>,
|
||||||
moduleFilter: (IdeaModuleInfo) -> Boolean,
|
moduleFilter: (IdeaModuleInfo) -> Boolean,
|
||||||
allModules: Collection<IdeaModuleInfo>?,
|
allModules: Collection<IdeaModuleInfo>?,
|
||||||
builtIns: KotlinBuiltIns
|
builtIns: KotlinBuiltIns,
|
||||||
|
dependencies: Collection<Any>
|
||||||
): ModuleResolverProvider {
|
): ModuleResolverProvider {
|
||||||
|
|
||||||
val allModuleInfos = (allModules ?: collectAllModuleInfosFromIdeaModel(project)).toHashSet()
|
val allModuleInfos = (allModules ?: collectAllModuleInfosFromIdeaModel(project)).toHashSet()
|
||||||
@@ -81,7 +81,7 @@ fun createModuleResolverProvider(
|
|||||||
return ModuleResolverProviderImpl(
|
return ModuleResolverProviderImpl(
|
||||||
resolverForProject,
|
resolverForProject,
|
||||||
builtIns,
|
builtIns,
|
||||||
globalContext
|
dependencies + listOf(globalContext.exceptionTracker)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,15 +111,12 @@ private fun collectAllModuleInfosFromIdeaModel(project: Project): List<IdeaModul
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface ModuleResolverProvider {
|
interface ModuleResolverProvider {
|
||||||
val exceptionTracker: ExceptionTracker
|
|
||||||
val resolverForProject: ResolverForProject<IdeaModuleInfo>
|
val resolverForProject: ResolverForProject<IdeaModuleInfo>
|
||||||
val builtIns: KotlinBuiltIns
|
val builtIns: KotlinBuiltIns
|
||||||
|
val cacheDependencies: Collection<Any>
|
||||||
}
|
}
|
||||||
|
|
||||||
class ModuleResolverProviderImpl(
|
class ModuleResolverProviderImpl(
|
||||||
override val resolverForProject: ResolverForProject<IdeaModuleInfo>,
|
override val resolverForProject: ResolverForProject<IdeaModuleInfo>,
|
||||||
override val builtIns: KotlinBuiltIns,
|
override val builtIns: KotlinBuiltIns,
|
||||||
globalContext: GlobalContextImpl
|
override val cacheDependencies: Collection<Any>) : ModuleResolverProvider
|
||||||
) : ModuleResolverProvider {
|
|
||||||
override val exceptionTracker: ExceptionTracker = globalContext.exceptionTracker
|
|
||||||
}
|
|
||||||
|
|||||||
+8
-3
@@ -32,10 +32,13 @@ internal class ProjectResolutionFacade(
|
|||||||
val debugString: String,
|
val debugString: String,
|
||||||
val project: Project,
|
val project: Project,
|
||||||
val globalContext: GlobalContextImpl,
|
val globalContext: GlobalContextImpl,
|
||||||
computeModuleResolverProvider: (GlobalContextImpl, Project) -> CachedValueProvider.Result<ModuleResolverProvider>
|
computeModuleResolverProvider: (GlobalContextImpl, Project) -> ModuleResolverProvider
|
||||||
) {
|
) {
|
||||||
private val cachedValue = CachedValuesManager.getManager(project).createCachedValue(
|
private val cachedValue = CachedValuesManager.getManager(project).createCachedValue(
|
||||||
{ computeModuleResolverProvider(globalContext, project) },
|
{
|
||||||
|
val resolverProvider = computeModuleResolverProvider(globalContext, project)
|
||||||
|
CachedValueProvider.Result.create(resolverProvider, resolverProvider.cacheDependencies)
|
||||||
|
},
|
||||||
/* trackValue = */ false
|
/* trackValue = */ false
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -57,7 +60,9 @@ internal class ProjectResolutionFacade(
|
|||||||
return PerFileAnalysisCache(file!!, resolverProvider.resolverForProject.resolverForModule(file.getModuleInfo()).componentProvider)
|
return PerFileAnalysisCache(file!!, resolverProvider.resolverForProject.resolverForModule(file.getModuleInfo()).componentProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CachedValueProvider.Result(results, PsiModificationTracker.MODIFICATION_COUNT, resolverProvider.exceptionTracker)
|
|
||||||
|
val allDependencies = resolverProvider.cacheDependencies + listOf(PsiModificationTracker.MODIFICATION_COUNT)
|
||||||
|
CachedValueProvider.Result.create(results, allDependencies)
|
||||||
}, false)
|
}, false)
|
||||||
|
|
||||||
fun getAnalysisResultsForElements(elements: Collection<KtElement>): AnalysisResult {
|
fun getAnalysisResultsForElements(elements: Collection<KtElement>): AnalysisResult {
|
||||||
|
|||||||
Reference in New Issue
Block a user