Replace all types that directly refer to the forbidden
symbol by NoType
.
Replace all types that directly refer to the forbidden
symbol by NoType
.
(a specialized version of substThisAndSym)
Define common error messages for error reporting and assertions.
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
.
Note that some objects with special access rights are encoded in names
(like qualified privates private[qualifier]
). In order to get the right
original names, we need to use unexpandedName
.
Create a String (source) name for a class symbol s
.
Create a String (source) name for a class symbol s
.
Given a class symbol cls
, construct a name representing this constructor.
Given a class symbol cls
, construct a name representing this constructor.
For a class:
a.b.Foo
this is:
a;b;Foo;init;
The prefix is important to avoid name hashing all constructors together (see #97), the weird format is necessary to avoid scalac or zinc trying to interpret this name (in particular we should not use '.' and we should not use '<init>'), we use ';' because it is one of the few characters that cannot appear in a valid JVM name.
Return the enclosing class or the module class if it's a module.
Return the enclosing class or the module class if it's a module.
Creates a flat (binary) name for a class symbol s
.
Creates a flat (binary) name for a class symbol s
.
Force all lazy structures.
Force all lazy structures. This is necessary so that we see the symbols/types at this phase and so that we don't hold on to compiler objects and classes
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.
Mangle a JVM symbol name in a format better suited for internal uses by sbt.
Mangle a JVM symbol name in a format better suited for internal uses by sbt.
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 full (including private members) API representation out of Symbols and Types.
API for each class is extracted separately. Inner classes are represented as an empty (without members) member of the outer class and as a separate class with full API representation. For example:
class A { class B { def foo: Int = 123 } }
Is represented as:
// className = A class A { class B } // className = A.B class A.B { def foo: Int }
Each compilation unit should be processed by a fresh instance of this class.
NOTE: This class extract *full* API representation. In most of other places in the incremental compiler, only non-private (accessible from other compilation units) members are relevant. Other parts of the incremental compiler filter out private definitions before processing API structures. Check SameAPI for an example.