Check that case classes are not inherited by case classes.
tp is a class type.
traitReq is true, check that
tp is a trait.
stablePrefixReq is true and phase is not after RefChecks,
check that class prefix is stable.
Verify classes extending AnyVal meet the requirements
Check that any top-level type arguments in this type are feasible, i.e. that their lower bound conforms to their upper bound. If a type argument is infeasible, issue and error and continue with upper bound.
Check that a non-implicit parameter making up the first parameter section of an implicit conversion is not a singleton type.
tree is a pure expression of constant type
Check that class does not define same symbol twice
Check that method parameter types do not reference their own parameter or later parameters in the same parameter section.
tpt does not refer to a singleton type
tpt does not define a higher-kinded type
Check that type
tp is stable.
Given a parent
parent of a class
parent is a trait check that
the superclass of
cls derived from the superclass of
An exception is made if
java.lang.Comparable. These two classes are treated by Scala as universal
traits. E.g. the following is OK:
... extends Any with java.io.Serializable
The standard library relies on this idiom.