Don't increase OOCB count when a REPL line is modified
This commit is contained in:
@@ -188,7 +188,6 @@ class LazyImportResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getImportScope(directive: KtImportDirective): ImportingScope {
|
fun getImportScope(directive: KtImportDirective): ImportingScope {
|
||||||
moduleDescriptor.assertValid()
|
|
||||||
return importedScopesProvider(directive) ?: ImportingScope.Empty
|
return importedScopesProvider(directive) ?: ImportingScope.Empty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-1
@@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.util.ModificationTracker
|
import com.intellij.openapi.util.ModificationTracker
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.pom.PomManager
|
import com.intellij.pom.PomManager
|
||||||
import com.intellij.pom.PomModelAspect
|
import com.intellij.pom.PomModelAspect
|
||||||
import com.intellij.pom.event.PomModelEvent
|
import com.intellij.pom.event.PomModelEvent
|
||||||
@@ -38,6 +39,8 @@ import org.jetbrains.kotlin.psi.psiUtil.getTopmostParentOfType
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parents
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
|
|
||||||
|
val KOTLIN_CONSOLE_KEY = Key.create<Boolean>("kotlin.console")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tested in OutOfBlockModificationTestGenerated
|
* Tested in OutOfBlockModificationTestGenerated
|
||||||
*/
|
*/
|
||||||
@@ -81,7 +84,7 @@ class KotlinCodeBlockModificationListener(
|
|||||||
if (changedElements.any { getInsideCodeBlockModificationScope(it.psi) == null } ||
|
if (changedElements.any { getInsideCodeBlockModificationScope(it.psi) == null } ||
|
||||||
(file is PsiCodeFragment && changedElements.isEmpty())) {
|
(file is PsiCodeFragment && changedElements.isEmpty())) {
|
||||||
messageBusConnection.deliverImmediately()
|
messageBusConnection.deliverImmediately()
|
||||||
if (file.isPhysical) {
|
if (file.isPhysical && !isReplLine(file.virtualFile)) {
|
||||||
lastAffectedModule = ModuleUtil.findModuleForPsiElement(file)
|
lastAffectedModule = ModuleUtil.findModuleForPsiElement(file)
|
||||||
lastAffectedModuleModCount = modificationTrackerImpl.outOfCodeBlockModificationCount
|
lastAffectedModuleModCount = modificationTrackerImpl.outOfCodeBlockModificationCount
|
||||||
modificationTrackerImpl.incCounter()
|
modificationTrackerImpl.incCounter()
|
||||||
@@ -108,6 +111,10 @@ class KotlinCodeBlockModificationListener(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
private fun isReplLine(file: VirtualFile): Boolean {
|
||||||
|
return file.getUserData(KOTLIN_CONSOLE_KEY) == true
|
||||||
|
}
|
||||||
|
|
||||||
private fun incOutOfBlockModificationCount(file: KtFile) {
|
private fun incOutOfBlockModificationCount(file: KtFile) {
|
||||||
val count = file.getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) ?: 0
|
val count = file.getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) ?: 0
|
||||||
file.putUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT, count + 1)
|
file.putUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT, count + 1)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ import org.jetbrains.kotlin.console.gutter.ReplIcons
|
|||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ModuleTestSourceInfo
|
import org.jetbrains.kotlin.idea.caches.resolve.ModuleTestSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
|
||||||
|
import org.jetbrains.kotlin.idea.project.KOTLIN_CONSOLE_KEY
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
@@ -136,6 +137,7 @@ class KotlinConsoleRunner(
|
|||||||
val builder = LanguageConsoleBuilder()
|
val builder = LanguageConsoleBuilder()
|
||||||
|
|
||||||
val consoleView = builder.gutterContentProvider(ConsoleGutterContentProvider()).build(project, KotlinLanguage.INSTANCE)
|
val consoleView = builder.gutterContentProvider(ConsoleGutterContentProvider()).build(project, KotlinLanguage.INSTANCE)
|
||||||
|
consoleView.virtualFile.putUserData(KOTLIN_CONSOLE_KEY, true)
|
||||||
|
|
||||||
|
|
||||||
consoleView.prompt = null
|
consoleView.prompt = null
|
||||||
@@ -260,6 +262,7 @@ class KotlinConsoleRunner(
|
|||||||
val virtualFile =
|
val virtualFile =
|
||||||
LightVirtualFile("line$lineNumber${KotlinParserDefinition.STD_SCRIPT_EXT}", KotlinLanguage.INSTANCE, text).apply {
|
LightVirtualFile("line$lineNumber${KotlinParserDefinition.STD_SCRIPT_EXT}", KotlinLanguage.INSTANCE, text).apply {
|
||||||
charset = CharsetToolkit.UTF8_CHARSET
|
charset = CharsetToolkit.UTF8_CHARSET
|
||||||
|
isWritable = false
|
||||||
}
|
}
|
||||||
val psiFile = (PsiFileFactory.getInstance(project) as PsiFileFactoryImpl).trySetupPsiForFile(virtualFile, KotlinLanguage.INSTANCE, true, false) as KtFile?
|
val psiFile = (PsiFileFactory.getInstance(project) as PsiFileFactoryImpl).trySetupPsiForFile(virtualFile, KotlinLanguage.INSTANCE, true, false) as KtFile?
|
||||||
?: error("Failed to setup PSI for file:\n$text")
|
?: error("Failed to setup PSI for file:\n$text")
|
||||||
|
|||||||
Reference in New Issue
Block a user