diff options
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") |