summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala17
-rw-r--r--src/compiler/scala/tools/nsc/GlobalSymbolLoaders.scala30
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/ICodes.scala11
-rw-r--r--src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala18
-rw-r--r--src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala2
-rw-r--r--src/eclipse/interactive/.classpath4
-rw-r--r--src/eclipse/scaladoc/.classpath6
-rw-r--r--src/interactive/scala/tools/nsc/interactive/Global.scala12
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala22
-rw-r--r--test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala2
10 files changed, 49 insertions, 75 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index ceab0625f8..296ba08eef 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -353,22 +353,9 @@ class Global(var currentSettings: Settings, var reporter: Reporter)
}
lazy val loaders = new {
- val symbolTable: Global.this.type = Global.this
+ val global: Global.this.type = Global.this
val platform: Global.this.platform.type = Global.this.platform
- } with SymbolLoaders {
- protected override def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol = {
- def lookup = sym.info.member(name)
- // if loading during initialization of `definitions` typerPhase is not yet set.
- // in that case we simply load the member at the current phase
- if (currentRun.typerPhase eq null)
- lookup
- else
- enteringTyper { lookup }
- }
- protected override def compileLate(srcfile: AbstractFile): Unit =
- currentRun.compileLate(srcfile)
-
- }
+ } with GlobalSymbolLoaders
/** Returns the mirror that loaded given symbol */
def mirrorThatLoaded(sym: Symbol): Mirror = rootMirror
diff --git a/src/compiler/scala/tools/nsc/GlobalSymbolLoaders.scala b/src/compiler/scala/tools/nsc/GlobalSymbolLoaders.scala
new file mode 100644
index 0000000000..6921548230
--- /dev/null
+++ b/src/compiler/scala/tools/nsc/GlobalSymbolLoaders.scala
@@ -0,0 +1,30 @@
+/* NSC -- new Scala compiler
+ * Copyright 2005-2013 LAMP/EPFL
+ * @author Martin Odersky
+ */
+
+package scala
+package tools
+package nsc
+
+/**
+ * Symbol loaders implementation that wires dependencies using Global.
+ */
+abstract class GlobalSymbolLoaders extends symtab.SymbolLoaders {
+ val global: Global
+ val symbolTable: global.type = global
+ val platform: symbolTable.platform.type
+ import global._
+ def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol = {
+ def lookup = sym.info.member(name)
+ // if loading during initialization of `definitions` typerPhase is not yet set.
+ // in that case we simply load the member at the current phase
+ if (currentRun.typerPhase eq null)
+ lookup
+ else
+ enteringTyper { lookup }
+ }
+
+ protected def compileLate(srcfile: io.AbstractFile): Unit =
+ currentRun.compileLate(srcfile)
+}
diff --git a/src/compiler/scala/tools/nsc/backend/icode/ICodes.scala b/src/compiler/scala/tools/nsc/backend/icode/ICodes.scala
index fca18eb09e..b9eb8f8aac 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/ICodes.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/ICodes.scala
@@ -110,15 +110,8 @@ abstract class ICodes extends AnyRef
object icodeReader extends ICodeReader {
lazy val global: ICodes.this.global.type = ICodes.this.global
import global._
- def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol = {
- def lookup = sym.info.member(name)
- // if loading during initialization of `definitions` typerPhase is not yet set.
- // in that case we simply load the member at the current phase
- if (currentRun.typerPhase eq null)
- lookup
- else
- enteringTyper { lookup }
- }
+ def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol =
+ global.loaders.lookupMemberAtTyperPhaseIfPossible(sym, name)
lazy val symbolTable: global.type = global
lazy val loaders: global.loaders.type = global.loaders
def classPath: util.ClassPath[AbstractFile] = ICodes.this.global.platform.classPath
diff --git a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
index 0d756fd309..4b9e056df3 100644
--- a/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/BrowsingLoaders.scala
@@ -12,28 +12,12 @@ import scala.tools.nsc.io.AbstractFile
* This class should be used whenever file dependencies and recompile sets
* are managed automatically.
*/
-abstract class BrowsingLoaders extends SymbolLoaders {
+abstract class BrowsingLoaders extends GlobalSymbolLoaders {
val global: Global
- val symbolTable: global.type
- protected def compileLate(srcfile: AbstractFile) = global.currentRun.compileLate(srcfile)
import global._
import syntaxAnalyzer.{OutlineParser, MalformedInput}
- /*
- * BrowsingLoaders has dependency on Global so we can implement this method here instead of forcing subclasses
- * of BrowsingLoaders (e.g. in interactive) to implement it.
- */
- override def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol = {
- def lookup = sym.info.member(name)
- // if loading during initialization of `definitions` typerPhase is not yet set.
- // in that case we simply load the member at the current phase
- if (currentRun.typerPhase eq null)
- lookup
- else
- enteringTyper { lookup }
- }
-
/** In browse mode, it can happen that an encountered symbol is already
* present. For instance, if the source file has a name different from
* the classes and objects it contains, the symbol loader will always
diff --git a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
index d22352154b..6f27eb8660 100644
--- a/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
+++ b/src/compiler/scala/tools/nsc/symtab/SymbolLoaders.scala
@@ -30,7 +30,7 @@ abstract class SymbolLoaders {
/**
* Required by ClassfileParser. Check documentation in that class for details.
*/
- protected def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol
+ def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol
/**
* Should forward to `Run.compileLate`. The more principled fix would be to
* determine why this functionality is needed and extract it into a separate
diff --git a/src/eclipse/interactive/.classpath b/src/eclipse/interactive/.classpath
index 73a67e45ed..9e773a39d2 100644
--- a/src/eclipse/interactive/.classpath
+++ b/src/eclipse/interactive/.classpath
@@ -3,7 +3,7 @@
<classpathentry kind="src" path="interactive"/>
<classpathentry combineaccessrules="false" kind="src" path="/scaladoc"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_COMPILER_CONTAINER"/>
- <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-compiler"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-library"/>
<classpathentry kind="output" path="build-quick-interactive"/>
</classpath>
diff --git a/src/eclipse/scaladoc/.classpath b/src/eclipse/scaladoc/.classpath
index caafcf33b0..8e03c97657 100644
--- a/src/eclipse/scaladoc/.classpath
+++ b/src/eclipse/scaladoc/.classpath
@@ -3,8 +3,10 @@
<classpathentry kind="src" path="scaladoc"/>
<classpathentry combineaccessrules="false" kind="src" path="/partest"/>
<classpathentry kind="var" path="SCALA_BASEDIR/lib/ant/ant.jar"/>
- <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_COMPILER_CONTAINER"/>
- <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-compiler"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-library"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-xml"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/scala-parser-combinators"/>
<classpathentry kind="output" path="build-quick-scaladoc"/>
</classpath>
diff --git a/src/interactive/scala/tools/nsc/interactive/Global.scala b/src/interactive/scala/tools/nsc/interactive/Global.scala
index cfe6d57eb8..492f0f4fb4 100644
--- a/src/interactive/scala/tools/nsc/interactive/Global.scala
+++ b/src/interactive/scala/tools/nsc/interactive/Global.scala
@@ -365,20 +365,16 @@ class Global(settings: Settings, _reporter: Reporter, projectName: String = "")
*/
override def registerTopLevelSym(sym: Symbol) { currentTopLevelSyms += sym }
+ protected type SymbolLoadersInInteractive = GlobalSymbolLoaders {
+ val global: Global.this.type
+ val platform: Global.this.platform.type
+ }
/** Symbol loaders in the IDE parse all source files loaded from a package for
* top-level idents. Therefore, we can detect top-level symbols that have a name
* different from their source file
*/
- protected type SymbolLoadersInInteractive = SymbolLoaders {
- // `global` val is needed so we conform to loaders type in Global in Scala 2.11.0-M4
- // TODO: remove once 2.11.0-M5 is used to build interactive
- val global: Global.this.type
- val symbolTable: Global.this.type
- val platform: Global.this.platform.type
- }
override lazy val loaders: SymbolLoadersInInteractive = new {
val global: Global.this.type = Global.this
- val symbolTable: Global.this.type = Global.this
val platform: Global.this.platform.type = Global.this.platform
} with BrowsingLoaders
diff --git a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
index 94d3809fc3..723f8b1dc8 100644
--- a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
@@ -25,33 +25,15 @@ trait ScaladocGlobalTrait extends Global {
}
override lazy val loaders = new {
- val symbolTable: outer.type = outer
- val platform: outer.platform.type = outer.platform
- // `global` val is needed so we conform to loaders type in Global in Scala 2.11.0-M4
- // TODO: remove once 2.11.0-M5 is used to build Scaladoc
val global: outer.type = outer
- } with SymbolLoaders {
+ val platform: outer.platform.type = outer.platform
+ } with GlobalSymbolLoaders {
// SI-5593 Scaladoc's current strategy is to visit all packages in search of user code that can be documented
// therefore, it will rummage through the classpath triggering errors whenever it encounters package objects
// that are not in their correct place (see bug for details)
override protected def signalError(root: Symbol, ex: Throwable) {
log(s"Suppressing error involving $root: $ex")
}
-
- // TODO: Add `override` modifier once Scala 2.11.0-M5 is used to build Scaladoc
- protected /*override*/ def compileLate(srcfile: io.AbstractFile): Unit =
- currentRun.compileLate(srcfile)
-
- // TODO: Add `override` modifier once Scala 2.11.0-M5 is used to build Scaladoc
- protected def /*override*/ lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol = {
- def lookup = sym.info.member(name)
- // if loading during initialization of `definitions` typerPhase is not yet set.
- // in that case we simply load the member at the current phase
- if (currentRun.typerPhase eq null)
- lookup
- else
- enteringTyper { lookup }
- }
}
}
diff --git a/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala b/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
index 209d93adb2..285e87e3b2 100644
--- a/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
+++ b/test/junit/scala/tools/nsc/symtab/SymbolTableForUnitTesting.scala
@@ -42,7 +42,7 @@ class SymbolTableForUnitTesting extends SymbolTable {
object loaders extends symtab.SymbolLoaders {
val symbolTable: SymbolTableForUnitTesting.this.type = SymbolTableForUnitTesting.this
lazy val platform: symbolTable.platform.type = symbolTable.platform
- protected def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol =
+ def lookupMemberAtTyperPhaseIfPossible(sym: Symbol, name: Name): Symbol =
sym.info.member(name)
protected override def compileLate(srcfile: AbstractFile): Unit =
sys.error(s"We do not expect compileLate to be called in SymbolTableTest. The srcfile passed in is $srcfile")