package org.overture.interpreter.tests.utils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import org.overture.interpreter.runtime.ContextException;
import org.overture.interpreter.runtime.ICollectedRuntimeExceptions;
import org.overture.interpreter.runtime.ValueException;
import org.overture.interpreter.values.SeqValue;
import org.overture.interpreter.values.Value;
import org.overture.parser.messages.LocatedException;
import org.overture.test.framework.results.IMessage;
import org.overture.test.framework.results.Message;
import org.overture.test.framework.results.Result;
public class ExecutionToResultTranslator
{
public static Result<Value> wrapValue(Exception e)
{
Result<String> result = wrap(e);
return new Result<Value>(new SeqValue(result.getStringResult()), result.warnings, result.errors);
}
public static Result<String> wrap(Exception e)
{
List<IMessage> errors = new Vector<IMessage>();
String message = e.getMessage();
if (e instanceof ICollectedRuntimeExceptions)
{
List<String> messages = new Vector<String>();
List<Exception> collectedExceptions = new ArrayList<Exception>(((ICollectedRuntimeExceptions) e).getCollectedExceptions());
for (Exception err : collectedExceptions)
{
if (err instanceof ContextException)
{
ContextException ce = (ContextException) err;
errors.add(new Message(ce.location.getFile().getName(), ce.number, ce.location.getStartLine(), ce.location.getStartPos(), ce.getMessage()));
} else if (err instanceof ValueException)
{
ValueException ve = (ValueException) err;
errors.add(new Message("?", ve.number, 0, 0, ve.getMessage()));
} else if (err instanceof LocatedException)
{
LocatedException le = (LocatedException) err;
errors.add(new Message(le.location.getFile().getName(), le.number, le.location.getStartLine(), le.location.getStartPos(), le.getMessage()));
} else
{
messages.add(err.getMessage());
err.printStackTrace();
}
}
Collections.sort(messages);
message = messages.toString();
}
return new Result<String>(message, new Vector<IMessage>(), errors);
}
}