From 4f678c8289238d289b794eed06d31f156e97441d Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 31 May 2019 19:27:55 +0300 Subject: [PATCH] Create project service with Kotlin trackers (KT-32364) --- .../kotlin/analyzer/AnalyzerFacade.kt | 3 +-- .../KotlinModificationTrackerService.kt | 24 +++++++++++++++++++ .../asJava/builder/LightClassDataProvider.kt | 15 ++++++++---- .../kotlin/asJava/classes/FacadeCache.kt | 9 +++++-- .../KtLightClassForSourceDeclaration.kt | 4 ++-- .../KotlinIDEModificationTrackerService.kt | 19 +++++++++++++++ idea/resources/META-INF/plugin-common.xml | 3 +++ 7 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/kotlin/analyzer/KotlinModificationTrackerService.kt create mode 100644 idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/trackers/KotlinIDEModificationTrackerService.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt index fc5b78d8a81..c081f3026ce 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AnalyzerFacade.kt @@ -20,7 +20,6 @@ import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.project.Project import com.intellij.openapi.util.ModificationTracker import com.intellij.psi.search.GlobalSearchScope -import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -264,7 +263,7 @@ class ResolverForProjectImpl( moduleInfoByDescriptor[moduleDescriptor] = module setupModuleDescriptor(module, moduleDescriptor) val modificationTracker = (module as? TrackableModuleInfo)?.createModificationTracker() ?: if (invalidateOnOOCB) { - PsiModificationTracker.SERVICE.getInstance(projectContext.project).outOfCodeBlockModificationTracker + KotlinModificationTrackerService.getInstance(projectContext.project).outOfBlockModificationTracker } else { null } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/KotlinModificationTrackerService.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/KotlinModificationTrackerService.kt new file mode 100644 index 00000000000..55bbf379d4a --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/KotlinModificationTrackerService.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analyzer + +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.ModificationTracker + +open class KotlinModificationTrackerService { + open val modificationTracker: ModificationTracker = ModificationTracker.NEVER_CHANGED + open val outOfBlockModificationTracker: ModificationTracker = ModificationTracker.NEVER_CHANGED + + companion object { + private val NEVER_CHANGE_TRACKER_SERVICE = KotlinModificationTrackerService() + + @JvmStatic + fun getInstance(project: Project): KotlinModificationTrackerService { + return ServiceManager.getService(project, KotlinModificationTrackerService::class.java) ?: NEVER_CHANGE_TRACKER_SERVICE + } + } +} \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt index 64d8b153990..84acd762fa0 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/builder/LightClassDataProvider.kt @@ -21,8 +21,8 @@ import com.intellij.psi.PsiFile import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.CachedValueProvider -import com.intellij.psi.util.PsiModificationTracker import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject @@ -58,7 +58,11 @@ class LightClassDataProviderForClassOrObject( override fun compute(): CachedValueProvider.Result? { return CachedValueProvider.Result.create( computeLightClassData(), - if (classOrObject.isLocal()) PsiModificationTracker.MODIFICATION_COUNT else PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT + if (classOrObject.isLocal()) { + KotlinModificationTrackerService.getInstance(classOrObject.project).modificationTracker + } else { + KotlinModificationTrackerService.getInstance(classOrObject.project).outOfBlockModificationTracker + } ) } @@ -99,7 +103,7 @@ sealed class LightClassDataProviderForFileFacade constructor( return CachedValueProvider.Result.create( computeLightClassData(files), - PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT + KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker ) } @@ -147,7 +151,10 @@ class LightClassDataProviderForScript(private val script: KtScript) : CachedValu } override fun compute(): CachedValueProvider.Result? = - CachedValueProvider.Result.create(computeLightClassData(), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) + CachedValueProvider.Result.create( + computeLightClassData(), + KotlinModificationTrackerService.getInstance(script.project).outOfBlockModificationTracker + ) override fun toString(): String = this::class.java.name + " for ${script.fqName}" } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/FacadeCache.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/FacadeCache.kt index 8d9f31506c1..74a91a51fab 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/FacadeCache.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/FacadeCache.kt @@ -11,8 +11,8 @@ import com.intellij.psi.search.GlobalSearchScope 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 com.intellij.util.containers.SLRUCache +import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.name.FqName private data class FacadeCacheKey(val fqName: FqName, val searchScope: GlobalSearchScope) @@ -34,7 +34,12 @@ class FacadeCache(private val project: Project) { } private val cachedValue: CachedValue = CachedValuesManager.getManager(project).createCachedValue( - { CachedValueProvider.Result.create(FacadeCacheData(), PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT) }, false + { + CachedValueProvider.Result.create( + FacadeCacheData(), + KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker + ) + }, false ) operator fun get(qualifiedName: FqName, searchScope: GlobalSearchScope): KtLightClassForFacade? { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index 5a4042d92ff..97ae5211c52 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt @@ -24,10 +24,10 @@ import com.intellij.psi.stubs.StubElement import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager -import com.intellij.psi.util.PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT import com.intellij.psi.util.PsiUtilCore import com.intellij.util.IncorrectOperationException import org.jetbrains.annotations.NonNls +import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.asJava.ImpreciseResolveResult import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.UNSURE import org.jetbrains.kotlin.asJava.LightClassGenerationSupport @@ -319,7 +319,7 @@ abstract class KtLightClassForSourceDeclaration( CachedValueProvider.Result .create( createNoCache(classOrObject, KtUltraLightSupport.forceUsingOldLightClasses), - OUT_OF_CODE_BLOCK_MODIFICATION_COUNT + KotlinModificationTrackerService.getInstance(classOrObject.project).outOfBlockModificationTracker ) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/trackers/KotlinIDEModificationTrackerService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/trackers/KotlinIDEModificationTrackerService.kt new file mode 100644 index 00000000000..b05954e34e5 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/trackers/KotlinIDEModificationTrackerService.kt @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.caches.trackers + +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.ModificationTracker +import com.intellij.psi.util.PsiModificationTracker +import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService + +class KotlinIDEModificationTrackerService(project: Project, psiModificationTracker: PsiModificationTracker) : + KotlinModificationTrackerService() { + + override val modificationTracker: ModificationTracker = psiModificationTracker + override val outOfBlockModificationTracker: ModificationTracker = + KotlinCodeBlockModificationListener.getInstance(project).kotlinOutOfCodeBlockTracker +} \ No newline at end of file diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index 1bcf3308ba1..162eec2a368 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -248,6 +248,9 @@ + +