@@ -234,11 +234,18 @@ trait MacroCommons extends CompatMacroCommons { bundle =>
234234 primaryConstructorOf(clsTpe).typeSignatureIn(clsTpe)
235235 }
236236
237+ private def isDefaultAnnotArg (tree : Tree ): Boolean = {
238+ (tree.tpe match {
239+ case AnnotatedType (annots, _) => annots.exists(_.tree.tpe.typeSymbol.name.toString == " defaultArg" )
240+ case _ => false
241+ }) ||
242+ tree.symbol != null && tree.symbol.isSynthetic && tree.symbol.name.decodedName.toString.contains(" $default$" )
243+ }
244+
237245 lazy val treeRes : Res [Tree ] = annotTree match {
238246 case Apply (constr, args) =>
239247 val newArgs = (args zip constructorSig.paramLists.head) map {
240- case (arg, param) if param.asTerm.isParamWithDefault && arg.symbol != null &&
241- arg.symbol.isSynthetic && arg.symbol.name.decodedName.toString.contains(" $default$" ) =>
248+ case (arg, param) if param.asTerm.isParamWithDefault && isDefaultAnnotArg(arg) =>
242249 if (findAnnotation(param, DefaultsToNameAT ).nonEmpty)
243250 Ok (q " ${subject.name.decodedName.toString}" )
244251 else
@@ -283,7 +290,7 @@ trait MacroCommons extends CompatMacroCommons { bundle =>
283290 .collectFirst {
284291 case (param, arg) if param.name == subSym.name => arg match {
285292 case Literal (Constant (value : T )) => value
286- case Literal ( Constant ( null ) ) => whenDefault
293+ case _ if param.asTerm.isParamWithDefault && isDefaultAnnotArg(arg ) => whenDefault
287294 case t if param.asTerm.isParamWithDefault && t.symbol.isSynthetic &&
288295 t.symbol.name.decodedName.toString.contains(" $default$" ) => whenDefault
289296 case t if classTag[T ] == classTag[Tree ] => t.asInstanceOf [T ]
@@ -824,6 +831,7 @@ trait MacroCommons extends CompatMacroCommons { bundle =>
824831 case class LitOrDefault [T : ClassTag ](default : T ) {
825832 def unapply (tree : Tree ): Option [T ] = tree match {
826833 case Literal (Constant (value : T )) => Some (value)
834+ case _ if tree.tpe != null && tree.tpe.toString.endsWith(" @scala.annotation.meta.defaultArg" ) => Some (default)
827835 case Select (_, TermName (n)) if n.startsWith(" $lessinit$greater$default$" ) => Some (default)
828836 case _ => None
829837 }
0 commit comments