Namer
This class creates symbols from definitions and imports and gives them lazy types.
Timeline:
During enter, trees are expanded as necessary, populating the expandedTree map. Symbols are created, and the symOfTree map is set up.
Symbol completion causes some trees to be already typechecked and typedTree entries are created to associate the typed trees with the untyped expanded originals.
During typer, original trees are first expanded using expandedTree. For each expanded member definition or import we extract and remove the corresponding symbol from the symOfTree map and complete it. We then consult the typedTree map to see whether a typed tree exists already. If yes, the typed tree is returned as result. Otherwise, we proceed with regular type checking.
The scheme is designed to allow sharing of nodes, as long as each duplicate appears in a different method.
Type members
Value members
Concrete methods
Add child annotation for child
to annotations of cls
. The annotation
is added at the correct insertion point, so that Child annotations appear
in reverse order of their start positions.
Add child annotation for child
to annotations of cls
. The annotation
is added at the correct insertion point, so that Child annotations appear
in reverse order of their start positions.
Check that a new definition with given name and privacy status in current context would not conflict with existing currently compiled definitions. The logic here is very subtle and fragile due to the fact that we are not allowed to force anything.
Check that a new definition with given name and privacy status in current context would not conflict with existing currently compiled definitions. The logic here is very subtle and fragile due to the fact that we are not allowed to force anything.
If this tree is a member def or an import, create a symbol of it and store in symOfTree map.
If this tree is a member def or an import, create a symbol of it and store in symOfTree map.
The enclosing class with given name; error if none exists
The enclosing class with given name; error if none exists
If sym
exists, enter it in effective scope. Check that
package members are not entered twice in the same run.
If sym
exists, enter it in effective scope. Check that
package members are not entered twice in the same run.
The expanded version of this tree, or tree itself if not expanded
The expanded version of this tree, or tree itself if not expanded
The type bound on wildcard imports of an import list, with special values Nothing if no wildcard imports of this kind exist Any if there are unbounded wildcard imports of this kind
The type bound on wildcard imports of an import list, with special values Nothing if no wildcard imports of this kind exist Any if there are unbounded wildcard imports of this kind
Expand tree and create top-level symbols for statement and enter them into symbol table
Expand tree and create top-level symbols for statement and enter them into symbol table
Create top-level symbols for statements and enter them into symbol table
Create top-level symbols for statements and enter them into symbol table
- Returns
A context that reflects all imports in
stats
.
Create top-level symbols for all statements in the expansion of this statement and enter them into symbol table
Create top-level symbols for all statements in the expansion of this statement and enter them into symbol table
For all class definitions stat
in xstats
: If the companion class is
not also defined in xstats
, invalidate it by setting its info to
NoType.
For all class definitions stat
in xstats
: If the companion class is
not also defined in xstats
, invalidate it by setting its info to
NoType.
Determines whether this field holds an enum constant.
Determines whether this field holds an enum constant.
Index symbols in tree
while asserting the lateCompile
flag.
This will cause any old top-level symbol with the same fully qualified
name as a newly created symbol to be replaced.
Index symbols in tree
while asserting the lateCompile
flag.
This will cause any old top-level symbol with the same fully qualified
name as a newly created symbol to be replaced.
The signature of a module valdef. This will compute the corresponding module class TypeRef immediately without going through the defined type of the ValDef. This is necessary to avoid cyclic references involving imports and module val defs.
The signature of a module valdef. This will compute the corresponding module class TypeRef immediately without going through the defined type of the ValDef. This is necessary to avoid cyclic references involving imports and module val defs.
Typecheck tree
during completion using typed
, and remember result in TypedAhead map
Typecheck tree
during completion using typed
, and remember result in TypedAhead map
The type signature of a ValDef or DefDef
The type signature of a ValDef or DefDef
- Value Params
- mdef
The definition
- paramFn
A wrapping function that produces the type of the defined symbol, given its final return type
- sym
Its symbol
Concrete fields
A map from method symbols to nested typers. Populated when methods are completed. Emptied when they are typechecked. The nested typer contains new versions of the four maps above including this one, so that trees that are shared between different DefDefs can be independently used as indices. It also contains a scope that contains nested parameters.
A map from method symbols to nested typers. Populated when methods are completed. Emptied when they are typechecked. The nested typer contains new versions of the four maps above including this one, so that trees that are shared between different DefDefs can be independently used as indices. It also contains a scope that contains nested parameters.
The scope of the typer. For nested typers this is a place parameters are entered during completion and where they survive until typechecking. A context with this typer also has this scope.
The scope of the typer. For nested typers this is a place parameters are entered during completion and where they survive until typechecking. A context with this typer also has this scope.