Symbols
Symbols for all kinds of definitions in Scala programs.
Every definition, like classes, defs, types and type parameters, is
associated with a Symbol. Symbols are organized in a hierarchy,
depending on what kind of definitions they represent.
Symbol
|
+- PackageSymbol any package, including the root package, the empty package, and nested packages
|
+- TermOrTypeSymbol any term or type symbol, i.e., not a package
|
+- TermSymbol any term definition:
| `val`, `var`, `def`, term param, term capture, `object` value
|
+- TypeSymbol any definition for a type
+- ClassSymbol definition for a `class`, `trait`, or the module class of an `object`
+- TypeSymbolWithBounds any other kind of type: `type` definitions, type params, type captures
+- TypeMemberSymbol `type` definition, further refined through its `typeDef`
+- TypeParamSymbol
+- ClassTypeParamSymbol type parameter of a class
+- LocalTypeParamSymbol any other type parameter
Additionally, PackageSymbol and ClassSymbol extend DeclaringSymbol.
Declaring symbols are the ones that contain declarations, which can be
looked up with their names.
TypeMemberSymbols exist in 3 flavors, indicated by their typeDef field,
of type TypeMemberDefinition:
TypeAlias(alias): type alias of the formtype T = aliasAbstractType(bounds): abstract type member of the formtype T >: bounds.low <: bounds.highOpaqueTypeAlias(bounds, alias): opaque type alias of the formtype T >: bounds.low <: bounds.high = alias
The main property a TermSymbol is its declaredType, which is a Type.
All TypeSymbolWithBounds have bounds of type TypeBounds, which are
often used as their primary characteristic. ClassSymbols are entirely
defined by themselves.
With the exception of the root package symbol, all symbols have an owner
which is another Symbol.
All symbols also have a name. It is a TypeName for TypeSymbols, and a
TermName for TermSymbols and PackageSymbols.
Attributes
- Graph
- Supertypes
- class Objecttrait Matchableclass Any
- Self type
- Symbols.type