2012-11-01 154 views
9

私は途中で、インスタンス変数を宣言するクラスの部分に誤って次のコード行を挿入しました。しかし、私はチェックし、どこでもどこでも同じエラーが発生します。staticブロック内、コンストラクタ内、クラスメソッド内。ただし、private;がクラスの最初の行に配置されている場合は、 Syntax error, insert "EnumBody" to complete ClassBodyDeclarations(下のコメントに@chaitanya10で書かれています。私のワークスペースでも私が確認しています)の上にカーソルを置くとeclipseのツールチップにエラーが表示されます。構文エラー、 "EnumBody"を挿入してEnumDeclarationを完成させよう

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

なぜEnumBodyが必要ですか?

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

enter image description here

+2

@Aubin、私は-1が合法だとは思わない。私は誤って上記のステートメントを入れて、そのエラーメッセージを見たので、私はちょうどエラーメッセージについて興味があります。 –

+0

@Aubin、あなたがdownvoteをより詳細に正当化するなら、私は感謝します。 –

+0

はEnumのコードのこの部分ですか? – PermGenError

答えて

8

本当の説明については、誰かが構文チェックの詳細な解析、構文エラー回復とEclipseのJavaコンパイラのフロントエンドのレポーティングコンポーネントを実行する必要があります。しかし、最も一般的な説明は、あなたの "珍しい"構文エラーがコンパイラの構文エラーリカバリコードを "混乱させる"ということです。

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

開発者がこのことを知っている可能性が高いですが、ので、それを固定控えている:良い仕事を行うのは難しいかもしれません

  • 、頻繁に発生しません

    • ...そして/または
    • 任意の変更コンパイルエラー回帰テストのいくつかを壊すでしょう。
    • 何が価値があるために
  • 4

    、以下:

    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; 
        } 
    } 
    

    だから、それは正しく私達が列挙内じゃないことを割り出し、上記のようなエラーが発生しますが、それが列挙型かどうかわからないことはわかりません。 You can look at the source here:

    言い換えれば、Eclipseチームが列挙型を追加したときに導入されたバグだと思われます。これは、他のトークンとは多少異なる扱いを受けるため、異なる方法で回復されます。コンパイラエラー。

    +0

    +1私は本当に努力と素晴らしい研究に感謝します。 –

    +0

    +1わかりにくい質問のニース、詳細な分析。 –

    1

    私のコードが正しいにもかかわらず、これはEclipseでも私に起こっていました。 JARを最初に追加しなくても(アスペクトJAR)コードを書いたので、この問題が発生しました。

    最初はコードをコピーして削除して貼り付け、赤い線がなくなっても機能すると思っていましたが、実行時にエラーがスローされました。しかし、私はクラスを削除し、再作成して、同じ正確なコードを再度入力することによって動作するようにしました。コピーの貼り付けはおそらくクラスを削除した後にはうまくいきましたが、確かめるためにタイプしました。

    間違いなく問題です。私は本が正しいものだと知っていました。なぜなら、私はそれを本の中からコピーしていたからです(アクション第4版の春 - 良い読書btw)。とにかく、これが将来、あなたや誰かに役立つことを願っています!私を約1時間夢中にした。

    関連する問題