FIR IDE: move KotlinOutOfBlockModificationTrackerFactory to frontend independent module
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2020 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.trackers
|
||||
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
|
||||
class KotlinFE10OutOfBlockModificationTracker : KotlinOutOfBlockModificationTrackerFactory() {
|
||||
override fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker =
|
||||
throwUnsupportedError()
|
||||
|
||||
override fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker =
|
||||
throwUnsupportedError()
|
||||
|
||||
private fun throwUnsupportedError(): Nothing =
|
||||
error("Supported only for FIR plugin now, sorry, consider using KotlinModificationTrackerService instead")
|
||||
}
|
||||
+2
-1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.sessions.FirIdeSessionProvide
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory
|
||||
import org.jetbrains.kotlin.idea.util.cachedValue
|
||||
import org.jetbrains.kotlin.idea.util.getValue
|
||||
import org.jetbrains.kotlin.trackers.createProjectWideOutOfBlockModificationTracker
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
internal class FirIdeResolveStateService(project: Project) {
|
||||
@@ -24,7 +25,7 @@ internal class FirIdeResolveStateService(project: Project) {
|
||||
|
||||
private val stateCache by cachedValue(
|
||||
project,
|
||||
project.service<KotlinFirOutOfBlockModificationTrackerFactory>().createProjectWideOutOfBlockModificationTracker(),
|
||||
project.createProjectWideOutOfBlockModificationTracker(),
|
||||
ProjectRootModificationTracker.getInstance(project),
|
||||
) {
|
||||
ConcurrentHashMap<IdeaModuleInfo, FirModuleResolveStateImpl>()
|
||||
|
||||
+2
-3
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
||||
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import kotlinx.collections.immutable.PersistentMap
|
||||
import kotlinx.collections.immutable.persistentMapOf
|
||||
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.FirTransformerProvider
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.addValueFor
|
||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.executeWithoutPCE
|
||||
import org.jetbrains.kotlin.trackers.createModuleWithoutDependenciesOutOfBlockModificationTracker
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
internal class FirIdeSessionProviderStorage(private val project: Project) {
|
||||
@@ -113,8 +113,7 @@ private class FromModuleViewSessionCache(
|
||||
private class FirSessionWithModificationTracker(
|
||||
val firSession: FirIdeSourcesSession,
|
||||
) {
|
||||
private val modificationTracker = firSession.project.service<KotlinFirOutOfBlockModificationTrackerFactory>()
|
||||
.createModuleWithoutDependenciesOutOfBlockModificationTracker(firSession.moduleInfo.module)
|
||||
private val modificationTracker = firSession.moduleInfo.module.createModuleWithoutDependenciesOutOfBlockModificationTracker()
|
||||
|
||||
private val timeStamp = modificationTracker.modificationCount
|
||||
|
||||
|
||||
+4
-9
@@ -10,12 +10,13 @@ import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory
|
||||
|
||||
class KotlinFirOutOfBlockModificationTrackerFactory(private val project: Project) {
|
||||
fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker =
|
||||
class KotlinFirOutOfBlockModificationTrackerFactory(private val project: Project) : KotlinOutOfBlockModificationTrackerFactory() {
|
||||
override fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker =
|
||||
KotlinFirOutOfBlockModificationTracker(project)
|
||||
|
||||
fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker =
|
||||
override fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker =
|
||||
KotlinFirOutOfBlockModuleModificationTracker(module)
|
||||
|
||||
@TestOnly
|
||||
@@ -24,12 +25,6 @@ class KotlinFirOutOfBlockModificationTrackerFactory(private val project: Project
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.createProjectWideOutOfBlockModificationTracker() =
|
||||
service<KotlinFirOutOfBlockModificationTrackerFactory>().createProjectWideOutOfBlockModificationTracker()
|
||||
|
||||
fun Module.createModuleWithoutDependenciesOutOfBlockModificationTracker() =
|
||||
project.service<KotlinFirOutOfBlockModificationTrackerFactory>().createModuleWithoutDependenciesOutOfBlockModificationTracker(this)
|
||||
|
||||
private class KotlinFirOutOfBlockModificationTracker(project: Project) : ModificationTracker {
|
||||
private val trackerService = project.service<KotlinFirModificationTrackerService>()
|
||||
|
||||
|
||||
+2
-2
@@ -5,12 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir.low.level.api.trackers
|
||||
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import junit.framework.Assert
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||
import org.jetbrains.kotlin.trackers.createProjectWideOutOfBlockModificationTracker
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractProjectWideOutOfBlockKotlinModificationTrackerTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
@@ -23,7 +23,7 @@ abstract class AbstractProjectWideOutOfBlockKotlinModificationTrackerTest : Kotl
|
||||
val textToType = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// TYPE:") ?: DEFAULT_TEXT_TO_TYPE
|
||||
val outOfBlock = InTextDirectivesUtils.getPrefixedBoolean(fileText, "// OUT_OF_BLOCK:")
|
||||
?: error("Please, specify should out of block change happen or not by `// OUT_OF_BLOCK:` directive")
|
||||
val tracker = project.service<KotlinFirOutOfBlockModificationTrackerFactory>().createProjectWideOutOfBlockModificationTracker()
|
||||
val tracker = project.createProjectWideOutOfBlockModificationTracker()
|
||||
val initialModificationCount = tracker.modificationCount
|
||||
myFixture.type(textToType)
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
||||
|
||||
+1
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.util.rootManager
|
||||
import org.jetbrains.kotlin.idea.util.sourceRoots
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.trackers.createModuleWithoutDependenciesOutOfBlockModificationTracker
|
||||
import java.nio.file.Files
|
||||
import kotlin.io.path.ExperimentalPathApi
|
||||
import kotlin.io.path.writeText
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
||||
import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractMemoryLeakInSymbolsTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
@@ -51,7 +52,7 @@ abstract class AbstractMemoryLeakInSymbolsTest : KotlinLightCodeInsightFixtureTe
|
||||
|
||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||
private fun invalidateAllCaches(ktFile: KtFile) {
|
||||
project.service<KotlinFirOutOfBlockModificationTrackerFactory>().incrementModificationsCount()
|
||||
(project.service<KotlinOutOfBlockModificationTrackerFactory>() as KotlinFirOutOfBlockModificationTrackerFactory).incrementModificationsCount()
|
||||
(project.service<KtAnalysisSessionProvider>() as KtFirAnalysisSessionProvider).clearCaches()
|
||||
executeOnPooledThreadInReadAction { analyze(ktFile) {} }
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2010-2020 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.trackers
|
||||
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
|
||||
|
||||
abstract class KotlinOutOfBlockModificationTrackerFactory {
|
||||
abstract fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker
|
||||
abstract fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker
|
||||
}
|
||||
|
||||
fun Project.createProjectWideOutOfBlockModificationTracker() =
|
||||
service<KotlinOutOfBlockModificationTrackerFactory>().createProjectWideOutOfBlockModificationTracker()
|
||||
|
||||
fun Module.createModuleWithoutDependenciesOutOfBlockModificationTracker() =
|
||||
project.service<KotlinOutOfBlockModificationTrackerFactory>().createModuleWithoutDependenciesOutOfBlockModificationTracker(this)
|
||||
@@ -127,6 +127,9 @@ The Kotlin plugin provides language support in IntelliJ IDEA and Android Studio.
|
||||
<highlightingPassFactory implementation="org.jetbrains.kotlin.idea.refactoring.cutPaste.MoveDeclarationsPassFactory$Registrar"/>
|
||||
|
||||
<projectService serviceImplementation="org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener"/>
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory"
|
||||
serviceImplementation="org.jetbrains.kotlin.trackers.KotlinFE10OutOfBlockModificationTracker"/>
|
||||
|
||||
|
||||
<statistics.counterUsagesCollector groupId="kotlin.gradle.target" version="2"/>
|
||||
<statistics.counterUsagesCollector groupId="kotlin.maven.target" version="3"/>
|
||||
|
||||
@@ -131,7 +131,8 @@ The Kotlin FIR plugin provides language support in IntelliJ IDEA and Android Stu
|
||||
<highlightingPassFactory implementation="org.jetbrains.kotlin.idea.fir.highlighter.KotlinDiagnosticHighlightingPassFactory"/>
|
||||
|
||||
<projectService serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirModificationTrackerService"/>
|
||||
<projectService serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory"/>
|
||||
<projectService serviceInterface="org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory"/>
|
||||
<psi.treeChangePreprocessor implementation="org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinOutOfBlockPsiTreeChangePreprocessor"/>
|
||||
</extensions>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user