diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt index 50772d95b08..540a0a8eeaf 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt @@ -17,23 +17,21 @@ package org.jetbrains.kotlin.idea.scratch import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer -import com.intellij.openapi.components.ProjectComponent import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.KotlinFileType +import com.intellij.openapi.startup.StartupActivity import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker import org.jetbrains.kotlin.idea.core.script.scriptRelatedModuleName -import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.projectStructure.getModule -import org.jetbrains.kotlin.parsing.KotlinParserDefinition.Companion.STD_SCRIPT_EXT import org.jetbrains.kotlin.parsing.KotlinParserDefinition.Companion.STD_SCRIPT_SUFFIX import org.jetbrains.kotlin.psi.KtFile -class ScratchFileModuleInfoProvider(val project: Project) : ProjectComponent { +// BUNCH: 192 +class ScratchFileModuleInfoProvider : StartupActivity { private val LOG = Logger.getInstance(this.javaClass) - override fun projectOpened() { + override fun runActivity(project: Project) { project.messageBus.connect().subscribe(ScratchFileListener.TOPIC, object : ScratchFileListener { override fun fileCreated(scratchFile: ScratchFile) { val ktFile = scratchFile.getPsiFile() as? KtFile ?: return diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt.192 b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt.192 new file mode 100644 index 00000000000..300dfef3038 --- /dev/null +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/scratch/ScratchFileModuleInfoProvider.kt.192 @@ -0,0 +1,64 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.scratch + +import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer +import com.intellij.openapi.components.ProjectComponent +import com.intellij.openapi.diagnostic.Logger +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker +import org.jetbrains.kotlin.idea.core.script.scriptRelatedModuleName +import org.jetbrains.kotlin.idea.util.projectStructure.getModule +import org.jetbrains.kotlin.parsing.KotlinParserDefinition.Companion.STD_SCRIPT_SUFFIX +import org.jetbrains.kotlin.psi.KtFile + +// BUNCH: 192 +class ScratchFileModuleInfoProvider(val project: Project) : ProjectComponent { + private val LOG = Logger.getInstance(this.javaClass) + + override fun projectOpened() { + project.messageBus.connect().subscribe(ScratchFileListener.TOPIC, object : ScratchFileListener { + override fun fileCreated(scratchFile: ScratchFile) { + val ktFile = scratchFile.getPsiFile() as? KtFile ?: return + val file = ktFile.virtualFile ?: return + + if (file.extension != STD_SCRIPT_SUFFIX) { + LOG.error("Kotlin Scratch file should have .kts extension. Cannot add scratch panel for ${file.path}") + return + } + + scratchFile.addModuleListener { psiFile, module -> + psiFile.virtualFile.scriptRelatedModuleName = module?.name + + // Drop caches for old module + ScriptDependenciesModificationTracker.getInstance(project).incModificationCount() + // Force re-highlighting + DaemonCodeAnalyzer.getInstance(project).restart(psiFile) + } + + if (file.isKotlinWorksheet) { + val module = file.getModule(project) ?: return + scratchFile.setModule(module) + } else { + val module = file.scriptRelatedModuleName?.let { ModuleManager.getInstance(project).findModuleByName(it) } ?: return + scratchFile.setModule(module) + } + } + }) + } +} \ No newline at end of file diff --git a/idea/resources/META-INF/jvm-common.xml b/idea/resources/META-INF/jvm-common.xml index 2e1687132c0..99a176dc5bc 100644 --- a/idea/resources/META-INF/jvm-common.xml +++ b/idea/resources/META-INF/jvm-common.xml @@ -1,10 +1,4 @@ - - - org.jetbrains.kotlin.idea.scratch.ScratchFileModuleInfoProvider - - - + diff --git a/idea/resources/META-INF/jvm.xml.192 b/idea/resources/META-INF/jvm.xml.192 index 9181ff60274..9a98acdc648 100644 --- a/idea/resources/META-INF/jvm.xml.192 +++ b/idea/resources/META-INF/jvm.xml.192 @@ -9,6 +9,9 @@ org.jetbrains.kotlin.idea.compiler.KotlinCompilerManager + + org.jetbrains.kotlin.idea.scratch.ScratchFileModuleInfoProvider + org.jetbrains.kotlin.idea.configuration.ui.KotlinConfigurationCheckerComponent diff --git a/idea/resources/META-INF/jvm.xml.201 b/idea/resources/META-INF/jvm.xml.201 index 7b7605ae063..a320eca80d8 100644 --- a/idea/resources/META-INF/jvm.xml.201 +++ b/idea/resources/META-INF/jvm.xml.201 @@ -8,6 +8,7 @@ +