aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-11-10 21:40:43 +0000
committerGitHub <noreply@github.com>2017-11-10 21:40:43 +0000
commit484bf11403f65edd178432992fd573810d0706e8 (patch)
treea42c6fa7e5b724b4b8aa503a2d4a22ff14cdb32d
parent18ed61c2f88caf0bc295dfc26fd008909c213395 (diff)
parent179056a4e92b72cb9c2e90121b6e4286ad72bc83 (diff)
downloadmagnolia-484bf11403f65edd178432992fd573810d0706e8.tar.gz
magnolia-484bf11403f65edd178432992fd573810d0706e8.tar.bz2
magnolia-484bf11403f65edd178432992fd573810d0706e8.zip
Merge pull request #33 from propensive/companion-refs
Avoid deprecated macro API
-rw-r--r--core/src/main/scala/magnolia.scala14
1 files changed, 11 insertions, 3 deletions
diff --git a/core/src/main/scala/magnolia.scala b/core/src/main/scala/magnolia.scala
index c29c1fa..31ae745 100644
--- a/core/src/main/scala/magnolia.scala
+++ b/core/src/main/scala/magnolia.scala
@@ -73,6 +73,14 @@ object Magnolia {
val prefixType = c.prefix.tree.tpe
+ def companionRef(tpe: Type): Tree = {
+ val global = c.universe.asInstanceOf[scala.tools.nsc.Global]
+ val globalTpe = tpe.asInstanceOf[global.Type]
+ val companion = globalTpe.typeSymbol.companionSymbol
+ if(companion != NoSymbol) global.gen.mkAttributedRef(globalTpe.prefix, companion).asInstanceOf[Tree]
+ else q"${tpe.typeSymbol.name.toTermName}"
+ }
+
val typeDefs = prefixType.baseClasses.flatMap { cls =>
cls.asType.toType.decls.filter(_.isType).find(_.name.toString == "Typeclass").map { tpe =>
tpe.asType.toType.asSeenFrom(prefixType, cls)
@@ -188,8 +196,8 @@ object Magnolia {
// FIXME: Handle AnyVals
val result = if (isCaseObject) {
// FIXME: look for an alternative which isn't deprecated on Scala 2.12+
- val obj = genericType.typeSymbol.companionSymbol.asTerm
- val className = obj.name.decodedName.toString
+ val obj = companionRef(genericType)
+ val className = genericType.typeSymbol.name.decodedName.toString
val impl = q"""
${c.prefix}.combine($magnoliaObj.caseClass[$typeConstructor, $genericType](
$className, true, false, new $arrayCls(0), _ => $obj)
@@ -251,7 +259,7 @@ object Magnolia {
case (p, idx) =>
if (p.isParamWithDefault) {
val method = TermName("apply$default$" + (idx + 1))
- q"_root_.scala.Some(${genericType.typeSymbol.companionSymbol.asTerm}.$method)"
+ q"_root_.scala.Some(${genericType.typeSymbol.companion.asTerm}.$method)"
} else q"_root_.scala.None"
}
} else List(q"_root_.scala.None")