Use Kotlin oocb instead of platform oocb tracker (KT-32364)

This commit is contained in:
Nikolay Krasko
2019-06-05 15:46:28 +03:00
parent 557ea54a9f
commit 263d8eea16
10 changed files with 66 additions and 27 deletions
@@ -263,8 +263,11 @@ class ResolverForProjectImpl<M : ModuleInfo>(
) )
moduleInfoByDescriptor[moduleDescriptor] = module moduleInfoByDescriptor[moduleDescriptor] = module
setupModuleDescriptor(module, moduleDescriptor) setupModuleDescriptor(module, moduleDescriptor)
val modificationTracker = (module as? TrackableModuleInfo)?.createModificationTracker() val modificationTracker = (module as? TrackableModuleInfo)?.createModificationTracker() ?: if (invalidateOnOOCB) {
?: (PsiModificationTracker.SERVICE.getInstance(projectContext.project).outOfCodeBlockModificationTracker.takeIf { invalidateOnOOCB }) PsiModificationTracker.SERVICE.getInstance(projectContext.project).outOfCodeBlockModificationTracker
} else {
null
}
return ModuleData(moduleDescriptor, modificationTracker) return ModuleData(moduleDescriptor, modificationTracker)
} }
} }
@@ -43,18 +43,19 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.idea.caches.project.* import org.jetbrains.kotlin.idea.caches.project.*
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.util.contextWithNewLockAndCompositeExceptionTracker import org.jetbrains.kotlin.idea.caches.resolve.util.contextWithNewLockAndCompositeExceptionTracker
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.caches.trackers.outOfBlockModificationCount
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDependenciesProvider import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDependenciesProvider
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.caches.trackers.outOfBlockModificationCount
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.contains import org.jetbrains.kotlin.psi.psiUtil.contains
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
@@ -226,7 +227,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
val dependenciesForSyntheticFileCache = val dependenciesForSyntheticFileCache =
listOf( listOf(
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker,
filesModificationTracker filesModificationTracker
) )
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.project
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyContractedFunctionShortNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyContractedFunctionShortNameIndex
import org.jetbrains.kotlin.resolve.lazy.ProbablyContractedCallableNames import org.jetbrains.kotlin.resolve.lazy.ProbablyContractedCallableNames
@@ -17,7 +17,7 @@ class ProbablyContractedCallableNamesImpl(project: Project) : ProbablyContracted
{ {
CachedValueProvider.Result.create( CachedValueProvider.Result.create(
KotlinProbablyContractedFunctionShortNameIndex.getInstance().getAllKeys(project), KotlinProbablyContractedFunctionShortNameIndex.getInstance().getAllKeys(project),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker
) )
}, },
false false
@@ -8,13 +8,9 @@ package org.jetbrains.kotlin.idea.project
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import com.intellij.util.containers.SLRUCache
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.caches.resolve.PerFileAnalysisCache
import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingFunctionShortNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingFunctionShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingPropertyShortNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingPropertyShortNameIndex
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.lazy.ProbablyNothingCallableNames import org.jetbrains.kotlin.resolve.lazy.ProbablyNothingCallableNames
class ProbablyNothingCallableNamesImpl(project: Project) : ProbablyNothingCallableNames { class ProbablyNothingCallableNamesImpl(project: Project) : ProbablyNothingCallableNames {
@@ -28,6 +24,6 @@ class ProbablyNothingCallableNamesImpl(project: Project) : ProbablyNothingCallab
private inline fun createCachedValue(project: Project, crossinline names: () -> Collection<String>) = private inline fun createCachedValue(project: Project, crossinline names: () -> Collection<String>) =
CachedValuesManager.getManager(project).createCachedValue( CachedValuesManager.getManager(project).createCachedValue(
{ {
CachedValueProvider.Result.create(names(), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) CachedValueProvider.Result.create(names(), KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker)
}, false }, false
) )
@@ -78,7 +78,7 @@ class ResolveElementCache(
CachedValueProvider<MutableMap<KtElement, CachedFullResolve>> { CachedValueProvider<MutableMap<KtElement, CachedFullResolve>> {
CachedValueProvider.Result.create( CachedValueProvider.Result.create(
ContainerUtil.createConcurrentWeakKeySoftValueMap<KtElement, CachedFullResolve>(), ContainerUtil.createConcurrentWeakKeySoftValueMap<KtElement, CachedFullResolve>(),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker,
resolveSession.exceptionTracker resolveSession.exceptionTracker
) )
}, },
@@ -23,11 +23,11 @@ import com.intellij.psi.search.PsiShortNamesCache
import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.asJava.ImpreciseResolveResult import org.jetbrains.kotlin.asJava.ImpreciseResolveResult
import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.* import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.*
import org.jetbrains.kotlin.idea.caches.project.getNullableModuleInfo import org.jetbrains.kotlin.idea.caches.project.getNullableModuleInfo
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.project.findAnalyzerServices import org.jetbrains.kotlin.idea.project.findAnalyzerServices
@@ -78,7 +78,7 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName:
{ {
CachedValueProvider.Result( CachedValueProvider.Result(
PsiBasedClassResolver(target), PsiBasedClassResolver(target),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT KotlinCodeBlockModificationListener.getInstance(target.project).kotlinOutOfCodeBlockTracker
) )
}, false }, false
) )
@@ -18,12 +18,11 @@ package org.jetbrains.kotlin.idea.stubindex
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.util.containers.MultiMap import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import java.util.* import java.util.*
@@ -34,7 +33,7 @@ class SubpackagesIndexService(private val project: Project) {
{ {
CachedValueProvider.Result( CachedValueProvider.Result(
SubpackagesIndex(KotlinExactPackagesIndex.getInstance().getAllKeys(project)), SubpackagesIndex(KotlinExactPackagesIndex.getInstance().getAllKeys(project)),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker)
}, },
false false
) )
@@ -43,7 +42,7 @@ class SubpackagesIndexService(private val project: Project) {
// a map from any existing package (in kotlin) to a set of subpackages (not necessarily direct) containing files // a map from any existing package (in kotlin) to a set of subpackages (not necessarily direct) containing files
private val allPackageFqNames = hashSetOf<FqName>() private val allPackageFqNames = hashSetOf<FqName>()
private val fqNameByPrefix = MultiMap.createSet<FqName, FqName>() private val fqNameByPrefix = MultiMap.createSet<FqName, FqName>()
private val oocbCount = PsiManager.getInstance(project).modificationTracker.outOfCodeBlockModificationCount private val oocbCount = KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker.modificationCount
init { init {
for (fqNameAsString in allPackageFqNames) { for (fqNameAsString in allPackageFqNames) {
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.idea.stubindex.resolve
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StubIndex import com.intellij.psi.stubs.StubIndex
import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.analyzer.ModuleInfo
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.idea.caches.PerModulePackageCacheService
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.caches.project.projectSourceModules import org.jetbrains.kotlin.idea.caches.project.projectSourceModules
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.stubindex.KotlinExactPackagesIndex import org.jetbrains.kotlin.idea.stubindex.KotlinExactPackagesIndex
import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil
import org.jetbrains.kotlin.idea.stubindex.SubpackagesIndexService import org.jetbrains.kotlin.idea.stubindex.SubpackagesIndexService
@@ -109,7 +109,7 @@ class PluginDeclarationProviderFactory(
packageExists = $packageExists, cachedPackageExists = $cachedPackageExists, packageExists = $packageExists, cachedPackageExists = $cachedPackageExists,
oldPackageExists = $oldPackageExists, oldPackageExists = $oldPackageExists,
SPI.packageExists = $spiPackageExists, SPI = $subpackagesIndex, SPI.packageExists = $spiPackageExists, SPI = $subpackagesIndex,
OOCB count = ${PsiManager.getInstance(project).modificationTracker.outOfCodeBlockModificationCount} OOCB count = ${KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker.modificationCount}
moduleModificationCount = $moduleModificationCount moduleModificationCount = $moduleModificationCount
""".trimIndent() """.trimIndent()
@@ -25,7 +25,6 @@ import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.idea.analysis.analyzeInContext import org.jetbrains.kotlin.idea.analysis.analyzeInContext
@@ -85,8 +84,14 @@ class CompletionBindingContextProvider(project: Project) {
} }
private var prevCompletionDataCache: CachedValue<DataHolder> = CachedValuesManager.getManager(project).createCachedValue( private var prevCompletionDataCache: CachedValue<DataHolder> = CachedValuesManager.getManager(project).createCachedValue(
{ CachedValueProvider.Result.create(DataHolder(), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) }, {
false) CachedValueProvider.Result.create(
DataHolder(),
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker
)
},
false
)
fun getBindingContext(position: PsiElement, resolutionFacade: ResolutionFacade): BindingContext { fun getBindingContext(position: PsiElement, resolutionFacade: ResolutionFacade): BindingContext {
@@ -5,9 +5,16 @@
package org.jetbrains.kotlin.idea.resolve package org.jetbrains.kotlin.idea.resolve
import com.intellij.mock.MockProject
import com.intellij.pom.PomManager
import com.intellij.pom.PomModel
import com.intellij.pom.core.impl.PomModelImpl
import com.intellij.pom.tree.TreeAspect
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.project.IdeaEnvironment import org.jetbrains.kotlin.idea.project.IdeaEnvironment
import org.jetbrains.kotlin.idea.project.ResolveElementCache import org.jetbrains.kotlin.idea.project.ResolveElementCache
import org.jetbrains.kotlin.psi.KtAnonymousInitializer import org.jetbrains.kotlin.psi.KtAnonymousInitializer
@@ -18,13 +25,41 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.TargetEnvironment
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.picocontainer.MutablePicoContainer
abstract class AbstractAdditionalResolveDescriptorRendererTest : AbstractDescriptorRendererTest() { abstract class AbstractAdditionalResolveDescriptorRendererTest : AbstractDescriptorRendererTest() {
override fun setUp() {
super.setUp()
val pomModelImpl = PomModelImpl(project)
val treeAspect = TreeAspect(pomModelImpl)
(project as MockProject).registerService(PomModel::class.java, pomModelImpl)
(project.picoContainer as MutablePicoContainer).registerComponentInstance(
KotlinCodeBlockModificationListener(
PsiModificationTracker.SERVICE.getInstance(project),
project,
treeAspect
)
)
}
override fun tearDown() {
(project.picoContainer as MutablePicoContainer).unregisterComponentByInstance(
KotlinCodeBlockModificationListener.getInstance(project)
)
val pomModel = PomManager.getModel(project)
(project.picoContainer as MutablePicoContainer).unregisterComponentByInstance(pomModel)
super.tearDown()
}
override fun getDescriptor(declaration: KtDeclaration, container: ComponentProvider): DeclarationDescriptor { override fun getDescriptor(declaration: KtDeclaration, container: ComponentProvider): DeclarationDescriptor {
if (declaration is KtAnonymousInitializer || KtPsiUtil.isLocal(declaration)) { if (declaration is KtAnonymousInitializer || KtPsiUtil.isLocal(declaration)) {
return container.get<ResolveElementCache>() return container.get<ResolveElementCache>()
.resolveToElements(listOf(declaration), BodyResolveMode.FULL) .resolveToElements(listOf(declaration), BodyResolveMode.FULL)
.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)!! .get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)!!
} }
return container.get<ResolveSession>().resolveToDescriptor(declaration) return container.get<ResolveSession>().resolveToDescriptor(declaration)
} }