diff options
author | Jon Pretty <jon.pretty@propensive.com> | 2017-11-10 21:40:43 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-10 21:40:43 +0000 |
commit | 484bf11403f65edd178432992fd573810d0706e8 (patch) | |
tree | a42c6fa7e5b724b4b8aa503a2d4a22ff14cdb32d /core/src/main/scala/magnolia.scala | |
parent | 18ed61c2f88caf0bc295dfc26fd008909c213395 (diff) | |
parent | 179056a4e92b72cb9c2e90121b6e4286ad72bc83 (diff) | |
download | magnolia-484bf11403f65edd178432992fd573810d0706e8.tar.gz magnolia-484bf11403f65edd178432992fd573810d0706e8.tar.bz2 magnolia-484bf11403f65edd178432992fd573810d0706e8.zip |
Merge pull request #33 from propensive/companion-refs
Avoid deprecated macro API
Diffstat (limited to 'core/src/main/scala/magnolia.scala')
-rw-r--r-- | core/src/main/scala/magnolia.scala | 14 |
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") |