javac models intersection types and union types as ClassType subtypes named IntersectionClassType and UnionClassType respectively. Consequently, in javac code, anywhere a ClassType is handled, it could also potentially be handling either an IntersectionClassType or a UnionClassType or both.
This issue will remain open until I'm satisfied these concerns have been spread properly over the disjoint javax.lang.model.type.* classes.