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 1e0ea4cb64e..bc03463d8a4 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 @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.scratch import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer import com.intellij.ide.scratch.ScratchFileService import com.intellij.openapi.components.AbstractProjectComponent +import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.fileEditor.FileEditorManagerListener import com.intellij.openapi.module.Module @@ -26,13 +27,18 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiManager +import org.jetbrains.kotlin.idea.KotlinFileType 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.util.application.runWriteAction +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 import org.jetbrains.kotlin.psi.moduleInfo class ScratchFileModuleInfoProvider(project: Project) : AbstractProjectComponent(project) { + private val LOG =Logger.getInstance(this.javaClass) override fun projectOpened() { myProject.messageBus.connect(myProject).subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, ScratchFileModuleListener()) @@ -45,6 +51,24 @@ class ScratchFileModuleInfoProvider(project: Project) : AbstractProjectComponent val ktFile = PsiManager.getInstance(myProject).findFile(file) as? KtFile ?: return + // Hack before api in IDEA will be introduced + if (file.extension == KotlinFileType.EXTENSION) { + runWriteAction { + var newName = file.nameWithoutExtension + STD_SCRIPT_EXT + var i = 1 + while (file.parent.findChild(newName) != null) { + newName = file.nameWithoutExtension + "_" + i + STD_SCRIPT_EXT + i++ + } + file.rename(this, newName) + } + } + + if (file.extension != STD_SCRIPT_SUFFIX) { + LOG.error("Kotlin Scratch file should have .kts extension. Cannot add scratch panel for ${file.path}") + return + } + getScratchPanel(ktFile)?.let { panel -> ktFile.moduleInfo = getModuleInfo(panel.getModule())