package javax.annotation; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; @interface CheckForNull {} @interface Nonnull {} @interface Nullable {} class A { public A() { return null; } public void f1() { return; } public int[] f2() { return null; // Noncompliant [[sc=12;ec=16]] {{Return an empty array instead of null.}} } public Object f3() { return null; } public Object f4()[] { return null; // Noncompliant } public int[] f5() { new B() { public Object g1() { return null; } public int[] g2() { return null; // Noncompliant } }; return new int[0]; return null; // Noncompliant } public List f6() { return null; // Noncompliant } public ArrayList f7() { return null; // Noncompliant } public Set<Integer> f8() { return Collections.EMPTY_SET; return null; // Noncompliant {{Return an empty collection instead of null.}} } public <T> List<Integer>[] f9() { return null; // Noncompliant {{Return an empty array instead of null.}} } public java.util.Collection f10() { return null; // Noncompliant } public int f11() { return null; } } interface B{ default int[] a(){ return null; // Noncompliant } default int[] b(){ return new int[4]; } default List<String> c(){ return null; // Noncompliant } default List<String> d(){ return new ArrayList<String>(); } default <T> int[] e(){ return null; // Noncompliant } default <T> int[] f(){ return new int[4]; } } class C { @Other public int[] gul() { return null; // Noncompliant } @Nullable public Object foo() { return null; } @javax.annotation.CheckForNull public Object bar() { return null; } @javax.annotation.Nullable public int[] fool() { return null; } @CheckForNull public int[] bark() { return null; } int[] qix(){ plop(a -> { return null; }); } static final Object CONSTANT = plop(a->{return null;}); }