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 BugReporterprivate ClassContextprivate final Collection<BugInstance> Fields inherited from interface Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidfindIfElseDuplicates(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb) private voidfindSwitchDuplicates(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb) private org.apache.bcel.generic.InstructionHandlefindThenFinish(CFG cfg, BasicBlock thenBB, int elsePos) private byte[]getCodeBytes(org.apache.bcel.classfile.Method m, int start, int end) private BigIntegergetCodeBytesAsBigInt(org.apache.bcel.classfile.Method method, int[] switchPos, int i, int endPos) private static org.apache.bcel.generic.InstructionHandlegetDeepFirstInstruction(CFG cfg, BasicBlock bb) Like bb.getFirstInstruction() except that if null is returned it will follow the FALL_THROUGH_EDGE (if any)private static intgetFinalTarget(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 casesvoidreport()This method is called after all classes to be visited.private voidupdateMap(HashMap<BigInteger, Collection<Integer>> map, int i, BigInteger clauseAsInt) voidvisitClassContext(ClassContext classContext) Visit the ClassContext for a class which should be analyzed for instances of bug patterns.voidvisitMethod(org.apache.bcel.classfile.Method method) Methods inherited from class 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, visitStackMapEntryMethods inherited from class 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, visitUnknownMethods inherited from class Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.bcel.classfile.Visitor
visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
-
Field Details
-
classContext
-
bugReporter
-
pendingBugs
-
-
Constructor Details
-
DuplicateBranches
-
-
Method Details
-
visitClassContext
Description copied from interface:DetectorVisit the ClassContext for a class which should be analyzed for instances of bug patterns.- Specified by:
visitClassContextin interfaceDetector- Parameters:
classContext- the ClassContext
-
visitMethod
public void visitMethod(org.apache.bcel.classfile.Method method) - Specified by:
visitMethodin interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitMethodin 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
-