xsbt

ExtractUsedNames

class ExtractUsedNames[GlobalType <: CallbackGlobal] extends Compat

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.

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. import node itself has a term symbol associated with it with a name <import>. I (gkossakowski) tried to track down what role this symbol serves but I couldn't. It doesn't look like there are many places in Scala compiler that refer to that kind of symbols explicitly. 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. Compat
  3. AnyRef
  4. 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. 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. val LocalChild: scala.reflect.internal.StdNames.tpnme.NameType

    Definition Classes
    Compat
  8. object MacroExpansionOf

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

    Definition Classes
    Compat
  10. object NullaryMethodTpe

    Definition Classes
    Compat
  11. val ScalaObjectClass: GlobalType.ClassSymbol

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

    Definition Classes
    Any
  13. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  14. final def eq(arg0: AnyRef): Boolean

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

    Definition Classes
    AnyRef → Any
  16. def extract(unit: GlobalType.CompilationUnit): Set[String]

  17. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  18. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  19. val global: GlobalType

    Definition Classes
    ExtractUsedNamesCompat
  20. def hasMacro(s: GlobalType.Symbol): Boolean

    Definition Classes
    Compat
  21. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  22. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  23. def moduleSuffix(s: GlobalType.Symbol): String

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

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

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

    Definition Classes
    AnyRef
  27. implicit def symbolCompat(sym: GlobalType.Symbol): SymbolCompat

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

    Definition Classes
    AnyRef
  29. def toString(): String

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

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

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

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Compat

Inherited from AnyRef

Inherited from Any

Ungrouped