package akin.lang;
/**
Exception that can be catched from inside the runtime.
*/
public class AkinException extends Exception {
private AkinClass runtimeClass;
/**
Creates a new exception from a runtime class.
@param runtimeClass Class of the exception from whitin the language.
*/
public AkinException(AkinClass runtimeClass, String message) {
super(message);
this.runtimeClass = runtimeClass;
}
public AkinException(AkinClass runtimeClass) {
super();
this.runtimeClass = runtimeClass;
}
public AkinException(String runtimeClassName, String message) {
super(message);
setRuntimeClass(runtimeClassName);
}
/**
Creates a new exception from the Exception runtime class.
*/
public AkinException(String message) {
super(message);
this.runtimeClass = AkinRuntime.getExceptionClass();
}
/**
Wrap an exception to pass it to the runtime.
*/
public AkinException(Exception inner) {
super(inner);
setRuntimeClass(inner.getClass().getName());
}
/**
Returns the runtime instance (the exception inside the language) of this exception.
*/
public AkinObject getRuntimeObject() {
AkinObject instance = runtimeClass.newInstance(this);
instance.setInstanceVariable("message", new ValueObject(getMessage()));
return instance;
}
public AkinClass getRuntimeClass() {
return runtimeClass;
}
protected void setRuntimeClass(String name) {
runtimeClass = AkinRuntime.getExceptionClass().subclass(name);
}
}