0

修正済みとしてマークされている日食バグ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を設定する必要はありませんか?

4

1 に答える 1

1

Sebastian Zarnekow:EclipseのJavaコンパイラのバグはEclipse3.8で修正されました。ディストリビューションをJunoリリースにアップグレードするか、Java1.6を使用する必要があります。

于 2012-07-05T08:10:35.400 に答える