diff options
| author | Kenneth Styrberg | 2020-05-18 15:29:06 +0000 |
|---|---|---|
| committer | Noopur Gupta | 2020-05-20 06:56:09 +0000 |
| commit | 359efe357dd13123570f8cccc80bd94425e65350 (patch) | |
| tree | d29d2017967d6fcb241cbac7176cc1a1dafd0c81 | |
| parent | 67fde21e39179b53908f50449bdb599a4926d701 (diff) | |
| download | eclipse.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>
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) { |
