Linting uninitialized field dereference in Java
Am I out of my mind for thinking that some linter or other should be able to recognize the following code as buggy?
package com.company;
public class Main {
public String greeting = "hey";
private Main anotherMain;
public Main getAnotherMain() {
return anotherMain;
}
public void setAnotherMain(Main main) {
this.anotherMain = main;
}
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.getAnotherMain().greeting);
}
}
I expect a linter to tell me that the unchecked dereference main.getAnotherMain().greeting
could produce an NPE because anotherMain
defaults to null.
I tried SpotBugs, NullAway, and the IntelliJ static checker, and none of them can catch this. Bug filed against SpotBugs. We'll see how it goes.