package st.gravel.support.jvm.debugger;
public abstract class Promise implements Runnable {
private Object result;
private final Thread thread;
private Throwable throwable;
private boolean isFinished = false;
public Promise() {
thread = new Thread(this, "Promise");
}
@Override
public void run() {
try {
result = evaluate();
} catch (Throwable e) {
System.out.println("caught "+e);
throwable = e;
} finally {
isFinished = true;
}
}
public abstract Object evaluate();
public boolean isFinished() {
return isFinished;
}
public Thread thread() {
return thread;
}
public Object result() {
return result;
}
public Throwable throwable() {
return throwable;
}
}