diff options
| author | Noopur Gupta | 2019-05-14 10:04:45 +0000 |
|---|---|---|
| committer | Noopur Gupta | 2019-05-21 09:20:16 +0000 |
| commit | d30e4b27fddd3a9a8d3ba1434d4217e648fad060 (patch) | |
| tree | f67946d56d6ca965e4931a5e88615407e217ca9f | |
| parent | 74c2e685e5c898eb765ceeb7db4f077328138da5 (diff) | |
| download | eclipse.jdt.ui-d30e4b27fddd3a9a8d3ba1434d4217e648fad060.tar.gz eclipse.jdt.ui-d30e4b27fddd3a9a8d3ba1434d4217e648fad060.tar.xz eclipse.jdt.ui-d30e4b27fddd3a9a8d3ba1434d4217e648fad060.zip | |
Bug 545256: [12][quick fix][switch expression] 'Add default case'
Change-Id: I11918dd9835bf36501b17f313586604b30642858
2 files changed, 44 insertions, 12 deletions
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 44306ef69d..c9bbc389c0 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 @@ -103,6 +103,7 @@ import org.eclipse.jdt.core.dom.Statement; import org.eclipse.jdt.core.dom.StringLiteral; import org.eclipse.jdt.core.dom.StructuralPropertyDescriptor; import org.eclipse.jdt.core.dom.SwitchCase; +import org.eclipse.jdt.core.dom.SwitchExpression; import org.eclipse.jdt.core.dom.SwitchStatement; import org.eclipse.jdt.core.dom.ThrowStatement; import org.eclipse.jdt.core.dom.TryStatement; @@ -1886,22 +1887,51 @@ public class LocalCorrectionsSubProcessor { public static void addMissingDefaultCaseProposal(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) { ASTNode selectedNode= problem.getCoveringNode(context.getASTRoot()); - if (selectedNode instanceof Expression && selectedNode.getLocationInParent() == SwitchStatement.EXPRESSION_PROPERTY) { - SwitchStatement switchStatement= (SwitchStatement) selectedNode.getParent(); - for (Statement statement : (List<Statement>) switchStatement.statements()) { + if (selectedNode instanceof Expression) { + StructuralPropertyDescriptor locationInParent= selectedNode.getLocationInParent(); + ASTNode parent= selectedNode.getParent(); + List<Statement> statements; + + if (locationInParent == SwitchStatement.EXPRESSION_PROPERTY) { + statements= ((SwitchStatement) parent).statements(); + } else if (locationInParent == SwitchExpression.EXPRESSION_PROPERTY) { + statements= ((SwitchExpression) parent).statements(); + } else { + return; + } + + for (Statement statement : statements) { if (statement instanceof SwitchCase && ((SwitchCase) statement).isDefault()) { return; } } Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE); - createMissingDefaultProposal(context, switchStatement, image, proposals); + createMissingDefaultProposal(context, parent, image, proposals); } } - private static void createMissingDefaultProposal(IInvocationContext context, SwitchStatement switchStatement, Image image, Collection<ICommandAccess> proposals) { - AST ast= switchStatement.getAST(); + private static void createMissingDefaultProposal(IInvocationContext context, ASTNode parent, Image image, Collection<ICommandAccess> proposals) { + List<Statement> statements; + Expression expression; + if (parent instanceof SwitchStatement) { + SwitchStatement switchStatement= (SwitchStatement) parent; + statements= switchStatement.statements(); + expression= switchStatement.getExpression(); + } else if (parent instanceof SwitchExpression) { + SwitchExpression switchExpression= (SwitchExpression) parent; + statements= switchExpression.statements(); + expression= switchExpression.getExpression(); + } else { + return; + } + AST ast= parent.getAST(); ASTRewrite astRewrite= ASTRewrite.create(ast); - ListRewrite listRewrite= astRewrite.getListRewrite(switchStatement, SwitchStatement.STATEMENTS_PROPERTY); + ListRewrite listRewrite; + if (parent instanceof SwitchStatement) { + listRewrite= astRewrite.getListRewrite(parent, SwitchStatement.STATEMENTS_PROPERTY); + } else { + listRewrite= astRewrite.getListRewrite(parent, SwitchExpression.STATEMENTS_PROPERTY); + } String label= CorrectionMessages.LocalCorrectionsSubProcessor_add_default_case_description; LinkedCorrectionProposal proposal= new LinkedCorrectionProposal(label, context.getCompilationUnit(), astRewrite, IProposalRelevance.ADD_MISSING_DEFAULT_CASE, image); @@ -1909,13 +1939,13 @@ public class LocalCorrectionsSubProcessor { listRewrite.insertLast(newSwitchCase, null); if (ast.apiLevel() >= AST.JLS12) { - if (switchStatement.statements().size() > 0) { - Statement firstStatement= (Statement) switchStatement.statements().get(0); + if (statements.size() > 0) { + Statement firstStatement= statements.get(0); SwitchCase switchCase= (SwitchCase) firstStatement; boolean isArrow= switchCase.isSwitchLabeledRule(); - if (isArrow) { - newSwitchCase.setSwitchLabeledRule(isArrow); - ThrowStatement newThrowStatement= getThrowForUnexpectedDefault(switchStatement.getExpression(), ast, astRewrite); + newSwitchCase.setSwitchLabeledRule(isArrow); + if (isArrow || parent instanceof SwitchExpression) { + ThrowStatement newThrowStatement= getThrowForUnexpectedDefault(expression, ast, astRewrite); listRewrite.insertLast(newThrowStatement, null); proposal.addLinkedPosition(astRewrite.track(newThrowStatement), true, null); } else { diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java index 801d51360b..efae825cc4 100644 --- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java +++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java @@ -302,6 +302,7 @@ public class QuickFixProcessor implements IQuickFixProcessor { case IProblem.ServiceImplDefaultConstructorNotPublic: case IProblem.PreviewFeatureDisabled: case IProblem.PreviewFeatureNotSupported: + case IProblem.SwitchExpressionMissingDefaultCase: return true; default: return SuppressWarningsSubProcessor.hasSuppressWarningsProposal(cu.getJavaProject(), problemId) @@ -729,6 +730,7 @@ public class QuickFixProcessor implements IQuickFixProcessor { LocalCorrectionsSubProcessor.getMissingEnumConstantCaseProposals(context, problem, proposals); break; case IProblem.MissingDefaultCase: + case IProblem.SwitchExpressionMissingDefaultCase: LocalCorrectionsSubProcessor.addMissingDefaultCaseProposal(context, problem, proposals); break; case IProblem.MissingEnumConstantCaseDespiteDefault: |
