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 0d013030ed05..50df51eaa7a4 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 @@ -419,8 +419,8 @@ public class InferenceSession { PsiType bound = null; for (PsiType eqBound : eqBounds) { if (eqBound == null) continue; + if (bound != null && !isProperType(eqBound)) continue; bound = acceptBoundsWithRecursiveDependencies(typeParameter, eqBound, substitutor); - if (bound != null) break; } if (bound != null) { if (bound instanceof PsiCapturedWildcardType && eqBounds.size() > 1) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java index baaba043ec8e..bb1b9abd2745 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java @@ -148,13 +148,14 @@ public class SubtypingConstraint implements ConstraintFormula { if (myS instanceof PsiWildcardType) { return inferenceVariable != null && inferenceVariable.isCaptured(); } else { - if (inferenceVariable != null) { - inferenceVariable.addBound(myS, InferenceBound.EQ); + final InferenceVariable inferenceVariableS = session.getInferenceVariable(myS); + if (inferenceVariableS != null) { + inferenceVariableS.addBound(myT, InferenceBound.EQ); return true; } - inferenceVariable = session.getInferenceVariable(myS); + if (inferenceVariable != null) { - inferenceVariable.addBound(myT, InferenceBound.EQ); + inferenceVariable.addBound(myS, InferenceBound.EQ); return true; } constraints.add(new SubtypingConstraint(myT, myS, true));