diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/JavaMoveLeftRightHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/JavaMoveLeftRightHandler.java index 29d7a9ec227b..971dceda57a2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/JavaMoveLeftRightHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/moveLeftRight/JavaMoveLeftRightHandler.java @@ -17,8 +17,11 @@ package com.intellij.codeInsight.editorActions.moveLeftRight; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import java.util.List; + public class JavaMoveLeftRightHandler extends MoveElementLeftRightHandler { @NotNull @Override @@ -53,6 +56,21 @@ public class JavaMoveLeftRightHandler extends MoveElementLeftRightHandler { else if (element instanceof PsiPolyadicExpression) { return ((PsiPolyadicExpression)element).getOperands(); } + else if (element instanceof PsiReferenceParameterList) { + return ((PsiReferenceParameterList)element).getTypeParameterElements(); + } + else if (element instanceof PsiTypeParameterList) { + return ((PsiTypeParameterList)element).getTypeParameters(); + } + else if (element instanceof PsiModifierList) { + final List result = ContainerUtil.newSmartList(); + for (PsiElement child = element.getFirstChild(); child != null; child = child.getNextSibling()) { + if (child instanceof PsiKeyword || child instanceof PsiAnnotation) { + result.add(child); + } + } + return result.toArray(PsiElement.EMPTY_ARRAY); + } return PsiElement.EMPTY_ARRAY; } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/editorActions/MoveElementLeftRightTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/editorActions/MoveElementLeftRightTest.java index cef4936f9c3e..b9f1980bcb5e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/editorActions/MoveElementLeftRightTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/editorActions/MoveElementLeftRightTest.java @@ -111,6 +111,21 @@ public class MoveElementLeftRightTest extends AbstractMoveElementLeftRightTest { "class C { int i = 2 + 3 + 1; }"); } + public void testMoveTypeParameter() throws Exception { + doTestFromLeftToRight("class C {{ java.util.Map, String> map; }}", + "class C {{ java.util.Map> map; }}"); + } + + public void testMoveClassTypeParameter() throws Exception { + doTestFromLeftToRight("class C<A, B> {}", + "class CA> {}"); + } + + public void testMoveModifier() throws Exception { + doTestFromLeftToRight("@SuppressWarnings(\"ALL\") final class C {}", + "final @SuppressWarnings(\"ALL\") class C {}"); + } + @Override protected void configureEditor(String contents) throws Exception { init(contents, TestFileType.JAVA);