package net.sourceforge.pmd.ast; import java.util.Iterator; import java.util.List; public class DiscardableNodeCleaner { private static final Class[] clazzes = new Class[] { ASTEqualityExpression.class, ASTAndExpression.class, ASTInstanceOfExpression.class, ASTUnaryExpression.class, ASTShiftExpression.class, ASTConditionalOrExpression.class, ASTInclusiveOrExpression.class, ASTExclusiveOrExpression.class, ASTConditionalExpression.class, ASTRelationalExpression.class, ASTUnaryExpression.class, ASTUnaryExpressionNotPlusMinus.class, ASTPostfixExpression.class, ASTMultiplicativeExpression.class, ASTAdditiveExpression.class, ASTConditionalAndExpression.class }; public void clean(ASTCompilationUnit root) { for (int i = 0; i<clazzes.length; i++) { clean(root, clazzes[i]); } } private void clean(ASTCompilationUnit root, Class type) { List nodes = root.findChildrenOfType(type); for (Iterator i = nodes.iterator(); i.hasNext();) { SimpleNode node = (SimpleNode)i.next(); if (node.isDiscardable()) { SimpleNode parent = (SimpleNode)node.jjtGetParent(); SimpleNode kid = (SimpleNode)node.jjtGetChild(0); kid.jjtSetParent(parent); parent.jjtReplaceChild(node, kid); } } } }