diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index 97a78d54afe..4c4097a9dc8 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -51,6 +51,9 @@ + + + @@ -381,6 +384,7 @@ + diff --git a/idea/resources/fileTemplates/internal/Kotlin Worksheet.kts.ft b/idea/resources/fileTemplates/internal/Kotlin Worksheet.kts.ft new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/resources/fileTemplates/internal/Kotlin Worksheet.kts.html b/idea/resources/fileTemplates/internal/Kotlin Worksheet.kts.html new file mode 100644 index 00000000000..487e9700c3c --- /dev/null +++ b/idea/resources/fileTemplates/internal/Kotlin Worksheet.kts.html @@ -0,0 +1,14 @@ + + + + + + +
+ + This is a built-in template used by IDEA each time you create a + Kotlin Worksheet + +
+ + \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinFileAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinFileAction.kt index e3b92b836b7..67a068e4201 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinFileAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinFileAction.kt @@ -148,7 +148,7 @@ class NewKotlinFileAction : CreateFileFromTemplateAction( get() = NameValidator private fun findOrCreateTarget(dir: PsiDirectory, name: String, directorySeparators: CharArray): Pair { - var className = name.substringBeforeLast(".kt") + var className = removeKotlinExtensionIfPresent(name) var targetDir = dir for (splitChar in directorySeparators) { @@ -168,6 +168,13 @@ class NewKotlinFileAction : CreateFileFromTemplateAction( return Pair(className, targetDir) } + private fun removeKotlinExtensionIfPresent(name: String): String = when { + name.endsWith(".$KOTLIN_WORKSHEET_EXTENSION") -> name.removeSuffix(".$KOTLIN_WORKSHEET_EXTENSION") + name.endsWith(".$KOTLIN_SCRIPT_EXTENSION") -> name.removeSuffix(".$KOTLIN_SCRIPT_EXTENSION") + name.endsWith(".${KotlinFileType.EXTENSION}") -> name.removeSuffix(".${KotlinFileType.EXTENSION}") + else -> name + } + private fun createFromTemplate(dir: PsiDirectory, className: String, template: FileTemplate): PsiFile? { val project = dir.project val defaultProperties = FileTemplateManager.getInstance(project).defaultProperties diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinScriptAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinScriptAction.kt index 24f2467505b..bf4c94d9408 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinScriptAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinScriptAction.kt @@ -16,12 +16,24 @@ import com.intellij.psi.PsiFile import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.psi.KtFile -class NewKotlinScriptAction : CreateFileFromTemplateAction( - "Kotlin Script", - "Creates new Kotlin script", +open class NewKotlinScriptAction( + val actionName: String, + val description: String, + val dialogTitle: String, + val templateName: String +) : CreateFileFromTemplateAction( + actionName, + description, KotlinIcons.SCRIPT ), DumbAware { + constructor() : this( + actionName = "Kotlin Script", + description = "Creates new Kotlin script", + dialogTitle = "New Kotlin Script", + templateName = "Kotlin Script" + ) + override fun postProcess(createdElement: PsiFile, templateName: String?, customProperties: Map?) { super.postProcess(createdElement, templateName, customProperties) @@ -33,18 +45,18 @@ class NewKotlinScriptAction : CreateFileFromTemplateAction( } override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) { - builder.setTitle("New Kotlin Script") - .addKind("Kotlin Script", KotlinIcons.SCRIPT, "Kotlin Script") + builder.setTitle(dialogTitle) + .addKind(actionName, KotlinIcons.SCRIPT, templateName) } override fun createFileFromTemplate(name: String, template: FileTemplate, dir: PsiDirectory) = NewKotlinFileAction.createFileFromTemplateWithStat(name, template, dir) - override fun getActionName(directory: PsiDirectory, newName: String, templateName: String) = "Kotlin Script" + override fun getActionName(directory: PsiDirectory, newName: String, templateName: String) = actionName override fun startInWriteAction() = false override fun hashCode(): Int = 0 - override fun equals(other: Any?): Boolean = other is NewKotlinScriptAction + override fun equals(other: Any?): Boolean = this::class.isInstance(other) } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinWorksheetAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinWorksheetAction.kt new file mode 100644 index 00000000000..7b64e630afa --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/actions/NewKotlinWorksheetAction.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.actions + +import com.intellij.ide.fileTemplates.FileTemplate +import com.intellij.psi.PsiDirectory +import com.intellij.psi.PsiFile + +const val KOTLIN_WORKSHEET_EXTENSION: String = "ws.kts" +const val KOTLIN_SCRIPT_EXTENSION = "kts" + +class NewKotlinWorksheetAction : NewKotlinScriptAction( + actionName = "Kotlin Worksheet", + description = "Creates new Kotlin Worksheet", + dialogTitle = "New Kotlin Worksheet", + templateName = "Kotlin Worksheet" +) { + + override fun createFileFromTemplate(name: String, template: FileTemplate, dir: PsiDirectory): PsiFile? { + val kotlinWorksheetTemplate = object : FileTemplate by template { + override fun getExtension(): String = KOTLIN_WORKSHEET_EXTENSION + } + + return super.createFileFromTemplate(name, kotlinWorksheetTemplate, dir) + } +} \ No newline at end of file