Symbols

object 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
|
+- NoSymbol                        singleton instance used when there is no symbol
|
+- PackageSymbol                   any package, including the root package, the empty package, and nested packages
|
+- 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 form type T = alias
  • AbstractType(bounds): abstract type member of the form type T >: bounds.low <: bounds.high
  • OpaqueTypeAlias(bounds, alias): opaque type alias of the form type 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 NoSymbol and 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, PackageSymbols and NoSymbol.

class Object
trait Matchable
class Any

Type members

Classlikes

final
Companion
object
Companion
class
final
class ClassTypeParamSymbol extends TypeParamSymbol with TypeParamInfo
Companion
object
Companion
class
sealed
trait DeclaringSymbol extends Symbol
Companion
object
Companion
class
object NoSymbol extends Symbol
final
Companion
object
Companion
class
sealed abstract
class Symbol
final
class TermSymbol extends Symbol
Companion
object
object TermSymbol
Companion
class
Companion
object
Companion
class
sealed abstract
sealed abstract
class TypeSymbol(val name: TypeName, val owner: Symbol) extends Symbol
sealed abstract
class TypeSymbolWithBounds(name: TypeName, owner: Symbol) extends TypeSymbol