import java.util.Optional; import javax.annotation.Nullable; interface A { @Nullable // Noncompliant [[sc=3;ec=12]] {{Methods with an "Optional" return type should not be "@Nullable".}} public Optional<String> getOptionalKo(); } class ClassA { public ClassA() { } @Nullable // Noncompliant [[sc=3;ec=12]] {{Methods with an "Optional" return type should not be "@Nullable".}} public Optional<String> getOptionalKo() { return null; // Noncompliant [[sc=12;ec=16]] {{Methods with an "Optional" return type should never return null.}} } public Optional<String> getOptionalOk() { return Optional.of("hello"); } public Object doSomething1() { return null; } public Optional<String> doSomething2() { Worker x = new Worker() { public String work() { return null; } }; return Optional.of("hello"); } public int doSomething3(Optional<String> arg) { if (arg == null) { // Noncompliant [[sc=9;ec=20]] {{Remove this null-check of an "Optional".}} return 0; } Optional<String> optional = getOptionalOk(); if (optional == null) { // Noncompliant [[sc=9;ec=25]] {{Remove this null-check of an "Optional".}} return 0; } else if (null != optional) { // Noncompliant [[sc=16;ec=32]] {{Remove this null-check of an "Optional".}} return 0; } Optional<String> optional2 = getOptionalOk(); if (optional == optional2) { return 0; } else if (null == null) { return 0; } Optional<String> optional3 = getOptionalOk(); return optional3 == null ? 0 : 1; // Noncompliant [[sc=12;ec=29]] {{Remove this null-check of an "Optional".}} } public Optional<String> doSomething4(List<String> myList) { myList.stream().map(s -> { if (s.length() > 0) { return null; } return s; }); return Optional.of("hello"); } @Deprecated public Optional<String> doSomething5(List<String> myList) { return myList.isEmpty() ? Optional.of("hello") : null; // Noncompliant [[sc=54;ec=58]] {{Methods with an "Optional" return type should never return null.}} } @Nullable // Noncompliant [[sc=3;ec=12]] {{"Optional" variables should not be "@Nullable".}} private Optional<String> field; public void doSomething6(@Nullable Optional<String> arg) { // Noncompliant [[sc=28;ec=37]] {{"Optional" variables should not be "@Nullable".}} } public void doSomething7() { @Nullable // Noncompliant [[sc=5;ec=14]] {{"Optional" variables should not be "@Nullable".}} Optional<String> var; } public Optional<String> doSomething8(boolean b) { Object obj = b ? null : new Object(); return Optional.of("hello"); } interface Worker { String work(); } }