式の非同期コードを生成する単純な 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
}
})
それを行うためのフックはどこにありますか?