/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.frontend.analyser; import java.util.ArrayList; import java.util.Iterator; import abs.frontend.typechecker.TypeCheckerException; @SuppressWarnings("serial") public class SemanticConditionList implements Iterable<SemanticCondition> { ArrayList<SemanticCondition> contents = new ArrayList<SemanticCondition>(); boolean containsErrors = false; boolean containsWarnings = false; public SemanticConditionList() {} public SemanticConditionList(TypeCheckerException e) { add(e); } // Iterable protocol public Iterator<SemanticCondition> iterator() { return contents.iterator(); } public boolean containsErrors() { return containsErrors; } public boolean containsWarnings() { return containsWarnings; } public int getErrorCount() { int count = 0; for (SemanticCondition c : contents) { if (c.isError()) count = count + 1; } return count; } public int getWarningCount() { int count = 0; for (SemanticCondition c : contents) { if (c.isWarning()) count = count + 1; } return count; } public SemanticCondition getFirstError() { for (SemanticCondition c : contents) { if (c.isError()) return c; } return null; } public SemanticCondition getFirstWarning() { for (SemanticCondition c : contents) { if (c.isWarning()) return c; } return null; } public boolean add(TypeCheckerException e) { containsErrors = true; return contents.add(e.getTypeError()); } public boolean add(SemanticCondition e) { if (e.isError()) containsErrors = true; if (e.isWarning()) containsWarnings = true; return contents.add(e); } public boolean addAll(SemanticConditionList l) { if (!containsErrors) containsErrors = l.containsErrors(); if (!containsWarnings) containsWarnings = l.containsWarnings(); return contents.addAll(l.contents); } @Override public String toString() { StringBuffer buf = new StringBuffer(); boolean first = true; for(SemanticCondition e : contents) { if (!first) buf.append(','); buf.append(e.toString()); first = false; } return buf.toString(); } }