From 25d3334300900f18fb897b6ee030faafef3a9231 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 6 Nov 2015 15:09:47 +0100 Subject: [PATCH] move member: restore qualifier in switch labels for non-enum constants (IDEA-147539) --- .../move/moveMembers/MoveJavaMemberHandler.java | 17 +++++++++-------- .../after/A.java | 2 ++ .../after/B.java | 13 +++++++++++++ .../before/A.java | 3 +++ .../before/B.java | 12 ++++++++++++ .../intellij/refactoring/MoveMembersTest.java | 7 +++++-- 6 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/A.java create mode 100644 java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/B.java create mode 100644 java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/A.java create mode 100644 java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/B.java diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java index 59dbd1ab271f..742f955d6dbf 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java @@ -179,14 +179,15 @@ public class MoveJavaMemberHandler implements MoveMemberHandler { changeQualifier(refExpr, usage.qualifierClass, usage.member); } else { - final PsiReferenceParameterList parameterList = refExpr.getParameterList(); - if (parameterList != null && parameterList.getTypeArguments().length == 0 && !(refExpr instanceof PsiMethodReferenceExpression)){ - refExpr.setQualifierExpression(null); - } else { - final Project project = element.getProject(); - final PsiClass targetClass = - JavaPsiFacade.getInstance(project).findClass(options.getTargetClassName(), GlobalSearchScope.projectScope(project)); - if (targetClass != null) { + final Project project = element.getProject(); + final PsiClass targetClass = + JavaPsiFacade.getInstance(project).findClass(options.getTargetClassName(), GlobalSearchScope.projectScope(project)); + if (targetClass != null) { + final PsiReferenceParameterList parameterList = refExpr.getParameterList(); + if ((targetClass.isEnum() || PsiTreeUtil.isAncestor(targetClass, element, true)) && parameterList != null && parameterList.getTypeArguments().length == 0 && !(refExpr instanceof PsiMethodReferenceExpression)) { + refExpr.setQualifierExpression(null); + } + else { changeQualifier(refExpr, targetClass, usage.member); } } diff --git a/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/A.java b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/A.java new file mode 100644 index 000000000000..8a58812a49b2 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/A.java @@ -0,0 +1,2 @@ +public interface A { +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/B.java b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/B.java new file mode 100644 index 000000000000..cc08541ae1bc --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/after/B.java @@ -0,0 +1,13 @@ +public class B { + + public static final String FOO = "FOO"; +} + +class U { + public void example(String foo) { + switch (foo) { + case B.FOO: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/A.java b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/A.java new file mode 100644 index 000000000000..0451878b749f --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/A.java @@ -0,0 +1,3 @@ +public interface A { + public static final String FOO = "FOO"; +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/B.java b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/B.java new file mode 100644 index 000000000000..309cd8c107c3 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/stringConstantInSwitchLabelExpression/before/B.java @@ -0,0 +1,12 @@ +public class B { + +} + +class U { + public void example(String foo) { + switch (foo) { + case A.FOO: + break; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java index e1e66c483fc4..79435401350a 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java @@ -18,7 +18,6 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -174,7 +173,11 @@ public class MoveMembersTest extends MultiFileTestCase { public void testEscalateVisibility1() throws Exception { doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0); } - + + public void testStringConstantInSwitchLabelExpression() throws Exception { + doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0); + } + public void testMultipleWithDependencies() throws Exception { doTest("A", "B", true, VisibilityUtil.ESCALATE_VISIBILITY, 0, 1); } -- 2.32.0