- 
    Bug 
- 
    Resolution: Fixed
- 
     P2 P2
- 
    8
- 
        b82
- 
        Verified
                    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) {
}
}