View Javadoc

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  }