Don't increase OOCB count when a REPL line is modified

This commit is contained in:
Dmitry Jemerov
2017-08-03 17:30:14 +02:00
parent 3415853cac
commit a7bbf3d1f8
3 changed files with 11 additions and 2 deletions
@@ -188,7 +188,6 @@ class LazyImportResolver(
}
fun getImportScope(directive: KtImportDirective): ImportingScope {
moduleDescriptor.assertValid()
return importedScopesProvider(directive) ?: ImportingScope.Empty
}
}
@@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.ModificationTracker
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.pom.PomManager
import com.intellij.pom.PomModelAspect
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.parents
val KOTLIN_CONSOLE_KEY = Key.create<Boolean>("kotlin.console")
/**
* Tested in OutOfBlockModificationTestGenerated
*/
@@ -81,7 +84,7 @@ class KotlinCodeBlockModificationListener(
if (changedElements.any { getInsideCodeBlockModificationScope(it.psi) == null } ||
(file is PsiCodeFragment && changedElements.isEmpty())) {
messageBusConnection.deliverImmediately()
if (file.isPhysical) {
if (file.isPhysical && !isReplLine(file.virtualFile)) {
lastAffectedModule = ModuleUtil.findModuleForPsiElement(file)
lastAffectedModuleModCount = modificationTrackerImpl.outOfCodeBlockModificationCount
modificationTrackerImpl.incCounter()
@@ -108,6 +111,10 @@ class KotlinCodeBlockModificationListener(
}
companion object {
private fun isReplLine(file: VirtualFile): Boolean {
return file.getUserData(KOTLIN_CONSOLE_KEY) == true
}
private fun incOutOfBlockModificationCount(file: KtFile) {
val count = file.getUserData(FILE_OUT_OF_BLOCK_MODIFICATION_COUNT) ?: 0
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.caches.resolve.ModuleTestSourceInfo
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.name.Name
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
@@ -136,6 +137,7 @@ class KotlinConsoleRunner(
val builder = LanguageConsoleBuilder()
val consoleView = builder.gutterContentProvider(ConsoleGutterContentProvider()).build(project, KotlinLanguage.INSTANCE)
consoleView.virtualFile.putUserData(KOTLIN_CONSOLE_KEY, true)
consoleView.prompt = null
@@ -260,6 +262,7 @@ class KotlinConsoleRunner(
val virtualFile =
LightVirtualFile("line$lineNumber${KotlinParserDefinition.STD_SCRIPT_EXT}", KotlinLanguage.INSTANCE, text).apply {
charset = CharsetToolkit.UTF8_CHARSET
isWritable = false
}
val psiFile = (PsiFileFactory.getInstance(project) as PsiFileFactoryImpl).trySetupPsiForFile(virtualFile, KotlinLanguage.INSTANCE, true, false) as KtFile?
?: error("Failed to setup PSI for file:\n$text")