KT-31295: Add New Kotlin Worksheet action
- creates new kotlin file with `.ws.kts` extension
This commit is contained in:
committed by
Natalia Selezneva
parent
f6b03dc02f
commit
232c7fdd0e
@@ -51,6 +51,9 @@
|
|||||||
<action id="Kotlin.NewScript" class="org.jetbrains.kotlin.idea.actions.NewKotlinScriptAction">
|
<action id="Kotlin.NewScript" class="org.jetbrains.kotlin.idea.actions.NewKotlinScriptAction">
|
||||||
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFromTemplate"/>
|
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFromTemplate"/>
|
||||||
</action>
|
</action>
|
||||||
|
<action id="Kotlin.NewWorksheet" class="org.jetbrains.kotlin.idea.actions.NewKotlinWorksheetAction">
|
||||||
|
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFromTemplate"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
<group id = "ConvertJavaToKotlinGroup">
|
<group id = "ConvertJavaToKotlinGroup">
|
||||||
<separator/>
|
<separator/>
|
||||||
@@ -381,6 +384,7 @@
|
|||||||
<internalFileTemplate name="Kotlin Class"/>
|
<internalFileTemplate name="Kotlin Class"/>
|
||||||
<internalFileTemplate name="Kotlin Enum"/>
|
<internalFileTemplate name="Kotlin Enum"/>
|
||||||
<internalFileTemplate name="Kotlin Interface"/>
|
<internalFileTemplate name="Kotlin Interface"/>
|
||||||
|
<internalFileTemplate name="Kotlin Worksheet"/>
|
||||||
<internalFileTemplate name="Kotlin Script"/>
|
<internalFileTemplate name="Kotlin Script"/>
|
||||||
|
|
||||||
<gotoSymbolContributor implementation="org.jetbrains.kotlin.idea.goto.KotlinGotoSymbolContributor"/>
|
<gotoSymbolContributor implementation="org.jetbrains.kotlin.idea.goto.KotlinGotoSymbolContributor"/>
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<table border="0" cellpadding="2" cellspacing="0" style="border-collapse: collapse">
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">
|
||||||
|
<font face="verdana" size="-1">
|
||||||
|
This is a built-in template used by <b>IDEA</b> each time you create a
|
||||||
|
Kotlin Worksheet
|
||||||
|
</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -148,7 +148,7 @@ class NewKotlinFileAction : CreateFileFromTemplateAction(
|
|||||||
get() = NameValidator
|
get() = NameValidator
|
||||||
|
|
||||||
private fun findOrCreateTarget(dir: PsiDirectory, name: String, directorySeparators: CharArray): Pair<String, PsiDirectory> {
|
private fun findOrCreateTarget(dir: PsiDirectory, name: String, directorySeparators: CharArray): Pair<String, PsiDirectory> {
|
||||||
var className = name.substringBeforeLast(".kt")
|
var className = removeKotlinExtensionIfPresent(name)
|
||||||
var targetDir = dir
|
var targetDir = dir
|
||||||
|
|
||||||
for (splitChar in directorySeparators) {
|
for (splitChar in directorySeparators) {
|
||||||
@@ -168,6 +168,13 @@ class NewKotlinFileAction : CreateFileFromTemplateAction(
|
|||||||
return Pair(className, targetDir)
|
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? {
|
private fun createFromTemplate(dir: PsiDirectory, className: String, template: FileTemplate): PsiFile? {
|
||||||
val project = dir.project
|
val project = dir.project
|
||||||
val defaultProperties = FileTemplateManager.getInstance(project).defaultProperties
|
val defaultProperties = FileTemplateManager.getInstance(project).defaultProperties
|
||||||
|
|||||||
@@ -16,12 +16,24 @@ import com.intellij.psi.PsiFile
|
|||||||
import org.jetbrains.kotlin.idea.KotlinIcons
|
import org.jetbrains.kotlin.idea.KotlinIcons
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
class NewKotlinScriptAction : CreateFileFromTemplateAction(
|
open class NewKotlinScriptAction(
|
||||||
"Kotlin Script",
|
val actionName: String,
|
||||||
"Creates new Kotlin script",
|
val description: String,
|
||||||
|
val dialogTitle: String,
|
||||||
|
val templateName: String
|
||||||
|
) : CreateFileFromTemplateAction(
|
||||||
|
actionName,
|
||||||
|
description,
|
||||||
KotlinIcons.SCRIPT
|
KotlinIcons.SCRIPT
|
||||||
), DumbAware {
|
), 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<String, String>?) {
|
override fun postProcess(createdElement: PsiFile, templateName: String?, customProperties: Map<String, String>?) {
|
||||||
super.postProcess(createdElement, templateName, customProperties)
|
super.postProcess(createdElement, templateName, customProperties)
|
||||||
|
|
||||||
@@ -33,18 +45,18 @@ class NewKotlinScriptAction : CreateFileFromTemplateAction(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
|
override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
|
||||||
builder.setTitle("New Kotlin Script")
|
builder.setTitle(dialogTitle)
|
||||||
.addKind("Kotlin Script", KotlinIcons.SCRIPT, "Kotlin Script")
|
.addKind(actionName, KotlinIcons.SCRIPT, templateName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createFileFromTemplate(name: String, template: FileTemplate, dir: PsiDirectory) =
|
override fun createFileFromTemplate(name: String, template: FileTemplate, dir: PsiDirectory) =
|
||||||
NewKotlinFileAction.createFileFromTemplateWithStat(name, template, dir)
|
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 startInWriteAction() = false
|
||||||
|
|
||||||
override fun hashCode(): Int = 0
|
override fun hashCode(): Int = 0
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean = other is NewKotlinScriptAction
|
override fun equals(other: Any?): Boolean = this::class.isInstance(other)
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user