Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKalyan Prasad Tatavarthi2019-05-24 05:52:40 +0000
committerKalyan Prasad Tatavarthi2019-05-24 09:06:03 +0000
commit48895c900c6071a0e445995a0cb5ed8bca2b432a (patch)
treec64a085196d28523d3a3566c52e91f66df3b218b
parent7223aec299716f44a6216b20a70bdc4e526c327f (diff)
downloadeclipse.jdt.ui-48895c900c6071a0e445995a0cb5ed8bca2b432a.tar.gz
eclipse.jdt.ui-48895c900c6071a0e445995a0cb5ed8bca2b432a.tar.xz
eclipse.jdt.ui-48895c900c6071a0e445995a0cb5ed8bca2b432a.zip
Bug 545249 - [12] AST View should not show the implicit break statementI20190527-0600I20190526-1800I20190526-0600I20190525-1800I20190525-0600I20190524-1800
in the switch case statements This code change preprocesses the AST used for ASTView to remove the implicit break statements as well as to handle the implicit break statements with expression in Switch Statements and Switch Expressions Change-Id: I761f1d7652b9c791d24f4127abd692ebb7529771 Signed-off-by: Kalyan Prasad Tatavarthi <kalyan_prasad@in.ibm.com>
-rw-r--r--org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java66
1 files changed, 64 insertions, 2 deletions
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
index a8ee692527..cfeb38a71a 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTView.java
@@ -119,9 +119,17 @@ import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTRequestor;
+import org.eclipse.jdt.core.dom.ASTVisitor;
+import org.eclipse.jdt.core.dom.Block;
+import org.eclipse.jdt.core.dom.BreakStatement;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.ExpressionStatement;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.NodeFinder;
+import org.eclipse.jdt.core.dom.Statement;
+import org.eclipse.jdt.core.dom.SwitchExpression;
+import org.eclipse.jdt.core.dom.SwitchStatement;
import org.eclipse.jdt.core.manipulation.SharedASTProviderCore;
import org.eclipse.jdt.ui.JavaUI;
@@ -389,7 +397,60 @@ public class ASTView extends ViewPart implements IShowInSource, IShowInTargetLis
// not interesting
}
}
-
+
+ private static final class BreakStatementChecker extends ASTVisitor {
+
+ @Override
+ public boolean visit(BreakStatement node) {
+ try {
+ if (node != null && node.isImplicit() && isInSwitchExpressionOrStatement(node)) {
+ ASTNode parent= node.getParent();
+ List<Statement> statements= null;
+ if (parent instanceof Block) {
+ statements= ((Block) parent).statements();
+ } else if (parent instanceof SwitchExpression) {
+ statements= ((SwitchExpression) parent).statements();
+ } else if (parent instanceof SwitchStatement) {
+ statements= ((SwitchStatement) parent).statements();
+ }
+ if (statements == null) {
+ return true;
+ }
+ Expression exp= node.getExpression();
+ if (exp == null) {
+ statements.remove(node);
+ return false;
+ } else {
+ int index= statements.indexOf(node);
+ statements.remove(node);
+ node.setExpression(null);
+ ExpressionStatement exprStmt= node.getAST().newExpressionStatement(exp);
+ exprStmt.setSourceRange(node.getStartPosition(), node.getLength());
+ statements.add(index, exprStmt);
+ exprStmt.accept(this);
+ return false;
+ }
+ }
+ } catch (UnsupportedOperationException e) {
+ // do nothing
+ }
+ return true;
+ }
+
+ private boolean isInSwitchExpressionOrStatement(BreakStatement node) {
+ boolean result= false;
+ ASTNode parent= node;
+ while (parent != null) {
+ if (parent instanceof SwitchStatement || parent instanceof SwitchExpression) {
+ result= true;
+ break;
+ }
+ parent= parent.getParent();
+ }
+ return result;
+ }
+ }
+
private final static String SETTINGS_LINK_WITH_EDITOR= "link_with_editor"; //$NON-NLS-1$
private final static String SETTINGS_INPUT_KIND= "input_kind"; //$NON-NLS-1$
private final static String SETTINGS_NO_BINDINGS= "create_bindings"; //$NON-NLS-1$
@@ -657,7 +718,8 @@ public class ASTView extends ViewPart implements IShowInSource, IShowInTargetLis
endTime= System.currentTimeMillis();
}
if (root != null) {
- updateContentDescription(input, root, endTime - startTime);
+ root.accept(new BreakStatementChecker());
+ updateContentDescription(input, root, endTime - startTime);
}
return root;
}

Back to the top