2017-10-16 1 views
0

zu unterdrücken, wenn ich einen einfachen Test-Klasse habenWie alle Initialisierung Fehler

public final class InitTest { 

    private String field; 

    public InitTest() { 
     init(); 
    } 

    private void init() { 
     field = ""; 
    } 
} 

Die Initialisierung checker des checker-Rahmen korrekt die Probleme berichtet:

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 

Nach dem docs of the Initialization Checker, es sollte in der Lage sein, die Initialisierungsprüfung über ein Befehlszeilenargument zu deaktivieren:

Wenn wir dieses Argument (in checker-Framework 2.2.1) verwenden wir noch einen Fehler bei der Initialisierung erhalten:

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 

Bin ich etwas fehlt oder ist das ein Fehler?

Hinweis: Wenn wir -AsuppressWarnings=initialization verwenden, wird kein Fehler mehr angezeigt - dies würde jedoch auch die Probleme mit der Nullheit unterdrücken: siehe SO discussion.

Antwort

0

-AsuppressWarnings=uninitialized unterdrückt alle Warnungen im Zusammenhang mit der Initialisierung selbst. Sie können beispielsweise einen Konstruktor schreiben, der nicht alle Felder initialisiert.

Dies deaktiviert jedoch derzeit nicht alle anderen Prüfungen im Checker Framework. Die Checker Framework-Implementierung behandelt den Fehler, den Sie als Methodenaufruffehler angezeigt haben (so wird er beispielsweise gedruckt).

Eine andere Möglichkeit, dies zu sagen ist, dass die -AsuppressWarnings=uninitialized Nachrichten betrifft, die als Initialisierungsfehler gedruckt werden, aber keine Fehler, die als andere Typen gedruckt werden. Dieses Verhalten ist konsistent, aber es ist nicht das, was ein Benutzer wie Sie wünscht. Ich würde dieses Verhalten einen Checker Framework Bug nennen und es unter issue tracker melden.

+0

Hier ist die verwandte [Ausgabe 1590] (https://github.com/typetools/checker-framework/issues/1590) – TmTron

Verwandte Themen