xsbt

ExtractUsedNames

class ExtractUsedNames[GlobalType <: CallbackGlobal] extends Compat with ClassName with GlobalHelpers

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:

  1. The 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 by Tree.foreach.

Another type of tree nodes that requires special handling is TypeTree. TypeTree nodes has a little bit odd representation:

  1. TypeTree.hasSymbol always returns false even when TypeTree.symbol returns a symbol 2. The original tree from which given TypeTree was derived is stored in TypeTree.original but Tree.forech doesn't walk into original tree so we missed it

The tree walking algorithm walks into TypeTree.original explicitly.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. ExtractUsedNames
  2. GlobalHelpers
  3. ClassName
  4. Compat
  5. AnyRef
  6. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ExtractUsedNames(global: GlobalType)

Type Members

  1. implicit class MacroExpansionAttachmentCompat extends AnyRef

    Definition Classes
    Compat
  2. final class SymbolCompat extends AnyRef

    Attributes
    protected
    Definition Classes
    Compat

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. val DummyValue: Int

    Definition Classes
    Compat
  7. object Feedback

    Define common error messages for error reporting and assertions.

  8. val LocalChild: scala.reflect.internal.StdNames.tpnme.NameType

    Definition Classes
    Compat
  9. object MacroExpansionOf

    Definition Classes
    GlobalHelpers
  10. object MirrorHelper

    Definition Classes
    Compat
  11. val Nullary: GlobalType.NullaryMethodType.type

    Definition Classes
    Compat
  12. object NullaryMethodTpe

    Definition Classes
    Compat
  13. val ScalaObjectClass: GlobalType.ClassSymbol

    Definition Classes
    Compat
  14. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  15. def className(s: GlobalType.Symbol): GlobalType.Name

    Create a (source) name for a class symbol s.

    Create a (source) name for a class symbol s.

    Attributes
    protected
    Definition Classes
    ClassName
  16. def classNameAsSeenIn(in: GlobalType.Symbol, s: GlobalType.Symbol): String

    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.

    Attributes
    protected
    Definition Classes
    ClassName
  17. def classNameAsString(s: GlobalType.Symbol): String

    Create a String (source) name for a class symbol s.

    Create a String (source) name for a class symbol s.

    Attributes
    protected
    Definition Classes
    ClassName
  18. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def devWarning(msg: ⇒ String): Unit

    Definition Classes
    Compat
    Annotations
    @inline()
  20. def enclOrModuleClass(s: GlobalType.Symbol): GlobalType.Symbol

    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.

    Definition Classes
    GlobalHelpers
  21. final def enteringPhase[T](ph: Phase)(op: ⇒ T): T

    Definition Classes
    Compat
    Annotations
    @inline()
  22. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  23. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  24. def extractAndReport(unit: GlobalType.CompilationUnit): Unit

  25. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  26. def flatclassName(s: GlobalType.Symbol, sep: Char, dollarRequired: Boolean): String

    Attributes
    protected
    Definition Classes
    ClassName
  27. def flatname(s: GlobalType.Symbol, separator: Char): String

    Creates a flat (binary) name for a class symbol s.

    Creates a flat (binary) name for a class symbol s.

    Attributes
    protected
    Definition Classes
    ClassName
  28. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  29. val global: GlobalType

    Definition Classes
    ExtractUsedNamesGlobalHelpersClassNameCompat
  30. def hasMacro(s: GlobalType.Symbol): Boolean

    Definition Classes
    Compat
  31. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  32. def ignoredSymbol(symbol: GlobalType.Symbol): Boolean

    Return true if symbol shall be ignored, false otherwise.

    Return true if symbol shall be ignored, false otherwise.

    Definition Classes
    GlobalHelpers
    Annotations
    @inline()
  33. def ignoredType(tpe: GlobalType.Type): Boolean

    Return true if type shall be ignored, false otherwise.

    Return true if type shall be ignored, false otherwise.

    Definition Classes
    GlobalHelpers
    Annotations
    @inline()
  34. def isEmptyName(name: GlobalType.Name): Boolean

    Return true if name is empty, false otherwise.

    Return true if name is empty, false otherwise.

    Definition Classes
    GlobalHelpers
  35. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  36. def isTopLevelModule(sym: GlobalType.Symbol): Boolean

    Attributes
    protected
    Definition Classes
    ClassName
  37. def moduleSuffix(s: GlobalType.Symbol): String

    Definition Classes
    Compat
  38. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  39. final def notify(): Unit

    Definition Classes
    AnyRef
  40. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  41. def processMacroExpansion(in: GlobalType.Tree)(func: (GlobalType.Tree) ⇒ Unit): Boolean

    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.

    Definition Classes
    GlobalHelpers
  42. implicit def symbolCompat(sym: GlobalType.Symbol): SymbolCompat

    Attributes
    protected
    Definition Classes
    Compat
  43. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  44. def toString(): String

    Definition Classes
    AnyRef → Any
  45. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  46. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  47. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from GlobalHelpers

Inherited from ClassName

Inherited from Compat

Inherited from AnyRef

Inherited from Any

Ungrouped