aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2018-01-05 16:16:37 +0100
committerGitHub <noreply@github.com>2018-01-05 16:16:37 +0100
commit480564092cdbd5c69f63089a2198299706690e7a (patch)
tree2243e14792b4e7428177bfea1699db276db6d187 /core
parent2e98161a4c18d8f56280437a775cf81df030c0cf (diff)
parent235f2ddd5adf5c99cf53d6e6321dbe5e2fd842c2 (diff)
downloadmagnolia-480564092cdbd5c69f63089a2198299706690e7a.tar.gz
magnolia-480564092cdbd5c69f63089a2198299706690e7a.tar.bz2
magnolia-480564092cdbd5c69f63089a2198299706690e7a.zip
Merge branch 'master' into md/debug-annotation
Diffstat (limited to 'core')
-rw-r--r--core/shared/src/main/scala/interface.scala12
-rw-r--r--core/shared/src/main/scala/magnolia.scala9
2 files changed, 10 insertions, 11 deletions
diff --git a/core/shared/src/main/scala/interface.scala b/core/shared/src/main/scala/interface.scala
index 93aa045..51abc22 100644
--- a/core/shared/src/main/scala/interface.scala
+++ b/core/shared/src/main/scala/interface.scala
@@ -12,10 +12,10 @@ trait Subtype[Typeclass[_], Type] {
/** the type of subtype */
type SType <: Type
- /** the name of the subtype
+ /** the [[TypeName]] of the subtype
*
- * This is the fully-qualified name of the type of subclass. */
- def label: String
+ * This is the full name information for the type of subclass. */
+ def typeName: TypeName
/** the typeclass instance associated with this subtype
*
@@ -186,8 +186,8 @@ final class SealedTrait[Typeclass[_], Type](val typeName: TypeName,
/**
* Provides the different parts of a type's class name.
*/
-final case class TypeName(ownerName: String, short: String) {
- def full: String = s"$ownerName.$short"
+final case class TypeName(owner: String, short: String) {
+ def full: String = s"$owner.$short"
}
/**
@@ -198,4 +198,4 @@ final case class TypeName(ownerName: String, short: String) {
* @param typeNamePart If non-empty restricts the output generation to types
* whose full name contains the given [[String]]
*/
-final class debug(typeNamePart: String = "") extends scala.annotation.StaticAnnotation \ No newline at end of file
+final class debug(typeNamePart: String = "") extends scala.annotation.StaticAnnotation
diff --git a/core/shared/src/main/scala/magnolia.scala b/core/shared/src/main/scala/magnolia.scala
index 67e948e..b5c196a 100644
--- a/core/shared/src/main/scala/magnolia.scala
+++ b/core/shared/src/main/scala/magnolia.scala
@@ -229,11 +229,10 @@ object Magnolia {
}
val result = if (isCaseObject) {
- val obj = GlobalUtil.patchedCompanionRef(c)(genericType)
val impl = q"""
$typeNameDef
${c.prefix}.combine($magnoliaPkg.Magnolia.caseClass[$typeConstructor, $genericType](
- $typeName, true, false, new $scalaPkg.Array(0), _ => $obj)
+ $typeName, true, false, new $scalaPkg.Array(0), _ => ${genericType.typeSymbol.asClass.module})
)
"""
Some(Typeclass(genericType, impl))
@@ -381,7 +380,7 @@ object Magnolia {
val assignments = typeclasses.zipWithIndex.map {
case ((typ, typeclass), idx) =>
q"""$subtypesVal($idx) = $magnoliaPkg.Magnolia.subtype[$typeConstructor, $genericType, $typ](
- ${s"${typ.typeSymbol.owner.fullName}.${typ.typeSymbol.name.decodedName}"},
+ $magnoliaPkg.TypeName(${typ.typeSymbol.owner.fullName}, ${typ.typeSymbol.name.decodedName.toString}),
$typeclass,
(t: $genericType) => t.isInstanceOf[$typ],
(t: $genericType) => t.asInstanceOf[$typ]
@@ -468,10 +467,10 @@ object Magnolia {
*
* This method is intended to be called only from code generated by the Magnolia macro, and
* should not be called directly from users' code. */
- def subtype[Tc[_], T, S <: T](name: String, tc: => Tc[S], isType: T => Boolean, asType: T => S): Subtype[Tc, T] =
+ def subtype[Tc[_], T, S <: T](name: TypeName, tc: => Tc[S], isType: T => Boolean, asType: T => S): Subtype[Tc, T] =
new Subtype[Tc, T] with PartialFunction[T, S] {
type SType = S
- def label: String = name
+ def typeName: TypeName = name
def typeclass: Tc[SType] = tc
def cast: PartialFunction[T, SType] = this
def isDefinedAt(t: T) = isType(t)