package org.overture.vdm2jml.tests.util;
import java.util.LinkedList;
import java.util.List;
import org.overture.ast.util.ClonableString;
import org.overture.codegen.ir.analysis.AnalysisException;
import org.overture.codegen.ir.analysis.DepthFirstAnalysisAdaptor;
import org.overture.codegen.ir.statements.AAssignToExpStmIR;
import org.overture.codegen.ir.statements.ACallObjectExpStmIR;
import org.overture.codegen.ir.statements.AMapSeqUpdateStmIR;
import org.overture.codegen.ir.statements.AMetaStmIR;
import org.overture.codegen.ir.types.ARecordTypeIR;
import org.overture.codegen.ir.types.AVoidTypeIR;
public class TestDataCollector extends DepthFirstAnalysisAdaptor
{
private final List<AAssignToExpStmIR> assignments;
private final List<ACallObjectExpStmIR> setCalls;
private final List<AMapSeqUpdateStmIR> mapSeqUpdates;
private final List<AMetaStmIR> assertions;
public TestDataCollector()
{
this.assignments = new LinkedList<AAssignToExpStmIR>();
this.setCalls = new LinkedList<ACallObjectExpStmIR>();
this.mapSeqUpdates = new LinkedList<AMapSeqUpdateStmIR>();
this.assertions = new LinkedList<AMetaStmIR>();
}
@Override
public void caseAAssignToExpStmIR(AAssignToExpStmIR node)
throws AnalysisException
{
assignments.add(node);
}
@Override
public void caseACallObjectExpStmIR(ACallObjectExpStmIR node)
throws AnalysisException
{
if (node.getObj().getType() instanceof ARecordTypeIR
&& node.getType() instanceof AVoidTypeIR)
{
setCalls.add(node);
}
}
@Override
public void caseAMapSeqUpdateStmIR(AMapSeqUpdateStmIR node)
throws AnalysisException
{
mapSeqUpdates.add(node);
}
@Override
public void caseAMetaStmIR(AMetaStmIR node) throws AnalysisException
{
if (node.getMetaData().size() == 1)
{
ClonableString elem = node.getMetaData().get(0);
if (elem.value.equals("//@ set invChecksOn = false;")
|| elem.value.equals("//@ set invChecksOn = true;"))
{
return;
}
}
assertions.add(node);
}
public List<AAssignToExpStmIR> getAssignments()
{
return assignments;
}
public List<ACallObjectExpStmIR> getSetCalls()
{
return setCalls;
}
public List<AMapSeqUpdateStmIR> getMapSeqUpdates()
{
return mapSeqUpdates;
}
public List<AMetaStmIR> getAssertions()
{
return assertions;
}
}