summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/IdeSupport.scala
blob: 91e7ea47a121e897fbe1f0aae4f9697322ca4c07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package scala.tools.nsc
import scala.tools.nsc.io._
trait IdeSupport extends Global with symtab.IdeSupport {
  /** to do no dependency tracking */
  protected def normalCompile[T](f : => T) : T = f
  override def unpickleIDEHook : (( => Type) => Type) = f => normalCompile(f)
  class IdeRun extends Run {
    override def compiles(sym : Symbol) : Boolean = false // throw new Error
    override def compileLate(file : AbstractFile) = {
      reloadSource(file)
      normalCompile(super.compileLate(file))
    }
    override def stopPhase(name : String) =
      name == "superaccessors" || super.stopPhase(name)
  }


  // load a source file without us caring about adapt.
  def loadSource(file : AbstractFile) : Option[CompilationUnit] = {
    val run = new IdeRun
    reloadSource(file)
    val source = getSourceFile(file)
    try {
      normalCompile(run.compileSources(source :: Nil))
      run.units.find(unit => unit.source == source)
    } catch {
      case e =>
        logError("error in presentation normal compile ", e)
        None
    }
  }
  object loaders1 extends {
    val global : IdeSupport.this.type = IdeSupport.this
  } with scala.tools.nsc.symtab.SymbolLoaders {
    import global._
    protected override def completeClassfile(root : global.Symbol, loader : ClassfileLoader)(f : => Unit) : Unit =
      global.normalCompile(f)
    override def computeDepends(from : PackageLoader) : global.PackageScopeDependMap = IdeSupport.this.computeDepends(from.asInstanceOf[IdeSupport.this.loaders.PackageLoader])
  }
  def computeDepends(from : loaders.PackageLoader) : PackageScopeDependMap = null
  override lazy val loaders = loaders1
}