blob: 9fed28c2145e00f945cf30f91270af0ff0865063 [file] [log] [blame]
// Test case for issue 557:
// https://github.com/typetools/checker-framework/issues/557
import java.util.Optional;
import org.checkerframework.checker.nullness.qual.Nullable;
@SuppressWarnings("nullness")
class MyOpt<T> {
static <S> MyOpt<S> of(S p) {
return null;
}
static <S> MyOpt<S> empty() {
return null;
}
}
@SuppressWarnings("nullness")
class MyOpt2<T extends Object> {
static <S extends Object> MyOpt2<S> of(S p) {
return null;
}
static <S extends Object> MyOpt2<S> empty() {
return null;
}
}
@SuppressWarnings("nullness")
class MyOpt3<T extends @Nullable Object> {
static <S extends @Nullable Object> MyOpt3<S> of(S p) {
return null;
}
static <S extends @Nullable Object> MyOpt3<S> empty() {
return null;
}
}
class Issue557a {
MyOpt<String> opt(boolean flag) {
return flag ? MyOpt.of("Hello") : MyOpt.empty();
}
MyOpt<String> opt2() {
return MyOpt.empty();
}
MyOpt<String> opt3(boolean flag) {
return flag ? MyOpt.of("Hello") : (flag ? MyOpt.empty() : MyOpt.empty());
}
void foo(MyOpt<String> param) {}
void callFoo(boolean flag) {
foo(flag ? MyOpt.of("Hello") : (flag ? MyOpt.empty() : MyOpt.empty()));
}
}
class Issue557b {
MyOpt2<String> opt(boolean flag) {
return flag ? MyOpt2.of("Hello") : MyOpt2.empty();
}
MyOpt2<String> opt2() {
return MyOpt2.empty();
}
}
class Issue557c {
MyOpt3<String> opt(boolean flag) {
return flag ? MyOpt3.of("Hello") : MyOpt3.empty();
}
MyOpt3<String> opt2() {
return MyOpt3.empty();
}
}
class Issue557d {
Optional<String> opt(boolean flag) {
return flag ? Optional.of("Hello") : Optional.empty();
}
Optional<String> opt2() {
return Optional.empty();
}
}