英文:
How do I get all the Compile Time Errors at once in Java?
问题
I want to compile a java file and get all the errors to the list. So far I am using java's built-in compiler API, but it has some problems.
For example,
//demo.java
class demo
{
public static void main(String[] args) {
int array = new int[10]
}
}
we can see that there is a semicolon missing and [] (array brackets) are missing.
But Java Compiler API will only return
demo.java:4: error: ';' expected
int array = new int[10]
^
1 error
But It should say there is missing []
brackets and a semicolon ;
Is there any other way to compile a java file and return all the errors?
If there is any way to do it using Java Compiler API, then let me know.
If there are any other external Libraries or tools that compile a java file and return the error status.
External Library should:
- If the file has no errors then the library should say that the file has no errors.
- If the Java file has some errors then the library should return a list of errors with their line number and error message.
I searched a lot about this on the web. But I found only one solution, i.e., Java compiler API. But I want to try some other tools too.
英文:
I want to compile a java file and get all the errors to the list. So far I am using java's built in compiler API, but it has some problems.
For example,
//demo.java
class demo
{
public static void main(String[] args) {
int array = new int[10]
}
}
we can see that there is semicolon missing and [] (array brackets) are missing.
But Java Compiler API will only return
demo.java:4: error: ';' expected
int array = new int[10]
^
1 error
But It should say there is missing []
brackets and semicolon ;
Is there any other way to compile java file and return all the errors?
If there is any way to do it using Java Compiler API then let me know.
If there are any other external Libraries or tool that compile a java file and return the error status.
External Library should:
- If the file has no errors then the library should say that file has no errors.
- If the Java file has some errors then library should return list of errors with their line number and error message.
I searched a lot about this web. But Only found the one solution i.e. Java compiler API. But I want to try some other tools too.
答案1
得分: 4
Java编译器不会警告您关于"缺少[]
",因为这不是Java编译器可能发出的错误;如果您修复了代码中的缺少分号(这是语法错误),然后报告的错误是:
不兼容的类型:无法将int[]转换为int
这作为错误是有道理的,因为变量的类型声明为int
,但初始化表达式的类型是int[]
。
通过将错误描述为"缺少[]
",您使它听起来像另一个语法错误,但实际上"不兼容的类型"错误不是语法错误;它发生在type-checking阶段之后,该阶段发生在parsing之后。但是,如果在解析阶段存在任何语法错误,那么编译器不会进入类型检查阶段,因为没有有效的解析树可供类型检查。
因此,无论您使用命令行javac
工具还是编译器API,Java编译器都不会在同一编译单元中报告语法错误和类型错误。
英文:
The Java compiler does not warn you about a "missing []
" because that is not a possible error that the Java compiler can ever emit; if you fix the missing semicolon (which is a syntax error) in this code, then the error reported is:
incompatible types: int[] cannot be converted to int
which makes sense as an error, because the variable's type is declared as int
but the initializer's expression is of type int[]
.
By describing the error as "missing []
", you make it sound like another syntax error, but actually an "incompatible types" error is not a syntax error; it occurs during the type-checking stage, which occurs after parsing. However, if there are any syntax errors at the parsing stage then the compiler doesn't enter the type-checking stage because there is no valid parse tree to type-check.
So the Java compiler will not report both a syntax error and a type error in the same compilation unit, regardless of whether you use the command-line javac
tool or the compiler API.
答案2
得分: 2
这是不可能的。当Java编译器遇到错误时,它会停止处理源文件。C/C++编译器会按您所需的方式处理,但大多数后续的错误消息会误导并且不实用。
要获取所有错误的列表,编译器需要使用人工智能技术。编译器需要猜测您的意思。
英文:
This is impossible. The Java compiler stops processing a source file when it hits an error. The C/C++ compiler does what you want but most following error messages are misleading and not useful.
To get a list of all errors, the compiler would need to use AI technologies. The compiler would need to guess what you meant.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论