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
setupModuleDescriptor(module, moduleDescriptor)
val modificationTracker = (module as? TrackableModuleInfo)?.createModificationTracker()
?: (PsiModificationTracker.SERVICE.getInstance(projectContext.project).outOfCodeBlockModificationTracker.takeIf { invalidateOnOOCB })
val modificationTracker = (module as? TrackableModuleInfo)?.createModificationTracker() ?: if (invalidateOnOOCB) {
PsiModificationTracker.SERVICE.getInstance(projectContext.project).outOfCodeBlockModificationTracker
} else {
null
}
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.IdeaModuleInfo
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.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.dependencies.ScriptAdditionalIdeaDependenciesProvider
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.util.ProjectRootsUtil
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.contains
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.resolve.diagnostics.KotlinSuppressCache
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
@@ -226,7 +227,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
val dependenciesForSyntheticFileCache =
listOf(
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT,
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker,
filesModificationTracker
)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.project
import com.intellij.openapi.project.Project
import com.intellij.psi.util.CachedValueProvider
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.resolve.lazy.ProbablyContractedCallableNames
@@ -17,7 +17,7 @@ class ProbablyContractedCallableNamesImpl(project: Project) : ProbablyContracted
{
CachedValueProvider.Result.create(
KotlinProbablyContractedFunctionShortNameIndex.getInstance().getAllKeys(project),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker
)
},
false
@@ -8,13 +8,9 @@ package org.jetbrains.kotlin.idea.project
import com.intellij.openapi.project.Project
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
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.caches.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingFunctionShortNameIndex
import org.jetbrains.kotlin.idea.stubindex.KotlinProbablyNothingPropertyShortNameIndex
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.lazy.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>) =
CachedValuesManager.getManager(project).createCachedValue(
{
CachedValueProvider.Result.create(names(), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
CachedValueProvider.Result.create(names(), KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker)
}, false
)
@@ -78,7 +78,7 @@ class ResolveElementCache(
CachedValueProvider<MutableMap<KtElement, CachedFullResolve>> {
CachedValueProvider.Result.create(
ContainerUtil.createConcurrentWeakKeySoftValueMap<KtElement, CachedFullResolve>(),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT,
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker,
resolveSession.exceptionTracker
)
},
@@ -23,11 +23,11 @@ import com.intellij.psi.search.PsiShortNamesCache
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.annotations.TestOnly
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.trackers.KotlinCodeBlockModificationListener
import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.project.findAnalyzerServices
@@ -78,7 +78,7 @@ class PsiBasedClassResolver @TestOnly constructor(private val targetClassFqName:
{
CachedValueProvider.Result(
PsiBasedClassResolver(target),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
KotlinCodeBlockModificationListener.getInstance(target.project).kotlinOutOfCodeBlockTracker
)
}, false
)
@@ -18,12 +18,11 @@ package org.jetbrains.kotlin.idea.stubindex
import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
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.Name
import java.util.*
@@ -34,7 +33,7 @@ class SubpackagesIndexService(private val project: Project) {
{
CachedValueProvider.Result(
SubpackagesIndex(KotlinExactPackagesIndex.getInstance().getAllKeys(project)),
PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT)
KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker)
},
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
private val allPackageFqNames = hashSetOf<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 {
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.project.Project
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.stubs.StubIndex
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.ModuleSourceInfo
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.PackageIndexUtil
import org.jetbrains.kotlin.idea.stubindex.SubpackagesIndexService
@@ -109,7 +109,7 @@ class PluginDeclarationProviderFactory(
packageExists = $packageExists, cachedPackageExists = $cachedPackageExists,
oldPackageExists = $oldPackageExists,
SPI.packageExists = $spiPackageExists, SPI = $subpackagesIndex,
OOCB count = ${PsiManager.getInstance(project).modificationTracker.outOfCodeBlockModificationCount}
OOCB count = ${KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker.modificationCount}
moduleModificationCount = $moduleModificationCount
""".trimIndent()
@@ -25,7 +25,6 @@ import com.intellij.psi.PsiWhiteSpace
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.idea.analysis.analyzeInContext
@@ -85,8 +84,14 @@ class CompletionBindingContextProvider(project: Project) {
}
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 {
@@ -5,9 +5,16 @@
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.get
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.ResolveElementCache
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.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.picocontainer.MutablePicoContainer
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 {
if (declaration is KtAnonymousInitializer || KtPsiUtil.isLocal(declaration)) {
return container.get<ResolveElementCache>()
.resolveToElements(listOf(declaration), BodyResolveMode.FULL)
.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)!!
.resolveToElements(listOf(declaration), BodyResolveMode.FULL)
.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)!!
}
return container.get<ResolveSession>().resolveToDescriptor(declaration)
}