diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 7f3404bb41f..20edfcd71ec 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -135,6 +135,7 @@ + diff --git a/idea/src/org/jetbrains/jet/plugin/editor/wordSelection/JetListSelectioner.java b/idea/src/org/jetbrains/jet/plugin/editor/wordSelection/JetListSelectioner.java new file mode 100644 index 00000000000..09ac4a416dd --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/editor/wordSelection/JetListSelectioner.java @@ -0,0 +1,56 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.editor.wordSelection; + +import com.intellij.codeInsight.editorActions.wordSelection.BasicSelectioner; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import com.intellij.psi.tree.TokenSet; +import org.jetbrains.jet.lang.psi.JetParameterList; +import org.jetbrains.jet.lang.psi.JetTypeArgumentList; +import org.jetbrains.jet.lang.psi.JetTypeParameterList; +import org.jetbrains.jet.lang.psi.JetValueArgumentList; +import org.jetbrains.jet.lexer.JetTokens; + +import java.util.Arrays; +import java.util.List; + +/** + * @author Evgeny Gerashchenko + * @since 4/23/12 + */ +public class JetListSelectioner extends BasicSelectioner { + @Override + public boolean canSelect(PsiElement e) { + return e instanceof JetParameterList || e instanceof JetValueArgumentList || + e instanceof JetTypeParameterList || e instanceof JetTypeArgumentList; + } + + @Override + public List select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) { + ASTNode node = e.getNode(); + ASTNode startNode = node.findChildByType(TokenSet.create(JetTokens.LPAR, JetTokens.LT)); + ASTNode endNode = node.findChildByType(TokenSet.create(JetTokens.RPAR, JetTokens.GT)); + if (startNode != null && endNode != null) { + return Arrays.asList(new TextRange(startNode.getStartOffset() + 1, endNode.getStartOffset())); + } else { + return Arrays.asList(); + } + } +} diff --git a/idea/testData/wordSelection/TypeArguments.1.kt b/idea/testData/wordSelection/TypeArguments.1.kt new file mode 100644 index 00000000000..c2720afa24f --- /dev/null +++ b/idea/testData/wordSelection/TypeArguments.1.kt @@ -0,0 +1,3 @@ +fun foo() { + foo<Int, B>() +} diff --git a/idea/testData/wordSelection/TypeArguments.kt b/idea/testData/wordSelection/TypeArguments.kt new file mode 100644 index 00000000000..0585d99d48b --- /dev/null +++ b/idea/testData/wordSelection/TypeArguments.kt @@ -0,0 +1,3 @@ +fun foo() { + foo<Int, B>() +} diff --git a/idea/testData/wordSelection/TypeParameters.1.kt b/idea/testData/wordSelection/TypeParameters.1.kt new file mode 100644 index 00000000000..332865cfb5a --- /dev/null +++ b/idea/testData/wordSelection/TypeParameters.1.kt @@ -0,0 +1,2 @@ +fun <A, B> foo() { +} diff --git a/idea/testData/wordSelection/TypeParameters.kt b/idea/testData/wordSelection/TypeParameters.kt new file mode 100644 index 00000000000..d8509f74fdc --- /dev/null +++ b/idea/testData/wordSelection/TypeParameters.kt @@ -0,0 +1,2 @@ +fun B> foo() { +} diff --git a/idea/testData/wordSelection/ValueArguments.1.kt b/idea/testData/wordSelection/ValueArguments.1.kt new file mode 100644 index 00000000000..0078192e4dc --- /dev/null +++ b/idea/testData/wordSelection/ValueArguments.1.kt @@ -0,0 +1,3 @@ +fun foo() { + foo(1, 2) +} diff --git a/idea/testData/wordSelection/ValueArguments.kt b/idea/testData/wordSelection/ValueArguments.kt new file mode 100644 index 00000000000..54dee47384a --- /dev/null +++ b/idea/testData/wordSelection/ValueArguments.kt @@ -0,0 +1,3 @@ +fun foo() { + foo(1, 2) +} diff --git a/idea/testData/wordSelection/ValueParameters.1.kt b/idea/testData/wordSelection/ValueParameters.1.kt new file mode 100644 index 00000000000..df0a9e6bb58 --- /dev/null +++ b/idea/testData/wordSelection/ValueParameters.1.kt @@ -0,0 +1,2 @@ +fun foo(a : Array, b : Int) { +} diff --git a/idea/testData/wordSelection/ValueParameters.kt b/idea/testData/wordSelection/ValueParameters.kt new file mode 100644 index 00000000000..1105f741877 --- /dev/null +++ b/idea/testData/wordSelection/ValueParameters.kt @@ -0,0 +1,2 @@ +fun foo(a : Array, b : Int) { +} diff --git a/idea/tests/org/jetbrains/jet/plugin/WordSelectionTest.java b/idea/tests/org/jetbrains/jet/plugin/WordSelectionTest.java index 21c82df53b1..82c6031392e 100644 --- a/idea/tests/org/jetbrains/jet/plugin/WordSelectionTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/WordSelectionTest.java @@ -35,6 +35,22 @@ public class WordSelectionTest extends LightCodeInsightFixtureTestCase { doTest(6); } + public void testTypeArguments() { + doTest(1); + } + + public void testValueArguments() { + doTest(1); + } + + public void testTypeParameters() { + doTest(1); + } + + public void testValueParameters() { + doTest(1); + } + private void doTest(int howMany) { String testName = getTestName(false); String[] afterFiles = new String[howMany];