All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scala.meta.internal.tokens.root.scala Maven / Gradle / Ivy

Go to download

Bag of private and public helpers used in scala.meta's APIs and implementations

There is a newer version: 4.12.2
Show newest version
package scala.meta
package internal
package tokens

import scala.annotation.StaticAnnotation
import scala.language.experimental.macros
import scala.reflect.macros.whitebox.Context

// @root is a specialized version of @org.scalameta.adt.root for scala.meta tokens.
class root extends StaticAnnotation {
  def macroTransform(annottees: Any*): Any = macro RootNamerMacros.impl
}

class RootNamerMacros(val c: Context) extends TokenNamerMacroHelpers {
  import c.universe._

  def impl(annottees: Tree*): Tree = annottees.transformAnnottees(new ImplTransformer {
    override def transformTrait(cdef: ClassDef, mdef: ModuleDef): List[ImplDef] = {
      val ClassDef(mods, name, tparams, Template(parents, self, stats)) = cdef
      val mods1 = mods
        .mapAnnotations(_ :+ q"new $TokenMetadataModule.root" :+ q"new $AdtPackage.root")
      val parents1 = parents :+ tq"$TokenMetadataModule.Token" :+ tq"_root_.scala.Product" :+
        tq"_root_.scala.Serializable"
      val cdef1 = ClassDef(mods1, name, tparams, Template(parents1, self, stats))

      val ModuleDef(mmods, mname, Template(mparents, mself, mstats)) = mdef
      val mstats1 = mstats ++ getClassifierBoilerplateRoot()
      val mdef1 = ModuleDef(mmods, mname, Template(mparents, mself, mstats1))

      List(cdef1, mdef1)
    }
  })
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy