summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/CompilerCommand.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-25 19:55:53 +0000
committerPaul Phillips <paulp@improving.org>2010-03-25 19:55:53 +0000
commit6ee24a3c5d31ef769e47410d8806a5f4bd7a06bf (patch)
treee0e5352fba603060439c6fe9e1d024192eb32bd5 /src/compiler/scala/tools/nsc/CompilerCommand.scala
parentc0b615fe80fd052d5c87f39cfa6626da43c03669 (diff)
downloadscala-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.scala39
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)
}