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 }