package org.rascalmpl.eclipse.util;
import org.eclipse.swt.widgets.Display;
import org.rascalmpl.interpreter.IEvaluator;
import org.rascalmpl.interpreter.result.Result;
import io.usethesource.vallang.IValue;
public class RascalInvoker{
private RascalInvoker(){
super();
}
public static void invokeSync(Runnable runnable, final IEvaluator<Result<IValue>> evaluator){
if(evaluator == null) throw new IllegalArgumentException("Evaluator can't be null.");
synchronized(evaluator){
runnable.run();
}
}
public static void invokeAsync(final Runnable runnable, final IEvaluator<Result<IValue>> evaluator){
if(evaluator == null) throw new IllegalArgumentException("Evaluator can't be null.");
new Thread(new Runnable(){
public void run(){
synchronized(evaluator){
runnable.run();
}
}
}).start();
}
public static void invokeUIAsync(final Runnable runnable, final IEvaluator<Result<IValue>> evaluator){
if(evaluator == null) throw new IllegalArgumentException("Evaluator can't be null.");
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
synchronized (evaluator) {
runnable.run();
}
}
});
}
}