package org.overture.pog.tests.newtests;
import java.util.List;
import java.util.Vector;
import org.overture.ast.analysis.AnalysisException;
import org.overture.ast.analysis.DepthFirstAnalysisAdaptor;
import org.overture.ast.definitions.AEqualsDefinition;
import org.overture.ast.expressions.AMkTypeExp;
import org.overture.ast.expressions.PExp;
import org.overture.ast.node.INode;
import org.overture.ast.types.AFunctionType;
import org.overture.ast.types.ARecordInvariantType;
public class TypeIntegrityVisitor extends DepthFirstAnalysisAdaptor implements IntegrityCheck
{
List<INode> untypeNodes = new Vector<INode>();
@Override
public void defaultInPExp(PExp node) throws AnalysisException
{
if (node.getType() == null)
{
untypeNodes.add(node);
}
}
@Override
public List<INode> getProblemNodes()
{
return untypeNodes;
}
public void reset()
{
untypeNodes.clear();
}
@Override
public void caseAEqualsDefinition(AEqualsDefinition node)
throws AnalysisException
{
if (node.getExpType() == null)
{
untypeNodes.add(node);
}
}
@Override
public void caseAMkTypeExp(AMkTypeExp node) throws AnalysisException
{
if (node.getRecordType()==null){
untypeNodes.add(node);
}
super.caseAMkTypeExp(node);
}
@Override
public void caseAFunctionType(AFunctionType node) throws AnalysisException
{
// do nothing
}
@Override
public void caseARecordInvariantType(ARecordInvariantType node)
throws AnalysisException
{
// do nothing
}
}