6
6
package scala .tools .partest
7
7
package nest
8
8
9
+ import scala .collection .mutable .ListBuffer
9
10
import scala .tools .nsc .{ Global , Settings , CompilerCommand , FatalError }
10
11
import scala .tools .nsc .reporters .{ Reporter , ConsoleReporter }
11
12
import scala .tools .nsc .util .{ FakePos , stackTraceString }
@@ -19,8 +20,6 @@ class ExtConsoleReporter(settings: Settings, val writer: PrintWriter) extends Co
19
20
}
20
21
21
22
class TestSettings (cp : String , error : String => Unit ) extends Settings (error) {
22
- def this (cp : String ) = this (cp, _ => ())
23
-
24
23
nowarnings.value = false
25
24
encoding.value = " UTF-8"
26
25
classpath.value = cp
@@ -82,7 +81,9 @@ class DirectCompiler(val runner: Runner) {
82
81
83
82
val classPath : List [Path ] = specializedOverride ++ codeLib ++ fileManager.testClassPath ++ List [Path ](outDir)
84
83
85
- val testSettings = new TestSettings (FileManager .joinPaths(classPath))
84
+ val parseArgErrors = ListBuffer .empty[String ]
85
+
86
+ val testSettings = new TestSettings (FileManager .joinPaths(classPath), s => parseArgErrors += s)
86
87
val logWriter = new FileWriter (logFile)
87
88
val srcDir = if (testFile.isDirectory) testFile else Path (testFile).parent.jfile
88
89
val opts = updatePluginPath(opts0, AbstractFile getDirectory outDir, AbstractFile getDirectory srcDir)
@@ -93,9 +94,15 @@ class DirectCompiler(val runner: Runner) {
93
94
94
95
testSettings.outputDirs setSingleOutput outDir.getPath
95
96
97
+ def reportError (s : String ): Unit = reporter.error(null , s)
98
+
99
+ parseArgErrors.toList foreach reportError
100
+
96
101
// check that option processing succeeded
97
- if (opts0.nonEmpty && ! command.ok)
98
- reporter.error(null , opts0.mkString(" bad options: " , space, " " ))
102
+ if (opts0.nonEmpty) {
103
+ if (! command.ok) reportError(opts0.mkString(" bad options: " , space, " " ))
104
+ if (command.files.nonEmpty) reportError(command.files.mkString(" flags file may only contain compiler options, found: " , space, " " ))
105
+ }
99
106
100
107
def ids = sources.map(_.testIdent) mkString space
101
108
vlog(s " % scalac $ids" )
@@ -115,7 +122,7 @@ class DirectCompiler(val runner: Runner) {
115
122
}
116
123
117
124
try { execCompile() }
118
- catch { case t : Throwable => reporter.error( null , t.getMessage) ; runner.genCrash(t) }
125
+ catch { case t : Throwable => reportError( t.getMessage) ; runner.genCrash(t) }
119
126
finally { logWriter.close() }
120
127
}
121
128
}
0 commit comments