Libraries cache drops only on roots change
This commit is contained in:
@@ -26,4 +26,8 @@
|
|||||||
name='com.intellij.openapi.roots.ProjectFileIndex.SERVICE com.intellij.openapi.roots.ProjectFileIndex getInstance(com.intellij.openapi.project.Project)'>
|
name='com.intellij.openapi.roots.ProjectFileIndex.SERVICE com.intellij.openapi.roots.ProjectFileIndex getInstance(com.intellij.openapi.project.Project)'>
|
||||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
</item>
|
</item>
|
||||||
|
<item
|
||||||
|
name='com.intellij.openapi.roots.ProjectRootModificationTracker com.intellij.openapi.roots.ProjectRootModificationTracker getInstance(com.intellij.openapi.project.Project)'>
|
||||||
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
|
</item>
|
||||||
</root>
|
</root>
|
||||||
@@ -3,7 +3,11 @@
|
|||||||
name='com.intellij.psi.util.CachedValueProvider.Result com.intellij.psi.util.CachedValueProvider.Result<T> create(T, java.lang.Object...)'>
|
name='com.intellij.psi.util.CachedValueProvider.Result com.intellij.psi.util.CachedValueProvider.Result<T> create(T, java.lang.Object...)'>
|
||||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
</item>
|
</item>
|
||||||
<item
|
<item
|
||||||
|
name='com.intellij.psi.util.CachedValueProvider.Result com.intellij.psi.util.CachedValueProvider.Result<T> create(T, java.util.Collection<?>)'>
|
||||||
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
|
</item>
|
||||||
|
<item
|
||||||
name='com.intellij.psi.util.CachedValuesManager com.intellij.psi.util.CachedValue<T> createCachedValue(com.intellij.psi.util.CachedValueProvider<T>, boolean)'>
|
name='com.intellij.psi.util.CachedValuesManager com.intellij.psi.util.CachedValue<T> createCachedValue(com.intellij.psi.util.CachedValueProvider<T>, boolean)'>
|
||||||
<annotation name='org.jetbrains.annotations.NotNull'/>
|
<annotation name='org.jetbrains.annotations.NotNull'/>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
+11
-13
@@ -33,13 +33,9 @@ import org.jetbrains.jet.plugin.project.TargetPlatform.*
|
|||||||
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
|
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
|
||||||
import org.jetbrains.jet.plugin.project.TargetPlatformDetector
|
import org.jetbrains.jet.plugin.project.TargetPlatformDetector
|
||||||
import org.jetbrains.jet.lang.psi.JetCodeFragment
|
import org.jetbrains.jet.lang.psi.JetCodeFragment
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
|
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
|
||||||
import org.jetbrains.jet.context.GlobalContext
|
|
||||||
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
|
import org.jetbrains.jet.plugin.stubindex.JetSourceFilterScope
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import org.jetbrains.jet.utils.keysToMap
|
import org.jetbrains.jet.utils.keysToMap
|
||||||
|
import com.intellij.openapi.roots.ProjectRootModificationTracker
|
||||||
|
|
||||||
private val LOG = Logger.getInstance(javaClass<KotlinCacheService>())
|
private val LOG = Logger.getInstance(javaClass<KotlinCacheService>())
|
||||||
|
|
||||||
@@ -68,6 +64,7 @@ public class KotlinCacheService(val project: Project) {
|
|||||||
|
|
||||||
fun globalResolveSessionProvider(
|
fun globalResolveSessionProvider(
|
||||||
platform: TargetPlatform,
|
platform: TargetPlatform,
|
||||||
|
dependencies: Collection<Any>,
|
||||||
reuseDataFromCache: KotlinResolveCache? = null,
|
reuseDataFromCache: KotlinResolveCache? = null,
|
||||||
syntheticFiles: Collection<JetFile> = listOf(),
|
syntheticFiles: Collection<JetFile> = listOf(),
|
||||||
moduleFilter: (IdeaModuleInfo) -> Boolean = { true }
|
moduleFilter: (IdeaModuleInfo) -> Boolean = { true }
|
||||||
@@ -75,24 +72,24 @@ public class KotlinCacheService(val project: Project) {
|
|||||||
val analyzerFacade = AnalyzerFacadeProvider.getAnalyzerFacade(platform)
|
val analyzerFacade = AnalyzerFacadeProvider.getAnalyzerFacade(platform)
|
||||||
val delegateResolverProvider = reuseDataFromCache?.moduleResolverProvider ?: EmptyModuleResolverProvider
|
val delegateResolverProvider = reuseDataFromCache?.moduleResolverProvider ?: EmptyModuleResolverProvider
|
||||||
val moduleResolverProvider = createModuleResolverProvider(project, analyzerFacade, syntheticFiles, delegateResolverProvider, moduleFilter)
|
val moduleResolverProvider = createModuleResolverProvider(project, analyzerFacade, syntheticFiles, delegateResolverProvider, moduleFilter)
|
||||||
CachedValueProvider.Result.create(
|
val allDependencies = dependencies + listOf(moduleResolverProvider.exceptionTracker)
|
||||||
moduleResolverProvider,
|
CachedValueProvider.Result.create(moduleResolverProvider, allDependencies)
|
||||||
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT,
|
|
||||||
moduleResolverProvider.exceptionTracker
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val globalCachesPerPlatform = listOf(JVM, JS).keysToMap { platform -> GlobalCache(platform) }
|
private val globalCachesPerPlatform = listOf(JVM, JS).keysToMap { platform -> GlobalCache(platform) }
|
||||||
|
|
||||||
private inner class GlobalCache(platform: TargetPlatform) {
|
private inner class GlobalCache(platform: TargetPlatform) {
|
||||||
val librariesCache = KotlinResolveCache(
|
val librariesCache = KotlinResolveCache(
|
||||||
project, globalResolveSessionProvider(platform, moduleFilter = { it.isLibraryClasses() })
|
project, globalResolveSessionProvider(platform,
|
||||||
|
moduleFilter = { it.isLibraryClasses() },
|
||||||
|
dependencies = listOf(ProjectRootModificationTracker.getInstance(project)))
|
||||||
)
|
)
|
||||||
|
|
||||||
val modulesCache = KotlinResolveCache(
|
val modulesCache = KotlinResolveCache(
|
||||||
project, globalResolveSessionProvider(platform,
|
project, globalResolveSessionProvider(platform,
|
||||||
reuseDataFromCache = librariesCache,
|
reuseDataFromCache = librariesCache,
|
||||||
moduleFilter = { !it.isLibraryClasses() })
|
moduleFilter = { !it.isLibraryClasses() },
|
||||||
|
dependencies = listOf(PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +104,8 @@ public class KotlinCacheService(val project: Project) {
|
|||||||
targetPlatform,
|
targetPlatform,
|
||||||
syntheticFiles = listOf(file),
|
syntheticFiles = listOf(file),
|
||||||
reuseDataFromCache = globalCachesPerPlatform[targetPlatform]!!.librariesCache,
|
reuseDataFromCache = globalCachesPerPlatform[targetPlatform]!!.librariesCache,
|
||||||
moduleFilter = { !it.isLibraryClasses() }
|
moduleFilter = { !it.isLibraryClasses() },
|
||||||
|
dependencies = listOf(PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user