1 package org.simantics.scl.compiler.elaboration.expressions.visitors;
3 import org.simantics.scl.compiler.elaboration.expressions.EConstant;
4 import org.simantics.scl.compiler.elaboration.expressions.ETransformation;
5 import org.simantics.scl.compiler.elaboration.query.QAtom;
6 import org.simantics.scl.compiler.elaboration.relations.CompositeRelation;
7 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
9 import gnu.trove.map.hash.TObjectIntHashMap;
10 import gnu.trove.set.hash.TIntHashSet;
12 public class CollectRefsVisitor extends StandardExpressionVisitor {
13 private final TObjectIntHashMap<Object> allRefs;
14 private final TIntHashSet refs;
16 public CollectRefsVisitor(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
17 this.allRefs = allRefs;
22 public void visit(ETransformation expression) {
24 int ref = allRefs.get(ETransformation.TRANSFORMATION_RULES_TYPECHECKED);
28 super.visit(expression);
32 public void visit(EConstant expression) {
33 int id = allRefs.get(expression.value);
39 public void visit(QAtom query) {
40 collectRelationRefs(query.relation);
44 private void collectRelationRefs(SCLRelation relation) {
45 if(relation instanceof CompositeRelation) {
46 for(SCLRelation subrelation : ((CompositeRelation) relation).getSubrelations())
47 collectRelationRefs(subrelation);
50 int id = allRefs.get(relation);