9

私はコーディングの途中で、インスタンス変数を宣言するクラスの部分に誤って次のコード行を配置しました。しかし、チェックしたところ、どこでも同じエラーが発生します。つまり、静的ブロック内、コンストラクター内、任意のクラスメソッド内です。private;がクラスの最初の行として配置されている 場合を除いてSyntax error, insert "EnumBody" to complete ClassBodyDeclarations(@ chaitanya10が以下のコメントで記述し、ワークスペースで私が確認したように)、カーソルをその上に置いたときにEclipseツールチップでエラーが発生します。

エラーがあることを理解しています。
しかし、カーソルをエラーに合わせると、エラーメッセージがわかりません。このメッセージの意味は何ですか?

なぜそれを期待しているのEnumBodyですか?

以下はスクリーンショットです。

ここに画像の説明を入力してください

4

3 に答える 3

11

本当の説明を得るには、Eclipse Java コンパイラー フロントエンドの構文チェック、構文エラーの回復、およびレポート コンポーネントの詳細な分析を誰かが行う必要があります。しかし、最も可能性の高い説明は、「異常な」構文エラーがコンパイラの構文エラー回復コードを「混乱させた」ということです。

要するに、これはマイナーなコンパイラのバグ (または機能) です。

開発者がこれについて知っている可能性がありますが、次の 1 つまたは複数の理由により、修正を控えています。

  • 優先順位を付けるほど頻繁には発生しません。
  • 他のエラー回復ケースに影響を与えずに、より良い仕事をするのは難しいかもしれません。
  • 変更によって、多数のコンパイラ エラー回帰テストが中断される可能性があります。
  • 対処すべき優先度の高い問題は他にもあります。

1 - Break ... テスト中のコードの問題ではなく、テスト中の仮定のためにテストを失敗させるという意味で。これらのリグレッションを修正することは、負担になる可能性があります。

于 2012-11-08T11:26:42.743 に答える
5

価値があるのは、次のとおりです。

public class Foo;

エラー:Syntax error, insert "ClassBody" to complete ClassBodyDeclarations

public enum Foo;

エラー:Syntax error, insert "EnumBody" to complete ClassBodyDeclarations

public interface Foo;

エラーSyntax error, insert "InterfaceBody" to complete ClassBodyDeclarations

org.eclipse.jdt.internal.compiler.parser.Parser.consumeEnumConstantHeader()とにかく、これで、このコードで解析エラーが発生したときに回復しようとすると、何が起こると思います:

if(this.currentToken == TokenNameSEMICOLON) {
    RecoveredType currentType = currentRecoveryType();
    if(currentType != null) {
        currentType.insideEnumConstantPart = false;
    }
}

したがって、列挙型の内部にいないことが正しく認識されるため、上記のようなエラーが発生しますが、それが列挙型であるかどうかさえわからないことは認識されません。ここでソースを見ることができます:

言い換えれば、これはおそらく Eclipse チームが Enumerations を追加したときに導入したバグであり、他のいくつかのトークンとは少し異なる方法で処理されるため、別の方法で回復され、コンパイラ エラーに表示されます。

于 2012-11-09T05:27:42.300 に答える