summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/dependencies/References.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/dependencies/References.scala')
-rw-r--r--src/compiler/scala/tools/nsc/dependencies/References.scala34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/dependencies/References.scala b/src/compiler/scala/tools/nsc/dependencies/References.scala
new file mode 100644
index 0000000000..89fa71f6c1
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/dependencies/References.scala
@@ -0,0 +1,34 @@
+package scala.tools.nsc.dependencies;
+import util.SourceFile;
+
+import collection._
+
+abstract class References extends SubComponent with Files {
+ import global._
+
+ val phaseName = "references analysis";
+
+ def newPhase(prev: Phase) = new ReferenceAnalysisPhase(prev)
+
+ /** Top level definitions per source file. */
+ val definitions: mutable.Map[String, List[Symbol]] = new mutable.HashMap
+
+ class ReferenceAnalysisPhase(prev: Phase) extends StdPhase(prev) {
+ def apply(unit: global.CompilationUnit) {
+ val buf = new mutable.ListBuffer[Symbol]
+ (new Traverser {
+ override def traverse(tree: Tree) {
+ tree match {
+ case cdef: ClassDef if !cdef.symbol.isModuleClass =>
+ buf += cdef.symbol.cloneSymbol
+ case _ =>
+ super.traverse(tree)
+ }
+ }
+ }).apply(unit.body)
+
+ definitions(unit.source.file.path) = buf.toList
+ }
+ }
+}
+