summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc
diff options
context:
space:
mode:
authorEugene Burmako <burmako@epfl.ch>2011-11-28 13:37:52 +0000
committerEugene Burmako <burmako@epfl.ch>2011-11-28 13:37:52 +0000
commit4e987a3cf032eb176c20bf3fd5ac847a73b19c00 (patch)
tree41b2cc06372010f9d30a671d46bf504aa3f9bc05 /src/compiler/scala/tools/nsc
parent66bf8db3f115675377d82869fddcab6006adf04d (diff)
downloadscala-4e987a3cf032eb176c20bf3fd5ac847a73b19c00.tar.gz
scala-4e987a3cf032eb176c20bf3fd5ac847a73b19c00.tar.bz2
scala-4e987a3cf032eb176c20bf3fd5ac847a73b19c00.zip
Reflection toolboxes now respect settings that ...
Reflection toolboxes now respect settings that are provided to them. Before the fix CompilerCommand lacked the (args, settings, errorFn) ctor. I added it and provided means to augment passed settings with custom errorFn. Closes SI-5239. Review by odersky.
Diffstat (limited to 'src/compiler/scala/tools/nsc')
-rw-r--r--src/compiler/scala/tools/nsc/CompilerCommand.scala2
-rw-r--r--src/compiler/scala/tools/nsc/Settings.scala6
-rw-r--r--src/compiler/scala/tools/nsc/settings/MutableSettings.scala17
3 files changed, 25 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/CompilerCommand.scala b/src/compiler/scala/tools/nsc/CompilerCommand.scala
index 63cb62ee2e..54bc218912 100644
--- a/src/compiler/scala/tools/nsc/CompilerCommand.scala
+++ b/src/compiler/scala/tools/nsc/CompilerCommand.scala
@@ -11,6 +11,8 @@ import io.File
/** A class representing command line info for scalac */
class CompilerCommand(arguments: List[String], val settings: Settings) {
def this(arguments: List[String], error: String => Unit) = this(arguments, new Settings(error))
+ def this(arguments: List[String], settings: Settings, error: String => Unit) = this(arguments, settings withErrorFn error)
+
type Setting = Settings#Setting
/** file extensions of files that the compiler can process */
diff --git a/src/compiler/scala/tools/nsc/Settings.scala b/src/compiler/scala/tools/nsc/Settings.scala
index ca99ddf27a..d57d5546fa 100644
--- a/src/compiler/scala/tools/nsc/Settings.scala
+++ b/src/compiler/scala/tools/nsc/Settings.scala
@@ -11,4 +11,10 @@ import settings.MutableSettings
*/
class Settings(errorFn: String => Unit) extends MutableSettings(errorFn) {
def this() = this(Console.println)
+
+ override def withErrorFn(errorFn: String => Unit): Settings = {
+ val settings = new Settings(errorFn)
+ copyInto(settings)
+ settings
+ }
}
diff --git a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
index 67a556f6f0..b468e7c0af 100644
--- a/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
+++ b/src/compiler/scala/tools/nsc/settings/MutableSettings.scala
@@ -22,6 +22,23 @@ class MutableSettings(val errorFn: String => Unit)
with Mutable {
type ResultOfTryToSet = List[String]
+ def withErrorFn(errorFn: String => Unit): MutableSettings = {
+ val settings = new MutableSettings(errorFn)
+ copyInto(settings)
+ settings
+ }
+
+ protected def copyInto(settings: MutableSettings) {
+ allSettings foreach { thisSetting =>
+ val otherSetting = settings.allSettings find { _.name == thisSetting.name }
+ otherSetting foreach { otherSetting =>
+ if (thisSetting.isSetByUser || otherSetting.isSetByUser) {
+ otherSetting.value = thisSetting.value.asInstanceOf[otherSetting.T]
+ }
+ }
+ }
+ }
+
/** Iterates over the arguments applying them to settings where applicable.
* Then verifies setting dependencies are met.
*