我有一个简单的 DSL,它应该为表达式生成异步代码(这是我能想出的最简单的例子来说明我的观点)。我刚刚在脚本示例中添加了一条新async
语句:
grammar org.xtext.scripting.Scripting with org.eclipse.xtext.xbase.Xbase
generate scripting "http://www.xtext.org/scripting/Scripting"
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
Script returns xbase::XBlockExpression:
{Script}
(expressions+=XExpressionOrVarDeclaration ';'?)*;
XExpression returns xbase::XExpression:
super | Async
;
Async:
'async' expression=XExpression
;
这个想法是async
代码在另一个线程中执行。
我的问题是,我怎样才能为Async.expression
使用生成代码ScriptingJvmModelInferrer
?
在最简单的情况下,我会Async.expression
像这样包装代码?
AsyncRunner.exec(new Runnable() {
@Override
public void run() {
// the Async.expression would end up here
}
})
这样做的钩子在哪里?