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.fir.low.level.api.trackers.KotlinFirOutOfBlockModificationTrackerFactory
|
||||||
import org.jetbrains.kotlin.idea.util.cachedValue
|
import org.jetbrains.kotlin.idea.util.cachedValue
|
||||||
import org.jetbrains.kotlin.idea.util.getValue
|
import org.jetbrains.kotlin.idea.util.getValue
|
||||||
|
import org.jetbrains.kotlin.trackers.createProjectWideOutOfBlockModificationTracker
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
internal class FirIdeResolveStateService(project: Project) {
|
internal class FirIdeResolveStateService(project: Project) {
|
||||||
@@ -24,7 +25,7 @@ internal class FirIdeResolveStateService(project: Project) {
|
|||||||
|
|
||||||
private val stateCache by cachedValue(
|
private val stateCache by cachedValue(
|
||||||
project,
|
project,
|
||||||
project.service<KotlinFirOutOfBlockModificationTrackerFactory>().createProjectWideOutOfBlockModificationTracker(),
|
project.createProjectWideOutOfBlockModificationTracker(),
|
||||||
ProjectRootModificationTracker.getInstance(project),
|
ProjectRootModificationTracker.getInstance(project),
|
||||||
) {
|
) {
|
||||||
ConcurrentHashMap<IdeaModuleInfo, FirModuleResolveStateImpl>()
|
ConcurrentHashMap<IdeaModuleInfo, FirModuleResolveStateImpl>()
|
||||||
|
|||||||
+2
-3
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
package org.jetbrains.kotlin.idea.fir.low.level.api.sessions
|
||||||
|
|
||||||
import com.intellij.openapi.components.service
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import kotlinx.collections.immutable.PersistentMap
|
import kotlinx.collections.immutable.PersistentMap
|
||||||
import kotlinx.collections.immutable.persistentMapOf
|
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.trackers.KotlinFirOutOfBlockModificationTrackerFactory
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.util.addValueFor
|
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.idea.fir.low.level.api.util.executeWithoutPCE
|
||||||
|
import org.jetbrains.kotlin.trackers.createModuleWithoutDependenciesOutOfBlockModificationTracker
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
internal class FirIdeSessionProviderStorage(private val project: Project) {
|
internal class FirIdeSessionProviderStorage(private val project: Project) {
|
||||||
@@ -113,8 +113,7 @@ private class FromModuleViewSessionCache(
|
|||||||
private class FirSessionWithModificationTracker(
|
private class FirSessionWithModificationTracker(
|
||||||
val firSession: FirIdeSourcesSession,
|
val firSession: FirIdeSourcesSession,
|
||||||
) {
|
) {
|
||||||
private val modificationTracker = firSession.project.service<KotlinFirOutOfBlockModificationTrackerFactory>()
|
private val modificationTracker = firSession.moduleInfo.module.createModuleWithoutDependenciesOutOfBlockModificationTracker()
|
||||||
.createModuleWithoutDependenciesOutOfBlockModificationTracker(firSession.moduleInfo.module)
|
|
||||||
|
|
||||||
private val timeStamp = modificationTracker.modificationCount
|
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.project.Project
|
||||||
import com.intellij.openapi.util.ModificationTracker
|
import com.intellij.openapi.util.ModificationTracker
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
|
import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory
|
||||||
|
|
||||||
class KotlinFirOutOfBlockModificationTrackerFactory(private val project: Project) {
|
class KotlinFirOutOfBlockModificationTrackerFactory(private val project: Project) : KotlinOutOfBlockModificationTrackerFactory() {
|
||||||
fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker =
|
override fun createProjectWideOutOfBlockModificationTracker(): ModificationTracker =
|
||||||
KotlinFirOutOfBlockModificationTracker(project)
|
KotlinFirOutOfBlockModificationTracker(project)
|
||||||
|
|
||||||
fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker =
|
override fun createModuleWithoutDependenciesOutOfBlockModificationTracker(module: Module): ModificationTracker =
|
||||||
KotlinFirOutOfBlockModuleModificationTracker(module)
|
KotlinFirOutOfBlockModuleModificationTracker(module)
|
||||||
|
|
||||||
@TestOnly
|
@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 class KotlinFirOutOfBlockModificationTracker(project: Project) : ModificationTracker {
|
||||||
private val trackerService = project.service<KotlinFirModificationTrackerService>()
|
private val trackerService = project.service<KotlinFirModificationTrackerService>()
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.trackers
|
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.openapi.util.io.FileUtil
|
||||||
import com.intellij.psi.PsiDocumentManager
|
import com.intellij.psi.PsiDocumentManager
|
||||||
import junit.framework.Assert
|
import junit.framework.Assert
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
|
import org.jetbrains.kotlin.trackers.createProjectWideOutOfBlockModificationTracker
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractProjectWideOutOfBlockKotlinModificationTrackerTest : KotlinLightCodeInsightFixtureTestCase() {
|
abstract class AbstractProjectWideOutOfBlockKotlinModificationTrackerTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||||
@@ -23,7 +23,7 @@ abstract class AbstractProjectWideOutOfBlockKotlinModificationTrackerTest : Kotl
|
|||||||
val textToType = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// TYPE:") ?: DEFAULT_TEXT_TO_TYPE
|
val textToType = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// TYPE:") ?: DEFAULT_TEXT_TO_TYPE
|
||||||
val outOfBlock = InTextDirectivesUtils.getPrefixedBoolean(fileText, "// OUT_OF_BLOCK:")
|
val outOfBlock = InTextDirectivesUtils.getPrefixedBoolean(fileText, "// OUT_OF_BLOCK:")
|
||||||
?: error("Please, specify should out of block change happen or not by `// OUT_OF_BLOCK:` directive")
|
?: 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
|
val initialModificationCount = tracker.modificationCount
|
||||||
myFixture.type(textToType)
|
myFixture.type(textToType)
|
||||||
PsiDocumentManager.getInstance(project).commitAllDocuments()
|
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.idea.util.sourceRoots
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
|
import org.jetbrains.kotlin.trackers.createModuleWithoutDependenciesOutOfBlockModificationTracker
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
import kotlin.io.path.ExperimentalPathApi
|
import kotlin.io.path.ExperimentalPathApi
|
||||||
import kotlin.io.path.writeText
|
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.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
|
||||||
|
import org.jetbrains.kotlin.trackers.KotlinOutOfBlockModificationTrackerFactory
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractMemoryLeakInSymbolsTest : KotlinLightCodeInsightFixtureTestCase() {
|
abstract class AbstractMemoryLeakInSymbolsTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||||
@@ -51,7 +52,7 @@ abstract class AbstractMemoryLeakInSymbolsTest : KotlinLightCodeInsightFixtureTe
|
|||||||
|
|
||||||
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
private fun invalidateAllCaches(ktFile: KtFile) {
|
private fun invalidateAllCaches(ktFile: KtFile) {
|
||||||
project.service<KotlinFirOutOfBlockModificationTrackerFactory>().incrementModificationsCount()
|
(project.service<KotlinOutOfBlockModificationTrackerFactory>() as KotlinFirOutOfBlockModificationTrackerFactory).incrementModificationsCount()
|
||||||
(project.service<KtAnalysisSessionProvider>() as KtFirAnalysisSessionProvider).clearCaches()
|
(project.service<KtAnalysisSessionProvider>() as KtFirAnalysisSessionProvider).clearCaches()
|
||||||
executeOnPooledThreadInReadAction { analyze(ktFile) {} }
|
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"/>
|
<highlightingPassFactory implementation="org.jetbrains.kotlin.idea.refactoring.cutPaste.MoveDeclarationsPassFactory$Registrar"/>
|
||||||
|
|
||||||
<projectService serviceImplementation="org.jetbrains.kotlin.idea.caches.trackers.KotlinCodeBlockModificationListener"/>
|
<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.gradle.target" version="2"/>
|
||||||
<statistics.counterUsagesCollector groupId="kotlin.maven.target" version="3"/>
|
<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"/>
|
<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.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"/>
|
<psi.treeChangePreprocessor implementation="org.jetbrains.kotlin.idea.fir.low.level.api.trackers.KotlinOutOfBlockPsiTreeChangePreprocessor"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user