Package edu.umd.cs.findbugs.detect
Class OverridingEqualsNotSymmetrical
- java.lang.Object
-
- edu.umd.cs.findbugs.visitclass.BetterVisitor
-
- edu.umd.cs.findbugs.visitclass.PreorderVisitor
-
- edu.umd.cs.findbugs.visitclass.AnnotationVisitor
-
- edu.umd.cs.findbugs.visitclass.DismantleBytecode
-
- edu.umd.cs.findbugs.BytecodeScanningDetector
-
- edu.umd.cs.findbugs.bcel.OpcodeStackDetector
-
- edu.umd.cs.findbugs.detect.OverridingEqualsNotSymmetrical
-
- All Implemented Interfaces:
Detector
,FirstPassDetector
,Priorities
,org.apache.bcel.classfile.Visitor
public class OverridingEqualsNotSymmetrical extends OpcodeStackDetector implements FirstPassDetector
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo
-
-
Field Summary
Fields Modifier and Type Field Description (package private) boolean
alwaysFalse
(package private) boolean
alwaysTrue
(package private) BugAccumulator
bugAccumulator
(package private) BugReporter
bugReporter
(package private) java.util.Map<ClassDescriptor,java.util.Set<ClassDescriptor>>
classesWithGetClassBasedEquals
(package private) java.util.Map<ClassDescriptor,java.util.Set<ClassDescriptor>>
classesWithInstanceOfBasedEquals
private java.util.EnumMap<EqualsKindSummary.KindOfEquals,java.lang.Integer>
count
(package private) boolean
dangerDanger
private static java.lang.String
EQUALS_NAME
private static java.lang.String
EQUALS_SIGNATURE
(package private) int
equalsCalls
(package private) EqualsKindSummary
equalsKindSummary
(package private) java.util.Map<ClassAnnotation,MethodDescriptor>
equalsMethod
(package private) boolean
isRecord
(package private) java.util.Map<ClassAnnotation,ClassAnnotation>
parentMap
(package private) boolean
prevWasSuperEquals
(package private) boolean
sawBadEqualsClass
(package private) boolean
sawCheckedCast
(package private) boolean
sawCompare
(package private) boolean
sawEqualsBuilder
(package private) boolean
sawGetClass
(package private) boolean
sawGoodEqualsClass
(package private) boolean
sawInitialIdentityCheck
(package private) boolean
sawInstanceOf
(package private) boolean
sawInstanceOfSupertype
(package private) boolean
sawReturnNonSuper
(package private) boolean
sawReturnSuper
(package private) boolean
sawStaticDelegate
(package private) boolean
sawSuperEquals
-
Fields inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
stack
-
Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT
-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description OverridingEqualsNotSymmetrical(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private boolean
callToInvoke(int seen)
private void
checkForComparingClasses()
private void
count(EqualsKindSummary.KindOfEquals k)
boolean
invokesMethodWithEqualLikeName()
void
report()
This method is called after all classes to be visited.void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visit(org.apache.bcel.classfile.Code obj)
-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCode
-
Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, shouldVisitCode, visitClassContext
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
areOppositeBranches, atCatchBlock, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor
amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingCaughtExceptionTypes, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntry
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor
clone, report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitMethod, visitSignature, visitSourceFile, visitSynthetic, visitUnknown
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
EQUALS_NAME
private static final java.lang.String EQUALS_NAME
- See Also:
- Constant Field Values
-
EQUALS_SIGNATURE
private static final java.lang.String EQUALS_SIGNATURE
- See Also:
- Constant Field Values
-
classesWithGetClassBasedEquals
java.util.Map<ClassDescriptor,java.util.Set<ClassDescriptor>> classesWithGetClassBasedEquals
-
classesWithInstanceOfBasedEquals
java.util.Map<ClassDescriptor,java.util.Set<ClassDescriptor>> classesWithInstanceOfBasedEquals
-
parentMap
java.util.Map<ClassAnnotation,ClassAnnotation> parentMap
-
equalsMethod
java.util.Map<ClassAnnotation,MethodDescriptor> equalsMethod
-
bugReporter
final BugReporter bugReporter
-
bugAccumulator
final BugAccumulator bugAccumulator
-
equalsKindSummary
final EqualsKindSummary equalsKindSummary
-
sawInstanceOf
boolean sawInstanceOf
-
sawInstanceOfSupertype
boolean sawInstanceOfSupertype
-
sawCheckedCast
boolean sawCheckedCast
-
sawGetClass
boolean sawGetClass
-
sawReturnSuper
boolean sawReturnSuper
-
sawSuperEquals
boolean sawSuperEquals
-
sawReturnNonSuper
boolean sawReturnNonSuper
-
prevWasSuperEquals
boolean prevWasSuperEquals
-
sawInitialIdentityCheck
boolean sawInitialIdentityCheck
-
alwaysTrue
boolean alwaysTrue
-
alwaysFalse
boolean alwaysFalse
-
equalsCalls
int equalsCalls
-
sawGoodEqualsClass
boolean sawGoodEqualsClass
-
sawBadEqualsClass
boolean sawBadEqualsClass
-
sawCompare
boolean sawCompare
-
dangerDanger
boolean dangerDanger
-
sawStaticDelegate
boolean sawStaticDelegate
-
sawEqualsBuilder
boolean sawEqualsBuilder
-
isRecord
boolean isRecord
-
count
private final java.util.EnumMap<EqualsKindSummary.KindOfEquals,java.lang.Integer> count
-
-
Constructor Detail
-
OverridingEqualsNotSymmetrical
public OverridingEqualsNotSymmetrical(BugReporter bugReporter)
-
-
Method Detail
-
visit
public void visit(org.apache.bcel.classfile.Code obj)
- Overrides:
visit
in classDismantleBytecode
-
count
private void count(EqualsKindSummary.KindOfEquals k)
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetector
By default, this method will not be called when stack is TOP. To change this behavior, override
#beforeOpcode(int)
and change to return true even if stack is TOP.see Using FindBugs for Research to learn lattice and what TOP means.
- Specified by:
sawOpcode
in classOpcodeStackDetector
- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
callToInvoke
private boolean callToInvoke(int seen)
-
invokesMethodWithEqualLikeName
public boolean invokesMethodWithEqualLikeName()
-
checkForComparingClasses
private void checkForComparingClasses()
-
report
public void report()
Description copied from interface:Detector
This method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.- Specified by:
report
in interfaceDetector
- Overrides:
report
in classBytecodeScanningDetector
-
-