如何抑制所有初始化错误
How to suppress all initialization errors
当我有一个简单的测试-class
public final class InitTest {
private String field;
public InitTest() {
init();
}
private void init() {
field = "";
}
}
检查器框架的初始化检查器正确报告了问题:
InitTest.java:7: error: [initialization.fields.uninitialized] the constructor does not initialize fields: field
public InitTest() {
^
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
2 errors
根据docs of the Initialization Checker,它应该能够通过命令行参数禁用初始化检查器:
To disable initialization checking, supply the command-line argument
-AsuppressWarnings=uninitialized
当我们使用这个参数时(在 checker-framework 2.2.1 中)我们仍然得到一个初始化错误:
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
1 error
我是不是遗漏了什么或者这是一个错误?
注意:当我们使用 -AsuppressWarnings=initialization
时,不再显示任何错误 - 但这也会抑制与 nullness 相关的问题:请参阅此 .
-AsuppressWarnings=uninitialized
抑制与初始化本身相关的所有警告。例如,它允许您编写一个不初始化其所有字段的构造函数。
但是,这目前不会禁用 Checker Framework 中的所有其他检查。 Checker Framework 实现将您显示的错误视为方法调用错误(例如,这就是它的打印方式)。
另一种说法是,-AsuppressWarnings=uninitialized
影响打印为初始化错误的消息,但不影响打印为其他类型的错误。这种行为是一致的,但它不是像您这样的用户所期望的。我将此行为称为 Checker Framework 错误并在 issue tracker.
报告
当我有一个简单的测试-class
public final class InitTest {
private String field;
public InitTest() {
init();
}
private void init() {
field = "";
}
}
检查器框架的初始化检查器正确报告了问题:
InitTest.java:7: error: [initialization.fields.uninitialized] the constructor does not initialize fields: field
public InitTest() {
^
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
2 errors
根据docs of the Initialization Checker,它应该能够通过命令行参数禁用初始化检查器:
To disable initialization checking, supply the command-line argument
-AsuppressWarnings=uninitialized
当我们使用这个参数时(在 checker-framework 2.2.1 中)我们仍然得到一个初始化错误:
InitTest.java:8: error: [method.invocation.invalid] call to init() not allowed on the given receiver.
init();
^
found : @UnderInitialization(java.lang.Object.class) @NonNull InitTest
required: @Initialized @NonNull InitTest
1 error
我是不是遗漏了什么或者这是一个错误?
注意:当我们使用 -AsuppressWarnings=initialization
时,不再显示任何错误 - 但这也会抑制与 nullness 相关的问题:请参阅此
-AsuppressWarnings=uninitialized
抑制与初始化本身相关的所有警告。例如,它允许您编写一个不初始化其所有字段的构造函数。
但是,这目前不会禁用 Checker Framework 中的所有其他检查。 Checker Framework 实现将您显示的错误视为方法调用错误(例如,这就是它的打印方式)。
另一种说法是,-AsuppressWarnings=uninitialized
影响打印为初始化错误的消息,但不影响打印为其他类型的错误。这种行为是一致的,但它不是像您这样的用户所期望的。我将此行为称为 Checker Framework 错误并在 issue tracker.