/* VarUseVisitor - Decompiled by JODE
 * Visit http://jode.sourceforge.net/
 */
package alloy.sharbool;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

import alloy.ast.ASTDepthFirstReturnVisitor;
import alloy.ast.DeclIter;
import alloy.ast.Node;
import alloy.ast.VarCreator;
import alloy.ast.Variable;
import alloy.ast.VariableExpr;

public class VarUseVisitor extends ASTDepthFirstReturnVisitor
{
    private Map _node2varset = new TreeMap();
    
    public Object visit(Node node) {
	TreeSet treeset = new TreeSet();
	if (node instanceof VariableExpr) {
	    VariableExpr variableexpr = (VariableExpr) node;
	    if (variableexpr.isQuantified)
		treeset.add(variableexpr.getLeafId());
	}
	for (int i = 0; i < node.numChildren(); i++)
	    treeset.addAll((Set) visit(node.childAt(i)));
	if (node instanceof VarCreator) {
	    DeclIter decliter = new DeclIter((VarCreator) node);
	    while (decliter.hasNext()) {
		Variable variable = (Variable) decliter.next();
		treeset.remove(decliter.getLeafId());
	    }
	}
	_node2varset.put(node, treeset);
	return treeset;
    }
    
    public Map getNodeVars() {
	return _node2varset;
    }
}
