Create project service with Kotlin trackers (KT-32364)

This commit is contained in:
Nikolay Krasko
2019-05-31 19:27:55 +03:00
parent 263d8eea16
commit 4f678c8289
7 changed files with 67 additions and 10 deletions
@@ -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<LightClassDataHolder.ForClass>? {
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<LightClassDataHolder.ForScript>? =
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}"
}
@@ -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<FacadeCacheData> = 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? {
@@ -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
)
}