Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNoopur Gupta2019-05-14 10:04:45 +0000
committerNoopur Gupta2019-05-21 09:20:16 +0000
commitd30e4b27fddd3a9a8d3ba1434d4217e648fad060 (patch)
treef67946d56d6ca965e4931a5e88615407e217ca9f
parent74c2e685e5c898eb765ceeb7db4f077328138da5 (diff)
downloadeclipse.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'
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/LocalCorrectionsSubProcessor.java54
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java2
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:

Back to the top