c

scala.tools.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.

Source
ExtractUsedNames.scala
Linear Supertypes
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ExtractUsedNames
  2. GlobalHelpers
  3. ClassName
  4. Compat
  5. AnyRef
  6. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new ExtractUsedNames(global: GlobalType)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toany2stringadd[ExtractUsedNames[GlobalType]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (ExtractUsedNames[GlobalType], B)
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toArrowAssoc[ExtractUsedNames[GlobalType]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  6. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  7. 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
  8. 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.

    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.

    Attributes
    protected
    Definition Classes
    ClassName
  9. 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
  10. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  11. def constructorName(cls: GlobalType.Symbol): GlobalType.Name

    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.

    Attributes
    protected
    Definition Classes
    ClassName
  12. def constructorNameAsString(cls: GlobalType.Symbol): String
    Attributes
    protected
    Definition Classes
    ClassName
  13. 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
  14. def ensuring(cond: (ExtractUsedNames[GlobalType]) => Boolean, msg: => Any): ExtractUsedNames[GlobalType]
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toEnsuring[ExtractUsedNames[GlobalType]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  15. def ensuring(cond: (ExtractUsedNames[GlobalType]) => Boolean): ExtractUsedNames[GlobalType]
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toEnsuring[ExtractUsedNames[GlobalType]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  16. def ensuring(cond: Boolean, msg: => Any): ExtractUsedNames[GlobalType]
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toEnsuring[ExtractUsedNames[GlobalType]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  17. def ensuring(cond: Boolean): ExtractUsedNames[GlobalType]
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toEnsuring[ExtractUsedNames[GlobalType]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  18. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  19. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  20. def extractAndReport(unit: GlobalType.CompilationUnit): Unit
  21. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  22. def flatclassName(s: GlobalType.Symbol, sep: Char, dollarRequired: Boolean): String
    Attributes
    protected
    Definition Classes
    ClassName
  23. 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
  24. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  25. val global: GlobalType
    Definition Classes
    ExtractUsedNamesGlobalHelpersClassNameCompat
  26. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  27. 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()
  28. 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()
  29. 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
  30. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  31. final def isSyntheticCoreClass(sym: GlobalType.Symbol): Boolean
    Definition Classes
    GlobalHelpers
  32. def isTopLevelModule(sym: GlobalType.Symbol): Boolean
    Attributes
    protected
    Definition Classes
    ClassName
  33. def mangledName(s: GlobalType.Symbol): GlobalType.Name

    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.

    Attributes
    protected
    Definition Classes
    ClassName
  34. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  35. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  36. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  37. 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
  38. def processOriginalTreeAttachment(in: GlobalType.Tree)(func: (GlobalType.Tree) => Unit): Unit

    If given tree contains object tree attachment calls func on tree from attachment.

    If given tree contains object tree attachment calls func on tree from attachment.

    Attributes
    protected
    Definition Classes
    Compat
  39. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  40. def toString(): String
    Definition Classes
    AnyRef → Any
  41. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  42. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  43. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  44. object Feedback

    Define common error messages for error reporting and assertions.

    Define common error messages for error reporting and assertions.

    Definition Classes
    GlobalHelpers
  45. object MacroExpansionOf
    Definition Classes
    GlobalHelpers

Deprecated Value Members

  1. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toStringFormat[ExtractUsedNames[GlobalType]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @deprecated @inline()
    Deprecated

    (Since version 2.12.16) Use formatString.format(value) instead of value.formatted(formatString), or use the f"" string interpolator. In Java 15 and later, formatted resolves to the new method in String which has reversed parameters.

  2. def [B](y: B): (ExtractUsedNames[GlobalType], B)
    Implicit
    This member is added by an implicit conversion from ExtractUsedNames[GlobalType] toArrowAssoc[ExtractUsedNames[GlobalType]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @deprecated
    Deprecated

    (Since version 2.13.0) Use -> instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.

Inherited from GlobalHelpers

Inherited from ClassName

Inherited from Compat

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd fromExtractUsedNames[GlobalType] to any2stringadd[ExtractUsedNames[GlobalType]]

Inherited by implicit conversion StringFormat fromExtractUsedNames[GlobalType] to StringFormat[ExtractUsedNames[GlobalType]]

Inherited by implicit conversion Ensuring fromExtractUsedNames[GlobalType] to Ensuring[ExtractUsedNames[GlobalType]]

Inherited by implicit conversion ArrowAssoc fromExtractUsedNames[GlobalType] to ArrowAssoc[ExtractUsedNames[GlobalType]]

Ungrouped