Support JEP 513: this(...) after a constructor prologue

Aperta Adatta ai principianti
#2,145 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
java
Ambito
backend

Direzione di ricerca

Leggi NullAway.constructorInvokesAnother e segui il modo in cui controlla le istruzioni del corpo del costruttore, poi esamina i test correlati all’analisi dei costruttori. Aggiungi un caso di regressione con un’istruzione prima di this(...); il lavoro è completo quando l’esempio non segnala più un campo @NonNull non inizializzato e i controlli esistenti sui costruttori continuano a passare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

JEP 513 (flexible constructor bodies) is final in Java 25. A constructor may now run statements before this(...). NullAway does not handle this case yet. It does not see the this(...) call, so it reports that the constructor does not initialize a @NonNull field.

import org.jspecify.annotations.NullMarked;

@NullMarked
class Example {
    private String name;

    Example(String name) {
        this.name = name;
    }

    Example(String first, String last) {
        String full = first + " " + last;
        this(full);
    }
}

Expected: no error. The second constructor calls this(full), and the first constructor initializes name.

Actual:

Example.java:[13,4] error: [NullAway] initializer method does not guarantee @NonNull field 'name' (line 7) is initialized along all control-flow paths (remember to check for exceptions or early returns).

There is no error when this(first + " " + last) is the first statement. There is also no error when the field is final.

NullAway.constructorInvokesAnother checks only the first statement of the body (statements.get(0)). With a prologue, the this(...) call is not the first statement. The code on master is the same.

Versions: NullAway 0.14.3, Error Prone 2.52.0, JDK 25.0.2. Options: OnlyNullMarked=true, JSpecifyMode=true.

Lingua principale
Java
Stelle
4.1k
Fork
381
Merge medio
1g 2h
PR unite (30g)
106

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di uber/NullAway

Tutte le issue di uber/NullAway

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.