@@ -368,10 +368,14 @@ trait CaseClassMacros extends ReprTypes with CaseClassMacrosVersionSpecifics {
368368 * */
369369 def fieldsOf (tpe : Type ): List [(TermName , Type )] = {
370370 val clazz = tpe.typeSymbol.asClass
371+ // Case class field names have an extra space at the end.
372+ val nameOf : TermSymbol => TermName =
373+ if (! clazz.isCaseClass) _.name
374+ else field => TermName (field.name.toString.dropRight(1 ))
371375 if (isCaseObjectLike(clazz) || isAnonOrRefinement(clazz)) Nil
372376 else tpe.decls.sorted.collect {
373- case sym : TermSymbol if isCaseAccessorLike(sym ) =>
374- (sym.name, sym .typeSignatureIn(tpe).finalResultType)
377+ case field : TermSymbol if isCaseAccessorLike(field ) =>
378+ nameOf(field) -> field .typeSignatureIn(tpe).finalResultType
375379 }
376380 }
377381
@@ -496,11 +500,14 @@ trait CaseClassMacros extends ReprTypes with CaseClassMacrosVersionSpecifics {
496500 }
497501 }
498502
499- def nameAsString (name : Name ): String = name.decodedName.toString.trim
503+ def nameAsString (name : Name ): String =
504+ name.decodedName.toString
500505
501- def nameAsValue (name : Name ): Constant = Constant (nameAsString(name))
506+ def nameAsValue (name : Name ): Constant =
507+ Constant (nameAsString(name))
502508
503- def nameOf (tpe : Type ) = tpe.typeSymbol.name
509+ def nameOf (tpe : Type ): Name =
510+ tpe.typeSymbol.name
504511
505512 def mkHListValue (elems : List [Tree ]): Tree = {
506513 val cons = objectRef[:: .type ]
@@ -1030,8 +1037,10 @@ trait CaseClassMacros extends ReprTypes with CaseClassMacrosVersionSpecifics {
10301037 (const(singleton), const(objectRef[HNil .type ]))
10311038 // case 3: case class
10321039 case tpe if tpe.typeSymbol.asClass.isCaseClass =>
1040+ val companion = patchedCompanionSymbolOf(tpe.typeSymbol)
1041+ val unapply = companion.typeSignature.member(TermName (" unapply" ))
10331042 val fields = fieldsOf(tpe)
1034- (fromApply(fields), toUnapply(fields))
1043+ (fromApply(fields), if (unapply.isSynthetic) toUnapply(fields) else toGetters (fields))
10351044 // case 4: exactly one matching public apply/unapply
10361045 case HasApplyUnapply (args) =>
10371046 (fromApply(args), toUnapply(args))
0 commit comments