Skip to content

Commit

Permalink
NIT Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
alexarchambault committed Jan 16, 2025
1 parent e4384f3 commit 8bdb2bb
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions src/main/scala/dataclass/Macros.scala
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ private[dataclass] class Macros(val c: Context) extends ImplTransformers {
val hasToString = hasMethod("toString")
val hasHashCode = hasMethod("hashCode")
val hasTuple = hasMethod("tuple")
val hasCanEqual = hasMethod("canEqual")
val hasEquals = hasMethod("equals")

val namedArgs = paramss.map(_.map { p =>
q"${p.name}=this.${p.name}"
Expand Down Expand Up @@ -122,20 +124,24 @@ private[dataclass] class Macros(val c: Context) extends ImplTransformers {
tq"({type L[..$tparams0]=$WildcardType})#L"
}

val equalMethods = {
val fldChecks = paramss.flatten
.map { param =>
q"this.${param.name} == other.${param.name}"
}
.foldLeft[Tree](q"true")((a, b) => q"$a && $b")

val canEqualMethod = {
val hashCheck =
if (cachedHashCode) q"obj.hashCode == hashCode" else q"true"
Seq(
q"""
override def canEqual(obj: Any): _root_.scala.Boolean =
obj != null && obj.isInstanceOf[$tpname[..$wildcardedTparams]] && $hashCheck
""",
"""
)
}

val equalsMethod = {
val fldChecks = paramss.flatten
.map { param =>
q"this.${param.name} == other.${param.name}"
}
.foldLeft[Tree](q"true")((a, b) => q"$a && $b")
Seq(
q"""
override def equals(obj: Any): _root_.scala.Boolean =
this.eq(obj.asInstanceOf[AnyRef]) || canEqual(obj) && {
Expand Down Expand Up @@ -384,7 +390,8 @@ private[dataclass] class Macros(val c: Context) extends ImplTransformers {
..$stats
..$setters
..$toStringMethod
..$equalMethods
..$canEqualMethod
..$equalsMethod
..$hashCodeMethod
..$tupleMethod
..$productMethods
Expand Down

0 comments on commit 8bdb2bb

Please sign in to comment.