提交 0d5d10e0 编写于 作者: 梦境迷离's avatar 梦境迷离

equalsAndHashCode should not contains locale: `Flag.PRIVATE | Flag.LOCAL or...

equalsAndHashCode should not contains locale: `Flag.PRIVATE | Flag.LOCAL or Flag.PROTECTED | Flag.LOCAL`
上级 6b797466
......@@ -176,8 +176,8 @@ abstract class AbstractMacroProcessor(val c: whitebox.Context) {
field match {
case q"$mods val $tname: $tpt = $expr" => tname.asInstanceOf[TermName]
case q"$mods var $tname: $tpt = $expr" => tname.asInstanceOf[TermName]
case q"$mods val $pat = $expr" => pat.asInstanceOf[TermName] //for equalsAndHashcode, need contains all fields.
case q"$mods var $pat = $expr" => pat.asInstanceOf[TermName]
// case q"$mods val $pat = $expr" => pat.asInstanceOf[TermName]
// case q"$mods var $pat = $expr" => pat.asInstanceOf[TermName]
}
}
......
......@@ -68,17 +68,14 @@ object equalsAndHashCodeMacro {
* Extract the internal fields of members belonging to the class.
*/
private def getInternalFieldTermNameExcludeLocal(annotteeClassDefinitions: Seq[Tree]): Seq[TermName] = {
getClassMemberValDefs(annotteeClassDefinitions).filter(p => p match {
getClassMemberValDefs(annotteeClassDefinitions).filter(p => classParamsIsNotLocal(p) && (p match {
case q"$mods var $tname: $tpt = $expr" =>
!extractArgumentsDetail._2.contains(tname.asInstanceOf[TermName].decodedName.toString) && classParamsIsNotLocal(p)
!extractArgumentsDetail._2.contains(tname.asInstanceOf[TermName].decodedName.toString)
//`val i = 1` will match `q"$mods val $tname: $tpt = $expr"` and tpt is `<type ?>`, not `q"$mods val $pat = $expr"`
case q"$mods val $tname: $tpt = $expr" =>
!extractArgumentsDetail._2.contains(tname.asInstanceOf[TermName].decodedName.toString) && classParamsIsNotLocal(p)
case q"$mods val $pat = $expr" =>
!extractArgumentsDetail._2.contains(pat.asInstanceOf[TermName].decodedName.toString) && classParamsIsNotLocal(p)
case q"$mods var $pat = $expr" =>
!extractArgumentsDetail._2.contains(pat.asInstanceOf[TermName].decodedName.toString) && classParamsIsNotLocal(p)
!extractArgumentsDetail._2.contains(tname.asInstanceOf[TermName].decodedName.toString)
case _ => false
}).map(f => getFieldTermName(f))
})).map(f => getFieldTermName(f))
}
// equals method
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册