TypeConstraint (@NotNull TypeConstraint other) { if (this.isSuperConstraintOf(other)) return other; if (other.isSuperConstraintOf(this)) return this; if (!(other instanceof Constrained right)) return BOTTOM; Constrained result = this; for (Exact type : right.myInstanceOf) { result = result.withInstanceofValue(type); if (result == null) return BOTTOM; } for (Exact type : right.myNotInstanceOf) { result = result.withNotInstanceofValue(type); if (result == null) return BOTTOM; } return result; }