void (final Constraint x, final Constraint y, final Reducer reducer) { final PsiTypeVariable var = reducer.getVar(x); final PsiType xType = reducer.getType(x); final PsiType yType = reducer.getType(y); final LinkedList<Pair<PsiType, Binding>> union = reducer.unify(xType, yType); if (union.isEmpty()) { return; } myConstraints.remove(x); myConstraints.remove(y); mySons = new ResolverTree[union.size()]; int i = 0; Constraint prev = null; for (final Pair<PsiType, Binding> pair : union) { if (prev != null) { myConstraints.remove(prev); } prev = reducer.create(var, pair.getFirst()); myConstraints.add(prev); mySons[i++] = applyRule(pair.getSecond()); } }