DFAType (DFAType t1, DFAType t2, PsiManager manager) { if (t1.equals(t2)) return t1; if (dominates(t1, t2)) { return t1; } if (dominates(t2, t1)) { return t2; } final PsiType primary = TypesUtil.getLeastUpperBoundNullable(t1.primary, t2.primary, manager); final PsiType type1 = reduce(t1.mixins); final PsiType type2 = reduce(t2.mixins); if (type1 != null && type2 != null) { return create(primary).withNewMixin(GenericsUtil.getLeastUpperBound(type1, type2, manager), null); } return create(primary); }