import java.util.stream.Stream; 
import java.util.function.Function; 
import java.util.Optional; 
import io.vavr.control.Try; 
import java.io.InputStream; 

public class CompilerMessageBug { 

  private interface TemplateProcessor { 
    InputStream process() throws Exception; 
  } 

  private interface TemplateProcessorFactory<TP extends TemplateProcessor> extends Function<Object, TP> {} 

  private TemplateProcessorFactory<? extends TemplateProcessor> templateProcessorFactory = null; 

  public void processTemplate() { 
    InputStream is = 
      Try.of( 
          () -> templateProcessorFactory.apply(null) 
      ).flatMap( 
        // this line causes the OpenJDK 11 compiler to fail with an exception 
        p -> Try.of(() -> p.process()) 
        // the following line does not: 
        // (TemplateProcessor p) -> Try.of(() -> p.process()) 
      ).getOrElseThrow(ex -> new RuntimeException(ex)); 
  } 
} 