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;
 	}