scala.tools.nsc.interpreter.ReplDir.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scala-compiler Show documentation
Show all versions of scala-compiler Show documentation
Compiler for the SubScript extension of the Scala Programming Language
The newest version!
/* NSC -- new Scala compiler
* Copyright 2005-2013 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools.nsc
package interpreter
import io.VirtualDirectory
import settings.MutableSettings
import scala.reflect.io.{ AbstractFile, PlainDirectory, Directory }
import scala.collection.generic.Clearable
/** Directory to save .class files to. */
trait ReplDir extends AbstractFile with Clearable { }
private class ReplVirtualDir() extends VirtualDirectory("(memory)", None) with ReplDir { }
private class ReplRealDir(dir: Directory) extends PlainDirectory(dir) with ReplDir {
def clear() = {
dir.deleteRecursively()
dir.createDirectory()
}
}
class ReplOutput(val dirSetting: MutableSettings#StringSetting) {
// outdir for generated classfiles - may be in-memory (the default),
// a generated temporary directory, or a specified outdir.
val dir: ReplDir = (
if (dirSetting.isDefault)
new ReplVirtualDir()
else if (dirSetting.value == "")
new ReplRealDir(Directory.makeTemp("repl"))
else
new ReplRealDir(Directory(dirSetting.value))
)
// print the contents hierarchically
def show(out: JPrintWriter) = {
def pp(root: AbstractFile, indentLevel: Int) {
val label = root.name
val spaces = " " * indentLevel
out.println(spaces + label)
if (root.isDirectory)
root.toList sortBy (_.name) foreach (x => pp(x, indentLevel + 1))
}
pp(dir, 0)
}
}