语法错误,插入"EnumBody"以完成EnumDeclaration

Muk*_*oel 9 java eclipse syntax-error eclipse-indigo

我处于编码的中间,意外地将以下代码行放在我们声明实例变量的类的一部分.但我检查并且它在任何地方给出相同的错误我的意思是:在静态块内,构造函数内,任何类方法内.除非private;放,因为它使类的第一行 Syntax error, insert "EnumBody" to complete ClassBodyDeclarations中的Eclipse工具提示错误(如下面还评论通过我对我的工作区验证写@ chaitanya10)当我们悬停光标在其上.

我明白有错误.
但当我将光标悬停在错误上时,我不明白错误消息.这条消息是什么意思?

它为什么期待EnumBody

以下是截图.

在此输入图像描述

Ste*_*n C 9

要获得真正的解释,有人需要对语法检查以及Eclipse Java编译器前端的语法错误恢复和报告组件进行详细分析.但最可能的解释是,您的"异常"语法错误"混淆"了编译器的语法错误恢复代码.

简而言之,它是一个次要的编译器错误(或功能).

开发人员很可能知道这一点,但是没有修复它,因为:

  • 它不经常发生,
  • 可能很难做得更好......没有打破其他一些错误恢复案例,和/或
  • 任何改变都会破坏许多编译器错误回归测试.


dur*_*597 5

对于它的价值,以下内容:

public class Foo;
Run Code Online (Sandbox Code Playgroud)

错误: Syntax error, insert "ClassBody" to complete ClassBodyDeclarations

public enum Foo;
Run Code Online (Sandbox Code Playgroud)

错误: Syntax error, insert "EnumBody" to complete ClassBodyDeclarations

public interface Foo;
Run Code Online (Sandbox Code Playgroud)

错误 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以它正确地指出我们不在枚举中,所以我们得到如上所述的错误,但它没有意识到我们甚至不知道它是否是枚举.你可以在这里查看来源:

换句话说,它可能是Eclipse团队在添加Enumerations时引入的一个错误,它的处理方式与其他一些令牌略有不同,这会导致它以不同的方式被恢复,因此会出现编译器错误.