Skip to content

New Patterns #157

@Xiaoven

Description

@Xiaoven

Eq: Covariant equals() method defined (EQ_SELF_NO_OBJECT)

This pattern may be partially implemented.

Description

This class defines a covariant version of equals(). To correctly override the equals() method in java.lang.Object, the parameter of equals() must have type java.lang.Object.

SP Implementation

spotbugs

  • Condition 1: !hasEqualsObject && hasEqualsSelf
    • hasEqualsObject = true if method.isPublic() && "equals".equals(name) and the signature is (Ljava/lang/Object;)Z
    • hasEqualsSelf = true if method.isPublic() && "equals".equals(name) and sig.equals("(L" + getClassName() + ";)Z") (getClassName() should return current class name)
  • Condition 2: !usesDefaultEquals
    • usesDefaultEquals = true if Values.DOTTED_JAVA_LANG_OBJECT.equals(whereEqual)
  • Condition 3: "java.lang.Enum".equals(superclassName)
    • It should be another pattern EQ_DONT_DEFINE_EQUALS_FOR_ENUM

加上 online/local search 可进一步判断是不是 abstract class,进一步区分出 Eq: Abstract class defines covariant equals() method

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions