CodeQL library for Java/Kotlin
codeql/java-all 1.1.2-dev (changelog, source)

Predicate haveIntersection

Holds if there is a common (reflexive, transitive) subtype of the erasures of types t1 and t2.

If there is no such common subtype, then the two types are disjoint. However, the converse is not true; for example, the parameterized types List<Integer> and Collection<String> are disjoint, but their erasures (List and Collection, respectively) do have common subtypes (such as List itself).

For the definition of the notion of erasure see JLS v8, section 4.6 (Type Erasure).

Import path

import java
predicate haveIntersection(RefType t1, RefType t2)