langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Infer.java
changeset 39589 0cbaed77814c
parent 38832 759100b68651
child 39599 3c7da4996d8c
--- 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<Type> actualTypeargs = funcInterface.getTypeArguments();
             for (Type t : funcInterfaceContext.undetvars) {
                 UndetVar uv = (UndetVar)t;
-                if (uv.getInst() == null) {
-                    uv.setInst(actualTypeargs.head);
-                }
+                Optional<Type> inst = uv.getBounds(InferenceBound.EQ).stream()
+                        .filter(b -> !b.containsAny(formalInterface.getTypeArguments())).findFirst();
+                uv.setInst(inst.orElse(actualTypeargs.head));
                 actualTypeargs = actualTypeargs.tail;
             }