ExecutionException.java

package edu.udel.cis.vsl.tass.semantics.IF;

import edu.udel.cis.vsl.tass.dynamic.IF.DynamicException;
import edu.udel.cis.vsl.tass.util.Source;
import edu.udel.cis.vsl.tass.util.Sourceable;

/**
 * An ExecutionException extends an ExecutionProblem by adding a specific
 * sourceable model element. The sourceable object provides a file name, line
 * number, text, etc., referring to an exact region of source code. This is
 * required for useful error reporting.
 * 
 * @author siegel
 */
public class ExecutionException extends ExecutionProblem {

	private static final long serialVersionUID = -7702573560900968531L;

	private Sourceable element;

	public ExecutionException(Sourceable element, ErrorKind kind,
			Certainty certainty, String message) {
		super(kind, certainty, message);
		assert element != null;
		this.element = element;
	}

	public ExecutionException(Sourceable element,
			DynamicException dynamicException, Certainty certainty) {
		super(dynamicException, certainty);
		assert element != null;
		this.element = element;
	}

	public ExecutionException(Sourceable element, ExecutionProblem problem) {
		this(element, problem.kind(), problem.certainty(), problem.getMessage());
	}

	public Sourceable element() {
		return element;
	}

	public String toString() {
		String result = super.toString();
		Source source = element.getSource();

		result += "\nSource location: ";

		if (source != null)
			result += source.toString();
		return result;
	}
}