package org.overture.codegen.analysis.vdm; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.overture.ast.analysis.AnalysisException; import org.overture.ast.analysis.DepthFirstAnalysisAdaptor; import org.overture.ast.definitions.PDefinition; import org.overture.ast.intf.lex.ILexLocation; import org.overture.ast.statements.AIdentifierStateDesignator; public class IdDesignatorOccurencesCollector extends DepthFirstAnalysisAdaptor { private ILexLocation defLoc; private Set<AIdentifierStateDesignator> idOccurences; private Map<AIdentifierStateDesignator, PDefinition> idDefs; private Logger log = Logger.getLogger(this.getClass().getName()); public IdDesignatorOccurencesCollector(ILexLocation defLoc, Map<AIdentifierStateDesignator, PDefinition> idDefs) { this.defLoc = defLoc; this.idOccurences = new HashSet<AIdentifierStateDesignator>(); this.idDefs = idDefs; } public Set<AIdentifierStateDesignator> getIds() { return idOccurences; } @Override public void caseAIdentifierStateDesignator(AIdentifierStateDesignator node) throws AnalysisException { PDefinition def = idDefs.get(node); if (def == null) { log.error("Could not find definition for " + node); } else { if (def.getLocation().equals(defLoc)) { this.idOccurences.add(node); } } } }