Main class representing types.
The principal subclasses and sub-objects are as follows:
Type -+- ProxyType --+- NamedType ----+--- TypeRef
| | \
| +- SingletonType-+-+- TermRef
| | |
| | +--- ThisType
| | +--- SuperType
| | +--- ConstantType
| | +--- MethodParam
| | +----RecThis
| | +--- SkolemType
| +- PolyParam
| +- RefinedOrRecType -+-- RefinedType
| | -+-- RecType
| +- HKApply
| +- TypeBounds
| +- ExprType
| +- AnnotatedType
| +- TypeVar
| +- PolyType
|
+- GroundType -+- AndType
+- OrType
+- MethodType -----+- ImplicitMethodType
| +- JavaMethodType
+- ClassInfo
|
+- NoType
+- NoPrefix
+- ErrorType
+- WildcardType
Note: please keep in sync with copy in docs/docs/internals/type-system.md
.
Members
Is this type a subtype of that type?
Is this type the same as that type?
This is the case iff this <:< that
and that <:< this
.
Convert a type constructor TC
which has type parameters T1, ..., Tn
in a context where type parameters U1,...,Un
are expected to
LambdaXYZ { Apply = TCh...
Eta expand if self
is a (non-lambda) class reference and bound
is a higher-kinded type
Lambda abstract self
with given type parameters. Examples:
type T[X] = U becomes type T = [X] -> U
type T[X] >: L <: U becomes type T >: L <: ([X] -> U)
TODO: Handle parameterized lower bounds
The set of abstract term members of this type.
The set of abstract type members of this type.
If argument A and type parameter P are higher-kinded, adapt the variances of A to those of P, ensuring that the variances of the type lambda A agree wit...
[X] [List]
[X][X]
[+X][X]
GenericCompanion[[X] -> ListBuffer[X]] <: GenericCompanion[[+X] -> GenTraversable[X]]
[X][X]
The type representing
T[U1, ..., Un]
where
If this is the image of a type argument; recover the type argument, otherwise NoType.
If this is an encoding of a (partially) applied type, return its arguments, otherwise return Nil. Existential types in arguments are returned as TypeBou...
Argument types where existential types in arguments are disallowed
Argument types where existential types in arguments are approximated by their upper bound
Argument types where existential types in arguments are approximated by their lower bound
This type seen as if it were the type of a member of prefix type pre
declared in class cls
.
The type arguments of this type's base type instance wrt. base
.
Existential types in arguments are returned as TypeBounds instances.
The type arguments of this type's base type instance wrt.base
.
Existential types in arguments are disallowed.
The type arguments of this type's base type instance wrt.base
.
Existential types in arguments are approximated by their upper bound.
The type arguments of this type's base type instance wrt.base
.
Existential types in arguments are approximated by their lower bound.
The base classes of this type as determined by ClassDenotation in linearization order, with the class itself as first element. For AndTypes/OrTypes, the...
The basetype TypeRef of this type with given class symbol, but without including any type arguments
The base type including all type arguments and applicable refinements of this type. Refinements are applicable if they refine a member of the parent typ...
This type seen as a TypeBounds
The least class or trait of which this type is a subtype or parameterized instance, or NoSymbol if none exists (either because this type is not a value...
The least (wrt <:<) set of class symbols of which this type is a subtype
Eliminate anonymous classes
Follow aliases and dereferences LazyRefs, annotated types and instantiated TypeVars until type is no longer alias type, annotated type, LazyRef, or inst...
Follow aliases and dereferences LazyRefs and instantiated TypeVars until type is no longer alias type, LazyRef, or instantiated type variable. Goes thro...
A denotation containing the declaration(s) in this type with the given name. The result is either a SymDenotation or a MultiDenotation of SymDenotation...
The scope of all declarations of this type. Defined by ClassInfo, inherited by type proxies. Empty scope for all other types.
Widen from constant type to its underlying non-constant base type.
If this is a prototype with some ignored component, reveal one more layer of it. Otherwise the type itself.
Is this type an instance of a non-bottom subclass of the given class cls
?
If this is a type alias, its underlying type, otherwise the type itself
The element type of a sequence or array
If self is not higher-kinded, eta expand it.
Is this type different from NoType?
Returns true if there is a part of this type that satisfies predicate p
.
Returns true if there is a part of this type that satisfies predicate p
.
The final result type of a PolyType, MethodType, or ExprType, after skipping all parameter sections, the type itself for all others.
A denotation containing the declaration(s) in this type with the given
name, as seen from prefix type pre
. Declarations that have a flag
in excluded
are...
Find member of this type with given name and
produce a denotation that contains the type of the member
as seen from given prefix pre
. Exclude all member...
The parameter types in the first parameter section of a generic type or MethodType, Empty list for others
The first parent of this type, AnyRef if list of parents is empty
Returns true if all parts of this type satisfy predicate p
.
Performs operation on all parts of this type
Performs operation on all parts of this type
Is this type a subtype of that type?
the self type of the underlying classtype
Does the type carry an annotation that is an instance of cls
?
Does this type have an UnsafeNonvariant annotation on one of its parts?
customized hash code of this type. NotCached for uncached types. Cached types compute hash and use it as the type's hashCode.
If self
is a higher-kinded type, its type parameters, otherwise Nil
The set of implicit members of this type
Is this an alias TypeBounds?
Is this type a (neither aliased nor applied) reference to class sym
?
Is some part of this type produced as a repair for an error?
Is this type produced as a repair for an error?
Is self type higher-kinded (i.e. of kind != "*")?
Is this type guaranteed not to have null
as a value?
For the moment this is only true for modules, but it could
be refined later.
Is this the type of a method with a leading empty parameter list?
Is this either not a method at all, or a parameterless method?
Is this type a (possibly refined or applied or aliased) type reference to the given type symbol?
Is this a type of a repeated parameter?
Does this type denote a stable reference (i.e. singleton type)?
Does this type refer exactly to class symbol sym
, instead of to a subclass of sym
?
Implemented like isRef
, but follows more types: all type proxies as...
Does this type carry an UnsafeNonvariant annotation?
Is this type a primitive value type which can be widened to the primitive value type that
?
Is this type a value type?
Is the is value type or type lambda?
Is this the type of a method that has a repeated parameter type as last parameter type?
If this normalizes* to a refinement type that has a refinement for name
(which might be followed
by other refinements), and the refined info is a type...
P { type T = String, type R = P{...}.T } # R --> String
Map function f
over elements of an AndType, rebuilding with function g
Map function f
over elements of an OrType, rebuilding with function g
Is this type close enough to that type so that members with the two types would override each other? This means: - Either both types are polytypes with t...
This is the same as matches
except that it also matches => T with T and
vice versa.
The member of this type with the given name
The set of member classes of this type
The info of sym
, seen as a member of this type.
The set of names of members of this type that pass the given name filter
when seen as members of pre
. More precisely, these are all
of members name
such...
The set of names of members of this type that pass the given name filter
when seen as members of pre
. More precisely, these are all
of members name
such...
The set of members of this type having at least one of requiredFlags
but none of excludedFlags
set
The parts of this type which are type or term refs
The parts of this type which are type or term refs and which
satisfy predicate p
.
The parts of this type which are type or term refs and which
satisfy predicate p
.
The named type parameters declared or inherited by this type. These are all uninstantiated named type parameters of this type or one of its base types.
A prefix-less refined this or a termRef to a new skolem symbol that has the given type as info.
The set of abstract type members of this type.
A denotation containing the non-private declaration(s) in this type with the given name
The non-private member of this type with the given name.
The normalized prefix of this type is: For an alias type, the normalized prefix of its alias For all other named type and class infos: the prefix. Inheri...
If this is a FunProto or PolyProto, WildcardType, otherwise this.
Does this type occur as a part of type that
?
This type, if it exists, otherwise that
type
Is this type a legal type for a member that overrides another
member of type that
? This is the same as <:<
, except that
the types ()T and => T are ident...
The parameter names of a PolyType or MethodType, Empty list for others
The parameter types of a PolyType or MethodType, Empty list for others
For a ClassInfo type, its parents, Inherited by all type proxies. Empty for all other types. Overwritten in ClassInfo, where parents is cached.
The full parent types, including all type arguments
The resultType of a PolyType, MethodType, or ExprType, the type itself for others
A cycle-safe version of appliedTo
where computing type parameters do not force
the typeconstructor. Instead, if the type constructor is completing, we...
Dealias type if it can be done without forcing the TypeRef's info
Safer version of &
.
This version does not simplify the upper bound of the intersection of
two TypeBounds. The simplification done by &
requires subtypin...
The type <this . name> , reduced if possible
The type <this . name> , reduced if possible, with given denotation if unreduced
The type <this . name> with given symbol, reduced if possible
Utility method to show the underlying type of a TypeProxy chain together with the proxy type itself.
Utility method to show the underlying type of a TypeProxy chain together with the proxy type itself.
The signature of this type. This is by default NotAMethod, but is overridden for PolyTypes, MethodTypes, and TermRefWithSignature types. (the reason why...
A simplified version of this type which is equivalent wrt =:= to this type. This applies a typemap to the type which (as all typemaps) follows type vari...
Remove all AnnotatedTypes wrapping this type.
Map a TypeVar to either its instance if it is instantiated, or its origin, if not, until the result is no longer a TypeVar. Identity on all other types...
Substitute all types that refer in their symbol attribute to
one of the symbols in from
by the corresponding types in to
.
Substitute all types of the form PolyParam(from, N)
by
PolyParam(to, N)
.
Same as subst
but follows aliases as a fallback. When faced with a reference
to an alias type, where normal substitution does not yield a new type, the
Substitute a bound type by some other type
Substitute bound types by some other types
Substitute all occurrences of RecThis(binder)
by tp
Substitute all occurrences of symbols in from
by references to corresponding symbols in to
Substitute all occurrences of This(cls)
by tp
As substThis, but only is class is a static owner (i.e. a globally accessible object)
The term symbol associated with the type
Turn this type, which is used as an argument for
type parameter tparam
, into a TypeBounds RHS
Turn type into a function type.
Turn type into a function type.
Convert to text
Translate a type of the form From[T] to To[T], keep other types as they are.
from
and to
must be static classes, both with one type parameter, and the same...
[T][T]
The set of type members of this type
The type parameter with given name
. This tries first decls
in order not to provoke a cycle by forcing the info. If that yields
no symbol it tries member
If self
is a generic class, its type parameter symbols, otherwise Nil
The type parameters of this type are: For a ClassInfo type, the type parameters of its class. For a typeref referring to a class, the type parameters of...
The type symbol associated with the type
If this is a (possibly aliased, annotated, and/or parameterized) reference to a class, the class type ref, otherwise NoType.
Useful for diagnostics: The underlying type if this type is a type proxy, otherwise NoType
If this is repeated parameter type, its underlying Seq type, or, if isJava is true, Array type, else the type itself.
The iterator of underlying types as long as type is a TypeProxy. Useful for diagnostics
Widen from singleton type to its underlying non-singleton
base type by applying one or more underlying
dereferences,
Also go from => T to T.
Identity for...
Perform successive widenings and dealiasings until none can be applied anymore
Widen from ExprType type to its result type. (Note: no stripTypeVar needed because TypeVar's can't refer to ExprTypes.)
Widen type if it is unstable (i.e. an ExprType, or TermRef to unstable symbol
Widen from singleton type to its underlying non-singleton
base type by applying one or more underlying
dereferences.
If this is a skolem, its underlying type, otherwise the type itself
Widen from TermRef to its underlying non-termref base type, while also skipping Expr types.
The smallest supertype of this type that instantiated none of the named type parameters
in params
. That is, for each named type parameter p
in params
,...
The core type without any type arguments.