diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index 748b618f78ee..5871ce1f638a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -608,7 +608,8 @@ public class InferenceSession { final Set outputVariables = new HashSet(); for (ConstraintFormula constraint : additionalConstraints) { if (constraint instanceof InputOutputConstraintFormula) { - final Set outputVars = ((InputOutputConstraintFormula)constraint).getOutputVariables(((InputOutputConstraintFormula)constraint).getInputVariables(this), this); + final Set inputVariables = ((InputOutputConstraintFormula)constraint).getInputVariables(this); + final Set outputVars = ((InputOutputConstraintFormula)constraint).getOutputVariables(inputVariables, this); if (outputVars != null) { outputVariables.addAll(outputVars); } @@ -635,7 +636,15 @@ public class InferenceSession { varsToResolve.addAll(inputVariables); } } - } else { + else { + subset.add(constraint); + Set outputVars = ((InputOutputConstraintFormula)constraint).getOutputVariables(null, this); + if (outputVars != null) { + varsToResolve.addAll(outputVars); + } + } + } + else { subset.add(constraint); } } @@ -649,7 +658,7 @@ public class InferenceSession { return false; } - PsiSubstitutor substitutor = resolveBounds(varsToResolve, mySiteSubstitutor, true); + PsiSubstitutor substitutor = resolveBounds(varsToResolve, mySiteSubstitutor, false); for (ConstraintFormula additionalConstraint : additionalConstraints) { additionalConstraint.apply(substitutor);