Refactor script definitions loading
Make ScriptDefinitionProvider an interface
and provide different implementation for cli and IDEA
Rework ide extension point to a simpler interface (ScriptDefinitionContributor)
Move template loading logic into a top level function
Allow script definitions to be reloaded in IDE
This commit is contained in:
@@ -46,6 +46,7 @@ import com.intellij.psi.PsiFileFactory
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.impl.PsiFileFactoryImpl
|
||||
import com.intellij.testFramework.LightVirtualFile
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.console.actions.BuildAndRestartConsoleAction
|
||||
import org.jetbrains.kotlin.console.actions.KtExecuteCommandAction
|
||||
@@ -54,7 +55,12 @@ import org.jetbrains.kotlin.console.gutter.ConsoleIndicatorRenderer
|
||||
import org.jetbrains.kotlin.console.gutter.IconWithTooltip
|
||||
import org.jetbrains.kotlin.console.gutter.ReplIcons
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.*
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.NotUnderContentRootModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.productionSourceInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.testSourceInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionContributor
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
|
||||
import org.jetbrains.kotlin.idea.project.KOTLIN_CONSOLE_KEY
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -66,7 +72,6 @@ import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyScriptDescriptor
|
||||
import org.jetbrains.kotlin.resolve.repl.ReplState
|
||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProvider
|
||||
import java.awt.Color
|
||||
import java.awt.Font
|
||||
import java.util.concurrent.CountDownLatch
|
||||
@@ -89,7 +94,9 @@ class KotlinConsoleRunner(
|
||||
|
||||
override fun finishConsole() {
|
||||
KotlinConsoleKeeper.getInstance(project).removeConsole(consoleView.virtualFile)
|
||||
KotlinScriptDefinitionProvider.getInstance(project)!!.removeScriptDefinition(consoleScriptDefinition)
|
||||
val consoleContributor = ScriptDefinitionContributor.find<ConsoleScriptDefinitionContributor>(project)!!
|
||||
consoleContributor.unregisterDefinition(consoleScriptDefinition)
|
||||
ScriptDefinitionsManager.getInstance(project).reloadDefinitionsBy(consoleContributor)
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode) {
|
||||
consoleTerminated.countDown()
|
||||
@@ -151,7 +158,10 @@ class KotlinConsoleRunner(
|
||||
val executeAction = KtExecuteCommandAction(consoleView.virtualFile)
|
||||
executeAction.registerCustomShortcutSet(CommonShortcuts.CTRL_ENTER, consoleView.consoleEditor.component)
|
||||
|
||||
KotlinScriptDefinitionProvider.getInstance(project)!!.addScriptDefinition(consoleScriptDefinition)
|
||||
val consoleContributor = ScriptDefinitionContributor.find<ConsoleScriptDefinitionContributor>(project)!!
|
||||
consoleContributor.registerDefinition(consoleScriptDefinition)
|
||||
ScriptDefinitionsManager.getInstance(project).reloadDefinitionsBy(consoleContributor)
|
||||
|
||||
enableCompletion(consoleView)
|
||||
|
||||
return consoleView
|
||||
@@ -285,4 +295,22 @@ class KotlinConsoleRunner(
|
||||
private fun configureFileDependencies(psiFile: KtFile) {
|
||||
psiFile.moduleInfo = module.testSourceInfo() ?: module.productionSourceInfo() ?: NotUnderContentRootModuleInfo
|
||||
}
|
||||
}
|
||||
|
||||
class ConsoleScriptDefinitionContributor: ScriptDefinitionContributor {
|
||||
private val definitions = ContainerUtil.newConcurrentSet<KotlinScriptDefinition>()
|
||||
|
||||
override val id: String = "IDEA Console"
|
||||
|
||||
override fun getDefinitions(): List<KotlinScriptDefinition> {
|
||||
return definitions.toList()
|
||||
}
|
||||
|
||||
fun registerDefinition(definition: KotlinScriptDefinition) {
|
||||
definitions.add(definition)
|
||||
}
|
||||
|
||||
fun unregisterDefinition(definition: KotlinScriptDefinition) {
|
||||
definitions.remove(definition)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user