Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Styrberg2020-05-18 15:29:06 +0000
committerNoopur Gupta2020-05-20 06:56:09 +0000
commit359efe357dd13123570f8cccc80bd94425e65350 (patch)
treed29d2017967d6fcb241cbac7176cc1a1dafd0c81
parent67fde21e39179b53908f50449bdb599a4926d701 (diff)
downloadeclipse.jdt.ui-359efe357dd13123570f8cccc80bd94425e65350.tar.gz
eclipse.jdt.ui-359efe357dd13123570f8cccc80bd94425e65350.tar.xz
eclipse.jdt.ui-359efe357dd13123570f8cccc80bd94425e65350.zip
Bug 563285 - CCE in InitializeFinalFieldProposal for enum
- Change cast to AbstractTypeDeclaration to also handle enum declaration - Add test case Change-Id: Ib566abd7b12659bfd013f5f4b7c7123fd80a78a6 Signed-off-by: Kenneth Styrberg <kenneth@kean.nu>
-rw-r--r--org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java46
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java10
2 files changed, 51 insertions, 5 deletions
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 4ebcd5bfaf..854a904daf 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
@@ -2846,6 +2846,52 @@ public class LocalCorrectionsQuickFixTest extends QuickFixTest {
}
@Test
+ public void testUninitializedField_11() throws Exception {
+ // https://bugs.eclipse.org/bugs/show_bug.cgi?id=563285
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public enum E {\n");
+ buf.append(" a, b, c;\n");
+ buf.append(" private final int foo1;\n");
+ buf.append(" private final int foo2;\n");
+ buf.append(" private E(int i1, int i2) {\n");
+ buf.append(" this.foo1 = i1;\n");
+ buf.append(" this.foo2 = i2;\n");
+ buf.append(" }\n");
+ buf.append(" E() {\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ IProblem[] problems= astRoot.getProblems();
+ assertNumberOfProblems(2, problems);
+
+ ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, problems[0], null);
+ assertNumberOfProposals(proposals, 1);
+ assertCorrectLabels(proposals);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("public enum E {\n");
+ buf.append(" a, b, c;\n");
+ buf.append(" private final int foo1;\n");
+ buf.append(" private final int foo2;\n");
+ buf.append(" private E(int i1, int i2) {\n");
+ buf.append(" this.foo1 = i1;\n");
+ buf.append(" this.foo2 = i2;\n");
+ buf.append(" }\n");
+ buf.append(" E() {\n");
+ buf.append(" this.foo1 = 0;\n");
+ buf.append(" }\n");
+ buf.append("}\n");
+ String expected1= buf.toString();
+
+ assertExpectedExistInProposals(proposals, new String[] { expected1 });
+ }
+
+ @Test
public void testUnimplementedMethods() throws Exception {
IPackageFragment pack2= fSourceFolder.createPackageFragment("test2", false, null);
StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
index 51bf231986..11cb1ea65f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/proposals/InitializeFinalFieldProposal.java
@@ -23,6 +23,7 @@ import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.Assignment;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
@@ -43,7 +44,6 @@ import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.Type;
-import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.WildcardType;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
@@ -250,7 +250,7 @@ public class InitializeFinalFieldProposal extends LinkedCorrectionProposal {
return null;
}
// find all constructors (methods with same name as the type name)
- ConstructorVisitor cv= new ConstructorVisitor(((TypeDeclaration) field.getParent()).getName().toString());
+ ConstructorVisitor cv= new ConstructorVisitor(((AbstractTypeDeclaration) field.getParent()).getName().toString());
fAstNode.getRoot().accept(cv);
if (cv.getNodes().size() != 1) { // we only handle the simple case of one constructor
return null;
@@ -286,7 +286,7 @@ public class InitializeFinalFieldProposal extends LinkedCorrectionProposal {
Block body= methodDeclaration.getBody();
// check if we call this(), then we can't add initialization here
if (!hasThisCall(body)) {
- List<ASTNode> decls= ((TypeDeclaration) methodDeclaration.getParent()).bodyDeclarations();
+ List<ASTNode> decls= ((AbstractTypeDeclaration) methodDeclaration.getParent()).bodyDeclarations();
List<String> finalFieldList= getFinalFieldList(decls);
int insertIndex= 0;
if (finalFieldList.size() > 1) {
@@ -353,7 +353,7 @@ public class InitializeFinalFieldProposal extends LinkedCorrectionProposal {
ASTRewrite rewrite= ASTRewrite.create(ast);
// find all constructors (methods with same name as the type name)
- ConstructorVisitor cv= new ConstructorVisitor(((TypeDeclaration) field.getParent()).getName().toString());
+ ConstructorVisitor cv= new ConstructorVisitor(((AbstractTypeDeclaration) field.getParent()).getName().toString());
fAstNode.getRoot().accept(cv);
for (MethodDeclaration md : cv.getNodes()) {
@@ -363,7 +363,7 @@ public class InitializeFinalFieldProposal extends LinkedCorrectionProposal {
if (hasFieldInitialization(body, variableName)) {
continue;
}
- List<ASTNode> decls= ((TypeDeclaration) md.getParent()).bodyDeclarations();
+ List<ASTNode> decls= ((AbstractTypeDeclaration) md.getParent()).bodyDeclarations();
List<String> finalFieldList= getFinalFieldList(decls);
int insertIndex= 0;
if (finalFieldList.size() > 1) {

Back to the top