TypeConstraint (@NotNull TypeConstraint other) { if (isSuperConstraintOf(other)) return this; if (other.isSuperConstraintOf(this)) return other; if (other instanceof Constrained) { return joinWithConstrained((Constrained)other); } if (other instanceof Exact) { return joinWithConstrained(new Constrained(Collections.singleton((Exact)other), Collections.emptySet())); } return TOP; }