web-dev-qa-db-ja.com

構文エラー、「EnumBody」を挿入してEnumDeclarationを完了します

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

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

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

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

enter image description here

9
Mukul Goel

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

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

開発者はこれを知っている可能性がありますが、次の理由で修正を控えています。

  • それは頻繁には起こりません、
  • より良い仕事をするのは難しいかもしれません...他のいくつかのエラー回復ケースを壊さずに、そして/または
  • 変更wouldコンパイラエラー回帰テストの数を破ります。
9
Stephen C

その価値については、次のとおりです。

_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チームが列挙型を追加したときに導入したバグである可能性があり、他のトークンとは少し異なる方法で処理されるため、異なる方法で回復されるため、コンパイラエラーに表示されます。

5
durron597

これは、私のコードが正しいにもかかわらず、Eclipseでも私に起こっていました。最初にjar(aspectJ JAR)を追加せずにコードを記述し、JARを追加した後、この問題が発生したために発生しました。

最初にコードをコピーして削除し、貼り付けて、赤い線が消えると機能すると思いましたが、実行時にエラーがスローされました。ただし、クラスを削除して再作成し、まったく同じコードをもう一度入力することで機能しましたが、機能しました。クラスを削除した後はコピーペーストが機能した可能性がありますが、念のために入力しました。

間違いなく奇妙な問題です。私は本からコードをコピーしていたので、コードが正しいことを知っていました(Spring in action第4版-よく読んでください)。とにかく、これがあなたや将来誰かに役立つことを願っています!約1時間私を夢中にさせた

1
Mason