From 0f94c0901f22482e12e034a3f80248bcb7f3a8ee Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 16 Oct 2018 10:52:34 +0300 Subject: [PATCH] Introduce live templates for main without arguments #KT-27461 Fixed --- .../jetbrains/kotlin/idea/project/Platform.kt | 3 ++- .../macro/KotlinMainArgumentsMacro.kt | 24 +++++++++++++++++++ idea/idea-live-templates/testData/main.exp.kt | 2 +- .../idea-live-templates/testData/maina.exp.kt | 3 +++ idea/idea-live-templates/testData/maina.kt | 1 + .../idea/liveTemplates/LiveTemplatesTest.kt | 4 ++++ idea/resources/liveTemplates/Kotlin.xml | 18 ++++++++++++++ idea/src/META-INF/plugin.xml | 1 + idea/src/META-INF/plugin.xml.173 | 1 + idea/src/META-INF/plugin.xml.181 | 1 + idea/src/META-INF/plugin.xml.183 | 1 + idea/src/META-INF/plugin.xml.as31 | 1 + idea/src/META-INF/plugin.xml.as32 | 1 + idea/src/META-INF/plugin.xml.as33 | 1 + 14 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinMainArgumentsMacro.kt create mode 100644 idea/idea-live-templates/testData/maina.exp.kt create mode 100644 idea/idea-live-templates/testData/maina.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt index fb30d593c0c..56abe973a5d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ProjectFileIndex import com.intellij.openapi.roots.ProjectRootModificationTracker import com.intellij.openapi.util.Key import com.intellij.openapi.util.io.FileUtil +import com.intellij.psi.PsiElement import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager @@ -248,7 +249,7 @@ fun MutableMap.configureMultiplatformSup } -val KtElement.languageVersionSettings: LanguageVersionSettings +val PsiElement.languageVersionSettings: LanguageVersionSettings get() { if (ServiceManager.getService(project, ProjectFileIndex::class.java) == null) { return LanguageVersionSettingsImpl.DEFAULT diff --git a/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinMainArgumentsMacro.kt b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinMainArgumentsMacro.kt new file mode 100644 index 00000000000..44e01f1a1d8 --- /dev/null +++ b/idea/idea-live-templates/src/org/jetbrains/kotlin/idea/liveTemplates/macro/KotlinMainArgumentsMacro.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. 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.liveTemplates.macro + +import com.intellij.codeInsight.template.Expression +import com.intellij.codeInsight.template.ExpressionContext +import com.intellij.codeInsight.template.Result +import com.intellij.codeInsight.template.TextResult +import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.idea.project.languageVersionSettings + +class KotlinMainArgumentsMacro : KotlinMacro() { + override fun getName() = "kotlinMainArguments" + override fun getPresentableName() = "kotlinMainArguments()" + + override fun calculateResult(params: Array, context: ExpressionContext): Result? { + val languageVersionSettings = context.psiElementAtStartOffset?.languageVersionSettings ?: return null + if (languageVersionSettings.supportsFeature(LanguageFeature.ExtendedMainConvention)) return TextResult("") + return TextResult("args: Array") + } +} \ No newline at end of file diff --git a/idea/idea-live-templates/testData/main.exp.kt b/idea/idea-live-templates/testData/main.exp.kt index 0b0e220a256..81aaf5207cf 100644 --- a/idea/idea-live-templates/testData/main.exp.kt +++ b/idea/idea-live-templates/testData/main.exp.kt @@ -1,3 +1,3 @@ -fun main(args: Array) { +fun main() { } \ No newline at end of file diff --git a/idea/idea-live-templates/testData/maina.exp.kt b/idea/idea-live-templates/testData/maina.exp.kt new file mode 100644 index 00000000000..0b0e220a256 --- /dev/null +++ b/idea/idea-live-templates/testData/maina.exp.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + +} \ No newline at end of file diff --git a/idea/idea-live-templates/testData/maina.kt b/idea/idea-live-templates/testData/maina.kt new file mode 100644 index 00000000000..81389d50841 --- /dev/null +++ b/idea/idea-live-templates/testData/maina.kt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt b/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt index 63d0c18ab0b..4d5d90ae78e 100644 --- a/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt +++ b/idea/idea-live-templates/tests/org/jetbrains/kotlin/idea/liveTemplates/LiveTemplatesTest.kt @@ -72,6 +72,10 @@ class LiveTemplatesTest : KotlinLightCodeInsightFixtureTestCase() { paremeterless() } + fun testMaina() { + paremeterless() + } + fun testSoutv() { start() diff --git a/idea/resources/liveTemplates/Kotlin.xml b/idea/resources/liveTemplates/Kotlin.xml index a5cec007790..0f29ed7bf59 100644 --- a/idea/resources/liveTemplates/Kotlin.xml +++ b/idea/resources/liveTemplates/Kotlin.xml @@ -2,6 +2,15 @@ + +