private static EvalNode recursiveAddAuditNode( EvalNode parentNode, boolean auditPattern, boolean auditPatternInstance, EvalNode evalNode, Map<EvalNode, String> evalNodeExpressions, EvalAuditInstanceCount instanceCount) { String expressionText = evalNodeExpressions.get(evalNode); boolean filterChildNonQuitting = parentNode != null && parentNode instanceof EvalNodeFilterChildNonQuitting; EvalAuditNode audit = new EvalAuditNode( auditPattern, auditPatternInstance, expressionText, instanceCount, filterChildNonQuitting); audit.addChildNode(evalNode); List<EvalNode> newChildNodes = new ArrayList<EvalNode>(); for (EvalNode child : evalNode.getChildNodes()) { newChildNodes.add( recursiveAddAuditNode( evalNode, auditPattern, auditPatternInstance, child, evalNodeExpressions, instanceCount)); } evalNode.getChildNodes().clear(); evalNode.addChildNodes(newChildNodes); return audit; }