Define common error messages for error reporting and assertions.
Create a (source) name for a class symbol s
.
Create a (source) name for a class symbol s
.
Create a (source) name for the class symbol s
with a prefix determined by the class symbol in
.
Create a (source) name for the class symbol s
with a prefix determined by the class symbol in
.
If s
represents a package object pkg3
, then the returned name will be pkg1.pkg2.pkg3.package
.
If s
represents a class Foo
nested in package object pkg3
then the returned name is pkg1.pkg2.pk3.Foo
.
Create a String (source) name for a class symbol s
.
Create a String (source) name for a class symbol s
.
Creates a flat (binary) name for a class symbol s
.
Creates a flat (binary) name for a class symbol s
.
Apply op
on every type symbol which doesn't represent a package.
Apply op
on every type symbol which doesn't represent a package.
Return true if symbol shall be ignored, false otherwise.
Return true if symbol shall be ignored, false otherwise.
Return true if type shall be ignored, false otherwise.
Return true if type shall be ignored, false otherwise.
Return true if name is empty, false otherwise.
Return true if name is empty, false otherwise.
Returns true if given tree contains macro attchment.
Returns true if given tree contains macro attchment. In such case calls func on tree from attachment.
Extracts simple names used in given compilation unit.
Extracts simple (unqualified) names mentioned in given in non-definition position by collecting all symbols associated with non-definition trees and extracting names from all collected symbols. Also extract the names of the types of non-definition trees (see source-dependencies/types-in-used-names-* and source-dependencies/as-seen-from-* for examples where this is required).
If given symbol is mentioned both in definition and in non-definition position (e.g. in member selection) then that symbol is collected. It means that names of symbols defined and used in the same compilation unit are extracted. We've considered not extracting names of those symbols as an optimization strategy. It turned out that this is not correct. Check https://github.com/gkossakowski/sbt/issues/3 for an example of scenario where it matters.
All extracted names are returned in _decoded_ form. This way we stay consistent with the rest of incremental compiler which works with names in decoded form.
Names mentioned in Import nodes are handled properly but require some special logic for two reasons:
termSymbol
of Import nodes point to the symbol of the prefix it imports from (not the actual members that we import, that are represented as names). 2. ImportSelector is not subtype of Tree therefore is not processed byTree.foreach
.Another type of tree nodes that requires special handling is TypeTree. TypeTree nodes has a little bit odd representation:
The tree walking algorithm walks into TypeTree.original explicitly.