From d14f56a3fd881f809e58783c49866d1491a5f3fe Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 20 Jan 2018 03:49:17 -0800 Subject: Swap over to simplified Mill module/source layout from SBT's Removes a lot of useless folders and gives us a chance to exercise this simplified layout. Support for the SBT layout is still verified by our integration tests --- moduledefs/resources/scalac-plugin.xml | 4 ++ moduledefs/src/main/resources/scalac-plugin.xml | 4 -- .../scala/mill/moduledefs/AutoOverridePlugin.scala | 58 ---------------------- .../src/main/scala/mill/moduledefs/Cacher.scala | 35 ------------- .../src/mill/moduledefs/AutoOverridePlugin.scala | 58 ++++++++++++++++++++++ moduledefs/src/mill/moduledefs/Cacher.scala | 35 +++++++++++++ 6 files changed, 97 insertions(+), 97 deletions(-) create mode 100644 moduledefs/resources/scalac-plugin.xml delete mode 100644 moduledefs/src/main/resources/scalac-plugin.xml delete mode 100644 moduledefs/src/main/scala/mill/moduledefs/AutoOverridePlugin.scala delete mode 100644 moduledefs/src/main/scala/mill/moduledefs/Cacher.scala create mode 100644 moduledefs/src/mill/moduledefs/AutoOverridePlugin.scala create mode 100644 moduledefs/src/mill/moduledefs/Cacher.scala (limited to 'moduledefs') diff --git a/moduledefs/resources/scalac-plugin.xml b/moduledefs/resources/scalac-plugin.xml new file mode 100644 index 00000000..48753a22 --- /dev/null +++ b/moduledefs/resources/scalac-plugin.xml @@ -0,0 +1,4 @@ + + auto-override-plugin + mill.moduledefs.AutoOverridePlugin + \ No newline at end of file diff --git a/moduledefs/src/main/resources/scalac-plugin.xml b/moduledefs/src/main/resources/scalac-plugin.xml deleted file mode 100644 index 48753a22..00000000 --- a/moduledefs/src/main/resources/scalac-plugin.xml +++ /dev/null @@ -1,4 +0,0 @@ - - auto-override-plugin - mill.moduledefs.AutoOverridePlugin - \ No newline at end of file diff --git a/moduledefs/src/main/scala/mill/moduledefs/AutoOverridePlugin.scala b/moduledefs/src/main/scala/mill/moduledefs/AutoOverridePlugin.scala deleted file mode 100644 index 5b33abbe..00000000 --- a/moduledefs/src/main/scala/mill/moduledefs/AutoOverridePlugin.scala +++ /dev/null @@ -1,58 +0,0 @@ -package mill.moduledefs - -import scala.reflect.internal.Flags -import scala.tools.nsc.io.VirtualFile -import scala.tools.nsc.util.BatchSourceFile -import scala.tools.nsc.{Global, Phase} -import scala.tools.nsc.plugins.{Plugin, PluginComponent} - -class AutoOverridePlugin(val global: Global) extends Plugin { - import global._ - override def init(options: List[String], error: String => Unit): Boolean = true - - val name = "auto-override-plugin" - val description = "automatically inserts `override` keywords for you" - val components = List[PluginComponent]( - new PluginComponent { - - val global = AutoOverridePlugin.this.global - import global._ - - override val runsAfter = List("typer") - override val runsBefore = List("patmat") - - val phaseName = "auto-override" - - override def newPhase(prev: Phase) = new GlobalPhase(prev) { - - def name: String = phaseName - - def isCacher(owner: Symbol) = { - val baseClasses = - if (owner.isClass) Some(owner.asClass.baseClasses) - else if (owner.isModule) Some(owner.asModule.baseClasses) - else None - baseClasses.exists(_.exists(_.fullName == "mill.moduledefs.Cacher")) - } - - def apply(unit: global.CompilationUnit): Unit = { - object AutoOverrider extends global.Transformer { - override def transform(tree: global.Tree) = tree match{ - case d: DefDef - if d.symbol.overrideChain.count(!_.isAbstract) > 1 - && !d.mods.isOverride - && isCacher(d.symbol.owner) => - - d.symbol.flags = d.symbol.flags | Flags.OVERRIDE - copyDefDef(d)(mods = d.mods | Flags.OVERRIDE) - case _ => super.transform(tree) - - } - } - - unit.body = AutoOverrider.transform(unit.body) - } - } - } - ) -} \ No newline at end of file diff --git a/moduledefs/src/main/scala/mill/moduledefs/Cacher.scala b/moduledefs/src/main/scala/mill/moduledefs/Cacher.scala deleted file mode 100644 index 023f03be..00000000 --- a/moduledefs/src/main/scala/mill/moduledefs/Cacher.scala +++ /dev/null @@ -1,35 +0,0 @@ -package mill.moduledefs - -import scala.collection.mutable -import scala.reflect.macros.blackbox.Context - - -trait Cacher{ - private[this] lazy val cacherLazyMap = mutable.Map.empty[sourcecode.Enclosing, Any] - - protected[this] def cachedTarget[T](t: => T) - (implicit c: sourcecode.Enclosing): T = synchronized{ - cacherLazyMap.getOrElseUpdate(c, t).asInstanceOf[T] - } -} - -object Cacher{ - def impl0[T: c.WeakTypeTag](c: Context) - (t: c.Expr[T]): c.Expr[T] = { - c.Expr[T](wrapCached[T](c)(t.tree)) - } - def wrapCached[R: c.WeakTypeTag](c: Context)(t: c.Tree) = { - - import c.universe._ - val owner = c.internal.enclosingOwner - val ownerIsCacherClass = - owner.owner.isClass && - owner.owner.asClass.baseClasses.exists(_.fullName == "mill.moduledefs.Cacher") - - if (ownerIsCacherClass && owner.isMethod) q"this.cachedTarget[${weakTypeTag[R]}]($t)" - else c.abort( - c.enclosingPosition, - "T{} members must be defs defined in a Cacher class/trait/object body" - ) - } -} \ No newline at end of file diff --git a/moduledefs/src/mill/moduledefs/AutoOverridePlugin.scala b/moduledefs/src/mill/moduledefs/AutoOverridePlugin.scala new file mode 100644 index 00000000..5b33abbe --- /dev/null +++ b/moduledefs/src/mill/moduledefs/AutoOverridePlugin.scala @@ -0,0 +1,58 @@ +package mill.moduledefs + +import scala.reflect.internal.Flags +import scala.tools.nsc.io.VirtualFile +import scala.tools.nsc.util.BatchSourceFile +import scala.tools.nsc.{Global, Phase} +import scala.tools.nsc.plugins.{Plugin, PluginComponent} + +class AutoOverridePlugin(val global: Global) extends Plugin { + import global._ + override def init(options: List[String], error: String => Unit): Boolean = true + + val name = "auto-override-plugin" + val description = "automatically inserts `override` keywords for you" + val components = List[PluginComponent]( + new PluginComponent { + + val global = AutoOverridePlugin.this.global + import global._ + + override val runsAfter = List("typer") + override val runsBefore = List("patmat") + + val phaseName = "auto-override" + + override def newPhase(prev: Phase) = new GlobalPhase(prev) { + + def name: String = phaseName + + def isCacher(owner: Symbol) = { + val baseClasses = + if (owner.isClass) Some(owner.asClass.baseClasses) + else if (owner.isModule) Some(owner.asModule.baseClasses) + else None + baseClasses.exists(_.exists(_.fullName == "mill.moduledefs.Cacher")) + } + + def apply(unit: global.CompilationUnit): Unit = { + object AutoOverrider extends global.Transformer { + override def transform(tree: global.Tree) = tree match{ + case d: DefDef + if d.symbol.overrideChain.count(!_.isAbstract) > 1 + && !d.mods.isOverride + && isCacher(d.symbol.owner) => + + d.symbol.flags = d.symbol.flags | Flags.OVERRIDE + copyDefDef(d)(mods = d.mods | Flags.OVERRIDE) + case _ => super.transform(tree) + + } + } + + unit.body = AutoOverrider.transform(unit.body) + } + } + } + ) +} \ No newline at end of file diff --git a/moduledefs/src/mill/moduledefs/Cacher.scala b/moduledefs/src/mill/moduledefs/Cacher.scala new file mode 100644 index 00000000..023f03be --- /dev/null +++ b/moduledefs/src/mill/moduledefs/Cacher.scala @@ -0,0 +1,35 @@ +package mill.moduledefs + +import scala.collection.mutable +import scala.reflect.macros.blackbox.Context + + +trait Cacher{ + private[this] lazy val cacherLazyMap = mutable.Map.empty[sourcecode.Enclosing, Any] + + protected[this] def cachedTarget[T](t: => T) + (implicit c: sourcecode.Enclosing): T = synchronized{ + cacherLazyMap.getOrElseUpdate(c, t).asInstanceOf[T] + } +} + +object Cacher{ + def impl0[T: c.WeakTypeTag](c: Context) + (t: c.Expr[T]): c.Expr[T] = { + c.Expr[T](wrapCached[T](c)(t.tree)) + } + def wrapCached[R: c.WeakTypeTag](c: Context)(t: c.Tree) = { + + import c.universe._ + val owner = c.internal.enclosingOwner + val ownerIsCacherClass = + owner.owner.isClass && + owner.owner.asClass.baseClasses.exists(_.fullName == "mill.moduledefs.Cacher") + + if (ownerIsCacherClass && owner.isMethod) q"this.cachedTarget[${weakTypeTag[R]}]($t)" + else c.abort( + c.enclosingPosition, + "T{} members must be defs defined in a Cacher class/trait/object body" + ) + } +} \ No newline at end of file -- cgit v1.2.3