Fixed bug 211529: [extract constant] misses case statement expression
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_in.java
new file mode 100644
index 0000000..46fecbb
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_in.java
@@ -0,0 +1,17 @@
+//7, 18, 7, 19
+package p;
+
+class A {
+ void foo(int x) {
+ switch (x) {
+ case 1 :
+ break;
+ case 2 :
+ break;
+ case 3 :
+ break;
+ default :
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_out.java
new file mode 100644
index 0000000..b29927b
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractConstant/canExtract/A_test44_out.java
@@ -0,0 +1,19 @@
+//7, 18, 7, 19
+package p;
+
+class A {
+ private static final int CONSTANT= 1;
+
+ void foo(int x) {
+ switch (x) {
+ case CONSTANT :
+ break;
+ case 2 :
+ break;
+ case 3 :
+ break;
+ default :
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
index 3bcc59a..5effd00 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractConstantTests.java
@@ -345,6 +345,10 @@
helper1(5, 20, 5, 29, false, false, "CONSTANT", "INT");
}
+ public void test44() throws Exception { // bug 211529
+ helper1(7, 18, 7, 19, false, false, "CONSTANT", "_1");
+ }
+
public void testZeroLengthSelection0() throws Exception {
helper1(5, 18, 5, 18, false, false, "CONSTANT", "_100");
}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
index c70080a..ab6f720 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractConstantRefactoring.java
@@ -815,8 +815,15 @@
}
if (parent instanceof ExpressionStatement)
return false;
- if (parent instanceof SwitchCase)
- return false;
+ if (parent instanceof SwitchCase) {
+ if (node instanceof Name) {
+ Name name= (Name) node;
+ ITypeBinding typeBinding= name.resolveTypeBinding();
+ if (typeBinding != null) {
+ return !typeBinding.isEnum();
+ }
+ }
+ }
return true;
}