diff options
author | Paul Phillips <paulp@improving.org> | 2010-03-25 19:55:53 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-03-25 19:55:53 +0000 |
commit | 6ee24a3c5d31ef769e47410d8806a5f4bd7a06bf (patch) | |
tree | e0e5352fba603060439c6fe9e1d024192eb32bd5 /src/compiler/scala/tools/nsc/CompilerCommand.scala | |
parent | c0b615fe80fd052d5c87f39cfa6626da43c03669 (diff) | |
download | scala-6ee24a3c5d31ef769e47410d8806a5f4bd7a06bf.tar.gz scala-6ee24a3c5d31ef769e47410d8806a5f4bd7a06bf.tar.bz2 scala-6ee24a3c5d31ef769e47410d8806a5f4bd7a06bf.zip |
While working on partest discovered that Compil...
While working on partest discovered that CompilerCommand ignores half
its constructor arguments and a couple dozen places blithely pass it
those arguments as if they're being used. Then there were setups like
this:
class OfflineCompilerCommand(
arguments: List[String],
settings: Settings,
error: String => Unit,
interactive: Boolean)
extends CompilerCommand(arguments, new Settings(error), error, false)
Hey offline compiler command, why throw away the perfectly good settings
you were given? Ever heard 'reduce, reuse, recycle'? How did you ever
work... or do you? No review.
Diffstat (limited to 'src/compiler/scala/tools/nsc/CompilerCommand.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/CompilerCommand.scala | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/src/compiler/scala/tools/nsc/CompilerCommand.scala b/src/compiler/scala/tools/nsc/CompilerCommand.scala index 0ef2bcb85d..c8c7482811 100644 --- a/src/compiler/scala/tools/nsc/CompilerCommand.scala +++ b/src/compiler/scala/tools/nsc/CompilerCommand.scala @@ -11,16 +11,8 @@ import scala.collection.mutable.ListBuffer import io.File /** A class representing command line info for scalac */ -class CompilerCommand( - arguments: List[String], - val settings: Settings, - error: String => Unit, - interactive: Boolean, - shouldProcessArguments: Boolean) -{ - def this(arguments: List[String], settings: Settings, error: String => Unit, interactive: Boolean) = - this(arguments, settings, error, interactive, true) - +class CompilerCommand(arguments: List[String], val settings: Settings) { + def this(arguments: List[String], error: String => Unit) = this(arguments, new Settings(error)) type Setting = Settings#Setting /** file extensions of files that the compiler can process */ @@ -83,19 +75,20 @@ class CompilerCommand( settings splitParams (file.lines() map stripComment mkString " ") } - // CompilerCommand needs processArguments called at the end of its constructor, - // as does its subclass GenericRunnerCommand, but it cannot be called twice as it - // accumulates arguments. The fact that it's called from within the constructors - // makes initialization order an obstacle to simplicity. - val (ok: Boolean, files: List[String]) = - if (shouldProcessArguments) { - // expand out @filename to the contents of that filename - val expandedArguments = arguments flatMap { - case x if x startsWith "@" => expandArg(x) - case x => List(x) - } - - settings.processArguments(expandedArguments, true) + // override this if you don't want arguments processed here + def shouldProcessArguments: Boolean = true + + def processArguments: (Boolean, List[String]) = { + // expand out @filename to the contents of that filename + val expandedArguments = arguments flatMap { + case x if x startsWith "@" => expandArg(x) + case x => List(x) } + + settings.processArguments(expandedArguments, true) + } + + val (ok, files) = + if (shouldProcessArguments) processArguments else (true, Nil) } |