From f1dc09f83979882477c4749b2f75a081529aa9d7 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Tue, 21 Aug 2018 00:05:15 +0900 Subject: [PATCH] Add postfix template for the spread operator #KT-26249 Fixed --- .../KtSpreadPostfixTemplate/after.kt.template | 5 +++++ .../KtSpreadPostfixTemplate/before.kt.template | 5 +++++ .../KtSpreadPostfixTemplate/description.html | 5 +++++ .../codeInsight/postfix/KtPostfixTemplateProvider.kt | 3 ++- .../codeInsight/postfix/stringBasedPostfixTemplates.kt | 8 ++++++++ idea/testData/codeInsight/postfix/spread.kt | 5 +++++ idea/testData/codeInsight/postfix/spread.kt.after | 5 +++++ idea/testData/codeInsight/postfix/spreadIntArray.kt | 5 +++++ .../codeInsight/postfix/spreadIntArray.kt.after | 5 +++++ .../postfix/PostfixTemplateProviderTestGenerated.java | 10 ++++++++++ 10 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 idea/resources/postfixTemplates/KtSpreadPostfixTemplate/after.kt.template create mode 100644 idea/resources/postfixTemplates/KtSpreadPostfixTemplate/before.kt.template create mode 100644 idea/resources/postfixTemplates/KtSpreadPostfixTemplate/description.html create mode 100644 idea/testData/codeInsight/postfix/spread.kt create mode 100644 idea/testData/codeInsight/postfix/spread.kt.after create mode 100644 idea/testData/codeInsight/postfix/spreadIntArray.kt create mode 100644 idea/testData/codeInsight/postfix/spreadIntArray.kt.after diff --git a/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/after.kt.template b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/after.kt.template new file mode 100644 index 00000000000..a136f310327 --- /dev/null +++ b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/after.kt.template @@ -0,0 +1,5 @@ +fun foo(list: List) { + bar(*list.toTypedArray()) +} + +fun bar(vararg args: String) {} \ No newline at end of file diff --git a/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/before.kt.template b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/before.kt.template new file mode 100644 index 00000000000..ba232968d72 --- /dev/null +++ b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/before.kt.template @@ -0,0 +1,5 @@ +fun foo(list: List) { + bar(list.toTypedArray()$key) +} + +fun bar(vararg args: String) {} \ No newline at end of file diff --git a/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/description.html b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/description.html new file mode 100644 index 00000000000..5ce788fbc75 --- /dev/null +++ b/idea/resources/postfixTemplates/KtSpreadPostfixTemplate/description.html @@ -0,0 +1,5 @@ + + +Add the spread operator to the prefix. + + \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/KtPostfixTemplateProvider.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/KtPostfixTemplateProvider.kt index aba98ab8860..69e5adffe06 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/KtPostfixTemplateProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/KtPostfixTemplateProvider.kt @@ -62,7 +62,8 @@ class KtPostfixTemplateProvider : PostfixTemplateProvider { KtWrapWithListOfPostfixTemplate, KtWrapWithSetOfPostfixTemplate, KtWrapWithArrayOfPostfixTemplate, - KtWrapWithSequenceOfPostfixTemplate + KtWrapWithSequenceOfPostfixTemplate, + KtSpreadPostfixTemplate ) override fun isTerminalSymbol(currentChar: Char) = currentChar == '.' || currentChar == '!' diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/stringBasedPostfixTemplates.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/stringBasedPostfixTemplates.kt index 40582c11a79..d5adf11da95 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/stringBasedPostfixTemplates.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/postfix/stringBasedPostfixTemplates.kt @@ -22,6 +22,7 @@ import com.intellij.codeInsight.template.impl.MacroCallNode import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateExpressionSelector import com.intellij.codeInsight.template.postfix.templates.StringBasedPostfixTemplate import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.IterableTypesDetection import org.jetbrains.kotlin.idea.liveTemplates.macro.SuggestVariableNameMacro @@ -112,3 +113,10 @@ internal object KtWhilePostfixTemplate : ConstantStringBasedPostfixTemplate( "while (\$expr$) {\n\$END$\n}", createExpressionSelector(statementsOnly = true, typePredicate = KotlinType::isBoolean) ) + +internal object KtSpreadPostfixTemplate : ConstantStringBasedPostfixTemplate( + "spread", + "*expr", + "*\$expr$\$END$", + createExpressionSelector(typePredicate = { KotlinBuiltIns.isArray(it) || KotlinBuiltIns.isPrimitiveArray(it) }) +) \ No newline at end of file diff --git a/idea/testData/codeInsight/postfix/spread.kt b/idea/testData/codeInsight/postfix/spread.kt new file mode 100644 index 00000000000..4fb17351a3f --- /dev/null +++ b/idea/testData/codeInsight/postfix/spread.kt @@ -0,0 +1,5 @@ +fun test(list: List) { + foo(list.toTypedArray().spread) +} + +fun foo(vararg args: String) {} \ No newline at end of file diff --git a/idea/testData/codeInsight/postfix/spread.kt.after b/idea/testData/codeInsight/postfix/spread.kt.after new file mode 100644 index 00000000000..cd75bcdc357 --- /dev/null +++ b/idea/testData/codeInsight/postfix/spread.kt.after @@ -0,0 +1,5 @@ +fun test(list: List) { + foo(*list.toTypedArray()) +} + +fun foo(vararg args: String) {} \ No newline at end of file diff --git a/idea/testData/codeInsight/postfix/spreadIntArray.kt b/idea/testData/codeInsight/postfix/spreadIntArray.kt new file mode 100644 index 00000000000..c65e9330d44 --- /dev/null +++ b/idea/testData/codeInsight/postfix/spreadIntArray.kt @@ -0,0 +1,5 @@ +fun test(a: IntArray) { + foo(a.spread) +} + +fun foo(vararg args: Int) {} \ No newline at end of file diff --git a/idea/testData/codeInsight/postfix/spreadIntArray.kt.after b/idea/testData/codeInsight/postfix/spreadIntArray.kt.after new file mode 100644 index 00000000000..b2d353db966 --- /dev/null +++ b/idea/testData/codeInsight/postfix/spreadIntArray.kt.after @@ -0,0 +1,5 @@ +fun test(a: IntArray) { + foo(*a) +} + +fun foo(vararg args: Int) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/postfix/PostfixTemplateProviderTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/postfix/PostfixTemplateProviderTestGenerated.java index 0fba48ce34d..043deb8d467 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/postfix/PostfixTemplateProviderTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/postfix/PostfixTemplateProviderTestGenerated.java @@ -144,6 +144,16 @@ public class PostfixTemplateProviderTestGenerated extends AbstractPostfixTemplat runTest("idea/testData/codeInsight/postfix/soutInLoop.kt"); } + @TestMetadata("spread.kt") + public void testSpread() throws Exception { + runTest("idea/testData/codeInsight/postfix/spread.kt"); + } + + @TestMetadata("spreadIntArray.kt") + public void testSpreadIntArray() throws Exception { + runTest("idea/testData/codeInsight/postfix/spreadIntArray.kt"); + } + @TestMetadata("try.kt") public void testTry() throws Exception { runTest("idea/testData/codeInsight/postfix/try.kt");