aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/config
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-04 12:07:59 +0100
committerMartin Odersky <odersky@gmail.com>2016-03-12 16:08:36 +0100
commitc1e263bebf7e73239e7faa3e48d75a0a7df45d76 (patch)
treecae99b0d165cc662ab8ddc7578844e24fb54263e /src/dotty/tools/dotc/config
parentc43ae4a31cac6363050ab07aa6ec1a9f0e9213b4 (diff)
downloaddotty-c1e263bebf7e73239e7faa3e48d75a0a7df45d76.tar.gz
dotty-c1e263bebf7e73239e7faa3e48d75a0a7df45d76.tar.bz2
dotty-c1e263bebf7e73239e7faa3e48d75a0a7df45d76.zip
Avoid setupMethod in Driver
Driver should not know that patch functionality exists. Instead, introduce settings that can introduce their own stateful values.
Diffstat (limited to 'src/dotty/tools/dotc/config')
-rw-r--r--src/dotty/tools/dotc/config/ScalaSettings.scala6
-rw-r--r--src/dotty/tools/dotc/config/Settings.scala9
2 files changed, 12 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/config/ScalaSettings.scala b/src/dotty/tools/dotc/config/ScalaSettings.scala
index 17da1f8d1..cdbf6ec50 100644
--- a/src/dotty/tools/dotc/config/ScalaSettings.scala
+++ b/src/dotty/tools/dotc/config/ScalaSettings.scala
@@ -1,6 +1,8 @@
-package dotty.tools.dotc.config
+package dotty.tools.dotc
+package config
import PathResolver.Defaults
+import rewrite.Patches
class ScalaSettings extends Settings.SettingGroup {
@@ -48,7 +50,7 @@ class ScalaSettings extends Settings.SettingGroup {
val d = StringSetting("-d", "directory|jar", "destination for generated classfiles.", ".")
val nospecialization = BooleanSetting("-no-specialization", "Ignore @specialize annotations.")
val language = MultiStringSetting("-language", "feature", "Enable one or more language features.")
- val rewrite = BooleanSetting("-rewrite", "When used in conjunction with -language:Scala2 rewrites sources to migrate to new syntax")
+ val rewrite = OptionSetting[Patches.PatchedFiles]("-rewrite", "When used in conjunction with -language:Scala2 rewrites sources to migrate to new syntax")
/** -X "Advanced" settings
*/
diff --git a/src/dotty/tools/dotc/config/Settings.scala b/src/dotty/tools/dotc/config/Settings.scala
index 73bb056aa..eddeb83ab 100644
--- a/src/dotty/tools/dotc/config/Settings.scala
+++ b/src/dotty/tools/dotc/config/Settings.scala
@@ -19,6 +19,7 @@ object Settings {
val StringTag = ClassTag(classOf[String])
val ListTag = ClassTag(classOf[List[_]])
val VersionTag = ClassTag(classOf[ScalaVersion])
+ val OptionTag = ClassTag(classOf[Option[_]])
class SettingsState(initialValues: Seq[Any]) {
private var values = ArrayBuffer(initialValues: _*)
@@ -55,7 +56,8 @@ object Settings {
choices: Seq[T] = Nil,
prefix: String = "",
aliases: List[String] = Nil,
- depends: List[(Setting[_], Any)] = Nil)(private[Settings] val idx: Int) {
+ depends: List[(Setting[_], Any)] = Nil,
+ propertyClass: Option[Class[_]] = None)(private[Settings] val idx: Int) {
def withAbbreviation(abbrv: String): Setting[T] =
copy(aliases = aliases :+ abbrv)(idx)
@@ -112,6 +114,8 @@ object Settings {
def doSet(argRest: String) = ((implicitly[ClassTag[T]], args): @unchecked) match {
case (BooleanTag, _) =>
update(true, args)
+ case (OptionTag, _) =>
+ update(Some(propertyClass.get.newInstance), args)
case (ListTag, _) =>
if (argRest.isEmpty) missingArg
else update((argRest split ",").toList, args)
@@ -255,5 +259,8 @@ object Settings {
def VersionSetting(name: String, descr: String, default: ScalaVersion = NoScalaVersion): Setting[ScalaVersion] =
publish(Setting(name, descr, default))
+
+ def OptionSetting[T: ClassTag](name: String, descr: String): Setting[Option[T]] =
+ publish(Setting(name, descr, None, propertyClass = Some(implicitly[ClassTag[T]].runtimeClass)))
}
}