Add postfix template for the spread operator #KT-26249 Fixed

This commit is contained in:
Toshiaki Kameyama
2018-08-21 00:05:15 +09:00
committed by Alexander Podkhalyuzin
parent 32d910320f
commit f1dc09f839
10 changed files with 55 additions and 1 deletions
@@ -0,0 +1,5 @@
fun foo(list: List<String>) {
bar(<spot>*</spot>list.toTypedArray())
}
fun bar(vararg args: String) {}
@@ -0,0 +1,5 @@
fun foo(list: List<String>) {
bar(<spot>list.toTypedArray()</spot>$key)
}
fun bar(vararg args: String) {}
@@ -0,0 +1,5 @@
<html>
<body>
Add the spread operator to the prefix.
</body>
</html>
@@ -62,7 +62,8 @@ class KtPostfixTemplateProvider : PostfixTemplateProvider {
KtWrapWithListOfPostfixTemplate,
KtWrapWithSetOfPostfixTemplate,
KtWrapWithArrayOfPostfixTemplate,
KtWrapWithSequenceOfPostfixTemplate
KtWrapWithSequenceOfPostfixTemplate,
KtSpreadPostfixTemplate
)
override fun isTerminalSymbol(currentChar: Char) = currentChar == '.' || currentChar == '!'
@@ -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) })
)
+5
View File
@@ -0,0 +1,5 @@
fun test(list: List<String>) {
foo(list.toTypedArray().spread<caret>)
}
fun foo(vararg args: String) {}
+5
View File
@@ -0,0 +1,5 @@
fun test(list: List<String>) {
foo(*list.toTypedArray())
}
fun foo(vararg args: String) {}
+5
View File
@@ -0,0 +1,5 @@
fun test(a: IntArray) {
foo(a.spread<caret>)
}
fun foo(vararg args: Int) {}
@@ -0,0 +1,5 @@
fun test(a: IntArray) {
foo(*a)
}
fun foo(vararg args: Int) {}
@@ -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");