Temporary workaround: rename scratch files with kt extension to kts before additional api will be added in IDEA
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.scratch
|
|||||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
||||||
import com.intellij.ide.scratch.ScratchFileService
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
import com.intellij.openapi.components.AbstractProjectComponent
|
import com.intellij.openapi.components.AbstractProjectComponent
|
||||||
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener
|
import com.intellij.openapi.fileEditor.FileEditorManagerListener
|
||||||
import com.intellij.openapi.module.Module
|
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.roots.ProjectRootManager
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiManager
|
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.NotUnderContentRootModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.productionSourceInfo
|
import org.jetbrains.kotlin.idea.caches.resolve.productionSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.testSourceInfo
|
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.KtFile
|
||||||
import org.jetbrains.kotlin.psi.moduleInfo
|
import org.jetbrains.kotlin.psi.moduleInfo
|
||||||
|
|
||||||
class ScratchFileModuleInfoProvider(project: Project) : AbstractProjectComponent(project) {
|
class ScratchFileModuleInfoProvider(project: Project) : AbstractProjectComponent(project) {
|
||||||
|
private val LOG =Logger.getInstance(this.javaClass)
|
||||||
|
|
||||||
override fun projectOpened() {
|
override fun projectOpened() {
|
||||||
myProject.messageBus.connect(myProject).subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, ScratchFileModuleListener())
|
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
|
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 ->
|
getScratchPanel(ktFile)?.let { panel ->
|
||||||
ktFile.moduleInfo = getModuleInfo(panel.getModule())
|
ktFile.moduleInfo = getModuleInfo(panel.getModule())
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user