Details
-
Bug
-
Resolution: Fixed
-
P2
-
8
-
b82
-
Verified
Description
An assertion is thrown when compiling this program:
interface Predicate<X> {
boolean accepts(X x);
}
class Optional<T> {
public boolean isPresent() { return false; }
public static<E> Optional<E> empty() { return null; }
}
interface Supplier<X> {
X make();
}
class FindSink<O, T> { }
class OfRef<R> extends FindSink<R, Optional<R>> { }
class FindOp<T, O> {
public static<F> FindOp<F, Optional<F>> makeRef() {
return new FindOp<>(Optional.empty(), Optional::isPresent, OfRef::new);
}
private FindOp(O emptyValue,
Predicate<O> presentPredicate,
Supplier<FindSink<T, O>> sinkSupplier) {
}
}
interface Predicate<X> {
boolean accepts(X x);
}
class Optional<T> {
public boolean isPresent() { return false; }
public static<E> Optional<E> empty() { return null; }
}
interface Supplier<X> {
X make();
}
class FindSink<O, T> { }
class OfRef<R> extends FindSink<R, Optional<R>> { }
class FindOp<T, O> {
public static<F> FindOp<F, Optional<F>> makeRef() {
return new FindOp<>(Optional.empty(), Optional::isPresent, OfRef::new);
}
private FindOp(O emptyValue,
Predicate<O> presentPredicate,
Supplier<FindSink<T, O>> sinkSupplier) {
}
}