diff -r a30039aaca6c -r 0cbaed77814c langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Wed Jul 06 12:46:37 2016 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java Wed Jul 06 15:27:36 2016 -0700 @@ -56,6 +56,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.function.BiFunction; @@ -675,18 +676,12 @@ paramTypes = paramTypes.tail; } - try { - funcInterfaceContext.solve(funcInterfaceContext.boundedVars(), types.noWarnings); - } catch (InferenceException ex) { - checkContext.report(pos, diags.fragment("no.suitable.functional.intf.inst", funcInterface)); - } - List actualTypeargs = funcInterface.getTypeArguments(); for (Type t : funcInterfaceContext.undetvars) { UndetVar uv = (UndetVar)t; - if (uv.getInst() == null) { - uv.setInst(actualTypeargs.head); - } + Optional inst = uv.getBounds(InferenceBound.EQ).stream() + .filter(b -> !b.containsAny(formalInterface.getTypeArguments())).findFirst(); + uv.setInst(inst.orElse(actualTypeargs.head)); actualTypeargs = actualTypeargs.tail; }