package org.exist.xquery.functions.inspect; import org.exist.xquery.DefaultExpressionVisitor; import org.exist.xquery.FunctionCall; import org.exist.xquery.FunctionSignature; import java.util.*; public class FunctionCallVisitor extends DefaultExpressionVisitor { private Set<FunctionSignature> functionCalls = new HashSet<FunctionSignature>(); public Set<FunctionSignature> getFunctionCalls() { return functionCalls; } @Override public void visitFunctionCall(FunctionCall call) { functionCalls.add(call.getSignature()); // continue with the function arguments, but skip the body: // we're not interested in following function calls recursively for(int i = 0; i < call.getArgumentCount(); i++) { call.getArgument(i).accept(this); } } }