修正済みとしてマークされている日食バグ380313のインスタンスのように見えるものに遭遇しました。私の文法は次のとおりです。
grammar org.xtext.example.hyrule.HyRule with org.eclipse.xtext.common.Terminals
// with org.eclipse.xtext.xbase.Xbase
generate hyRule "http://www.xtext.org/example/hyrule/HyRule"
Start:
rules+=Rule*;
Rule:
'FOR' 'PAYLOAD' PAYLOAD 'ELEMENTS' elements+=ID+ 'CONSTRAINED''BY'name=ID '!';
PAYLOAD:
"sse"| "stacons"
;
これは正常に機能し、どのコード生成エディターなどですべて機能します。しかし、私が変わるとすぐに
with org.eclipse.xtext.common.Terminals
に
with org.eclipse.xtext.xbase.Xbase
そして、生成されたIDEを起動すると、バグ380313で詳細に説明されているように、ブランチターゲットエラーで一貫性のないスタックマップフレームが発生します。その結果、コード生成とオートコンプリートが機能しなくなります。
コンパイラのコンプライアンスレベルを1.6に変更すると、ブランチターゲットエラーでの不整合なスタックマップフレームがなくなり、オートコンプリートは機能しますが、コード生成は機能しません(src-genでコードが生成されません)。
ゼロからインストールされたXtext2.3とJava7を使用しています。xtextプロジェクトのビルドパスは変更されておらず、org.eclipse.xtext.xbase.lib_2.3.0.v201206120633.jarをビルドパスに追加しました。 DSLプロジェクト(つまり、実行時に起動されるEclipseインスタンスのプロジェクト)。
どんな助けでも大歓迎です、私は問題を見つけようとして頭を悩ませてきました。
更新:上記の例では、generator.xtendを使用してコードを生成していました。代わりにJvmModelInferrerを使用すると、コンプライアンスを1.7に設定しても上記のエラーが発生し、オートコンプリートは完全に壊れますが、コード生成は実際に機能します。そしてもちろん、この場合も、コンプライアンスレベルを1.6に設定すると、すべて正常に機能します。しかし、確かに、JvmModelInferrerの代わりにジェネレーターを使用でき、コンパイラーのコンプライアンス・レベルt 1.6を設定する必要はありませんか?