Javadoc
A variable's type can come from different sources: parameter's type definition, type definitions in the pattern
bodies or calculated from path expression constraints or find calls. In these situations one variable might have
conflicting type definitions. In conflicting situations if a variable's multiple types have a common subtype
(which would ensure a pattern match runtime) and has a type defined as a parameter, than this type will be
selected. In other cases we don't select a random type from the possibilities, the validator returns with an
error. Note, if the multiple type definitions are related in subtype-supertype relations than the most specific
is selected naturally (this is not even a warning).