Package edu.umd.cs.findbugs.detect
Class DuplicateBranches
java.lang.Object
edu.umd.cs.findbugs.visitclass.BetterVisitor
edu.umd.cs.findbugs.visitclass.PreorderVisitor
edu.umd.cs.findbugs.detect.DuplicateBranches
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final BugReporter
private ClassContext
private final Collection
<BugInstance> Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
findIfElseDuplicates
(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb) private void
findSwitchDuplicates
(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb) private org.apache.bcel.generic.InstructionHandle
findThenFinish
(CFG cfg, BasicBlock thenBB, int elsePos) private byte[]
getCodeBytes
(org.apache.bcel.classfile.Method m, int start, int end) private BigInteger
getCodeBytesAsBigInt
(org.apache.bcel.classfile.Method method, int[] switchPos, int i, int endPos) private static org.apache.bcel.generic.InstructionHandle
getDeepFirstInstruction
(CFG cfg, BasicBlock bb) Like bb.getFirstInstruction() except that if null is returned it will follow the FALL_THROUGH_EDGE (if any)private static int
getFinalTarget
(CFG cfg, int myPos, Collection<org.apache.bcel.generic.InstructionHandle> prevs) determine the end position (exclusive) of the final case by looking at the gotos at the ends of the other casesvoid
report()
This method is called after all classes to be visited.private void
updateMap
(HashMap<BigInteger, Collection<Integer>> map, int i, BigInteger clauseAsInt) void
visitClassContext
(ClassContext classContext) Visit the ClassContext for a class which should be analyzed for instances of bug patterns.void
visitMethod
(org.apache.bcel.classfile.Method method) 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, visitAnnotation, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitCode, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotation, 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, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, 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, visitStackMapType
-
Field Details
-
classContext
-
bugReporter
-
pendingBugs
-
-
Constructor Details
-
DuplicateBranches
-
-
Method Details
-
visitClassContext
Description copied from interface:Detector
Visit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContext
in interfaceDetector
- Parameters:
classContext
- the ClassContext
-
visitMethod
public void visitMethod(org.apache.bcel.classfile.Method method) - Specified by:
visitMethod
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitMethod
in classBetterVisitor
-
findIfElseDuplicates
-
getDeepFirstInstruction
private static org.apache.bcel.generic.InstructionHandle getDeepFirstInstruction(CFG cfg, BasicBlock bb) Like bb.getFirstInstruction() except that if null is returned it will follow the FALL_THROUGH_EDGE (if any) -
findSwitchDuplicates
-
updateMap
-
getCodeBytesAsBigInt
private BigInteger getCodeBytesAsBigInt(org.apache.bcel.classfile.Method method, int[] switchPos, int i, int endPos) -
getFinalTarget
private static int getFinalTarget(CFG cfg, int myPos, Collection<org.apache.bcel.generic.InstructionHandle> prevs) determine the end position (exclusive) of the final case by looking at the gotos at the ends of the other cases -
getCodeBytes
private byte[] getCodeBytes(org.apache.bcel.classfile.Method m, int start, int end) -
findThenFinish
private org.apache.bcel.generic.InstructionHandle findThenFinish(CFG cfg, BasicBlock thenBB, int elsePos) -
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.
-