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
public class DuplicateBranches extends PreorderVisitor implements Detector
-
-
Field Summary
Fields Modifier and Type Field Description private BugReporterbugReporterprivate ClassContextclassContextprivate java.util.Collection<BugInstance>pendingBugs-
Fields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
-
-
Constructor Summary
Constructors Constructor Description DuplicateBranches(BugReporter bugReporter)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private 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 java.math.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, java.util.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(java.util.HashMap<java.math.BigInteger,java.util.Collection<java.lang.Integer>> map, int i, java.math.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 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, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
classContext
private ClassContext classContext
-
bugReporter
private final BugReporter bugReporter
-
pendingBugs
private final java.util.Collection<BugInstance> pendingBugs
-
-
Constructor Detail
-
DuplicateBranches
public DuplicateBranches(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
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
private void findIfElseDuplicates(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb)
-
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
private void findSwitchDuplicates(CFG cfg, org.apache.bcel.classfile.Method method, BasicBlock bb)
-
updateMap
private void updateMap(java.util.HashMap<java.math.BigInteger,java.util.Collection<java.lang.Integer>> map, int i, java.math.BigInteger clauseAsInt)
-
getCodeBytesAsBigInt
private java.math.BigInteger getCodeBytesAsBigInt(org.apache.bcel.classfile.Method method, int[] switchPos, int i, int endPos)
-
getFinalTarget
private static int getFinalTarget(CFG cfg, int myPos, java.util.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)
-
-