1 package net.sourceforge.pmd.ast;
2
3 import java.util.Iterator;
4 import java.util.List;
5
6 public class DiscardableNodeCleaner {
7
8 private static final Class[] clazzes = new Class[] {
9 ASTEqualityExpression.class,
10 ASTAndExpression.class,
11 ASTInstanceOfExpression.class,
12 ASTUnaryExpression.class,
13 ASTShiftExpression.class,
14 ASTConditionalOrExpression.class,
15 ASTInclusiveOrExpression.class,
16 ASTExclusiveOrExpression.class,
17 ASTConditionalExpression.class,
18 ASTRelationalExpression.class,
19 ASTUnaryExpression.class,
20 ASTUnaryExpressionNotPlusMinus.class,
21 ASTPostfixExpression.class,
22 ASTMultiplicativeExpression.class,
23 ASTAdditiveExpression.class,
24 ASTConditionalAndExpression.class
25 };
26
27 public void clean(ASTCompilationUnit root) {
28 for (int i = 0; i<clazzes.length; i++) {
29 clean(root, clazzes[i]);
30 }
31 }
32
33 private void clean(ASTCompilationUnit root, Class type) {
34 List nodes = root.findChildrenOfType(type);
35 for (Iterator i = nodes.iterator(); i.hasNext();) {
36 SimpleNode node = (SimpleNode)i.next();
37 if (node.isDiscardable()) {
38 SimpleNode parent = (SimpleNode)node.jjtGetParent();
39 SimpleNode kid = (SimpleNode)node.jjtGetChild(0);
40 kid.jjtSetParent(parent);
41 parent.jjtReplaceChild(node, kid);
42 }
43 }
44 }
45 }