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
tp is a class type and 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.
Issue a feature warning if feature is not enabled
sym is an implicit conversion, check that implicit conversions are enabled.
sym is an implicit conversion, check that that implicit conversions are enabled, unless
- it is synthetic
- it is has the same owner as one of the classes it converts to (modulo companions)
- it is defined in Predef
- it is the scala.reflect.Selectable.reflectiveSelectable conversion
Check that a non-implicit parameter making up the first parameter section of an implicit conversion is not a singleton type.
tree can be marked
Check that all named types that form part of this type have a denotation.
Called on inferred (result) types of ValDefs and DefDefs.
This could fail for types where the member was originally available as part
of the self type, yet is no longer visible once the
this has been replaced
by some other prefix. See neg/i3083.scala
Check that class does not declare 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.