Bug 379086: [quick fix] Quick fix to add the missing cases of a switch on enum is not being proposed
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
index 6c6c621..ce747c1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
@@ -8829,7 +8829,6 @@
public void testMissingEnumConstantsInCase1() throws Exception {
Hashtable options= JavaCore.getOptions();
options.put(JavaCore.COMPILER_PB_INCOMPLETE_ENUM_SWITCH, JavaCore.WARNING);
- options.put(JavaCore.COMPILER_PB_INCOMPLETE_ENUM_SWITCH, JavaCore.WARNING);
options.put(JavaCore.COMPILER_PB_SUPPRESS_WARNINGS, JavaCore.DISABLED);
JavaCore.setOptions(options);
@@ -9042,6 +9041,92 @@
assertExpectedExistInProposals(proposals, expected);
}
+ public void testMissingEnumConstantsInCase4() throws Exception {
+ //https://bugs.eclipse.org/bugs/show_bug.cgi?id=379086
+ Hashtable options= JavaCore.getOptions();
+ options.put(JavaCore.COMPILER_PB_INCOMPLETE_ENUM_SWITCH, JavaCore.WARNING);
+ options.put(JavaCore.COMPILER_PB_SUPPRESS_WARNINGS, JavaCore.DISABLED);
+
+ JavaCore.setOptions(options);
+
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package p;\n");
+ buf.append("\n");
+ buf.append("public class E {\n");
+ buf.append(" enum MyEnum {\n");
+ buf.append(" X1, X2, X3\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" public void foo() {\n");
+ buf.append(" switch (bar()) {\n");
+ buf.append(" \n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append(" public MyEnum bar() {\n");
+ buf.append(" return null;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ ArrayList proposals= collectCorrections(cu, astRoot, 3);
+
+ assertCorrectLabels(proposals);
+ assertNumberOfProposals(proposals, 2);
+
+ String[] expected= new String[2];
+ buf= new StringBuffer();
+ buf.append("package p;\n");
+ buf.append("\n");
+ buf.append("public class E {\n");
+ buf.append(" enum MyEnum {\n");
+ buf.append(" X1, X2, X3\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" public void foo() {\n");
+ buf.append(" switch (bar()) {\n");
+ buf.append(" default :\n");
+ buf.append(" break;\n");
+ buf.append(" \n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append(" public MyEnum bar() {\n");
+ buf.append(" return null;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expected[0]= buf.toString();
+
+ buf= new StringBuffer();
+ buf.append("package p;\n");
+ buf.append("\n");
+ buf.append("public class E {\n");
+ buf.append(" enum MyEnum {\n");
+ buf.append(" X1, X2, X3\n");
+ buf.append(" }\n");
+ buf.append(" \n");
+ buf.append(" public void foo() {\n");
+ buf.append(" switch (bar()) {\n");
+ buf.append(" case X1 :\n");
+ buf.append(" break;\n");
+ buf.append(" case X2 :\n");
+ buf.append(" break;\n");
+ buf.append(" case X3 :\n");
+ buf.append(" break;\n");
+ buf.append(" default :\n");
+ buf.append(" break;\n");
+ buf.append(" \n");
+ buf.append(" }\n");
+ buf.append(" }\n");
+ buf.append(" public MyEnum bar() {\n");
+ buf.append(" return null;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ expected[1]= buf.toString();
+
+ assertExpectedExistInProposals(proposals, expected);
+ }
+
public void testMissingHashCode1() throws Exception {
IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
index 25975f9..6a8c3e6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java
@@ -1627,7 +1627,7 @@
}
ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot());
- if (selectedNode instanceof Name && selectedNode.getParent() instanceof SwitchStatement) {
+ if (selectedNode instanceof Expression && selectedNode.getLocationInParent() == SwitchStatement.EXPRESSION_PROPERTY) {
SwitchStatement statement= (SwitchStatement) selectedNode.getParent();
ITypeBinding binding= statement.getExpression().resolveTypeBinding();
if (binding == null || !binding.isEnum()) {