Package edu.umd.cs.findbugs.detect
Class InefficientInitializationInsideLoop
- 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.InefficientInitializationInsideLoop
-
- All Implemented Interfaces:
Detector
,Priorities
,org.apache.bcel.classfile.Visitor
public class InefficientInitializationInsideLoop extends OpcodeStackDetector
-
-
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 private BugReporter
bugReporter
private java.util.SortedMap<java.lang.Integer,java.lang.Integer>
conditions
private static java.util.Set<MethodDescriptor>
implicitPatternMethods
private java.util.SortedMap<java.lang.Integer,BugInstance>
matched
private static java.util.List<MethodDescriptor>
methods
private static MethodDescriptor
NODELIST_GET_LENGTH
private static MethodDescriptor
PATTERN_COMPILE
private static MethodDescriptor
PATTERN_COMPILE_2
private static MethodDescriptor
PATTERN_MATCHES
private java.util.SortedMap<java.lang.Integer,java.lang.Integer>
sources
private static MethodDescriptor
STRING_MATCHES
private static MethodDescriptor
STRING_REPLACEALL
private static MethodDescriptor
STRING_REPLACEFIRST
private static MethodDescriptor
STRING_SPLIT
private static MethodDescriptor
STRING_SPLIT_2
-
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 InefficientInitializationInsideLoop(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.String
getFirstArgument()
private boolean
hasConstantArguments()
private boolean
isFastPath(java.lang.String regex)
Since JDK 1.7 there's a special branch in String.split which works very fast for one-character pattern We do not report a bug if this case takes place (in fact precompilation will make split much slower since this fast path doesn't use regexp engine at all)void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.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 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, report, shouldVisitCode
-
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, visit
-
Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
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, visitSignature, visitSourceFile, visitSynthetic, visitUnknown
-
-
-
-
Field Detail
-
NODELIST_GET_LENGTH
private static final MethodDescriptor NODELIST_GET_LENGTH
-
PATTERN_COMPILE
private static final MethodDescriptor PATTERN_COMPILE
-
PATTERN_COMPILE_2
private static final MethodDescriptor PATTERN_COMPILE_2
-
PATTERN_MATCHES
private static final MethodDescriptor PATTERN_MATCHES
-
STRING_REPLACEALL
private static final MethodDescriptor STRING_REPLACEALL
-
STRING_REPLACEFIRST
private static final MethodDescriptor STRING_REPLACEFIRST
-
STRING_MATCHES
private static final MethodDescriptor STRING_MATCHES
-
STRING_SPLIT
private static final MethodDescriptor STRING_SPLIT
-
STRING_SPLIT_2
private static final MethodDescriptor STRING_SPLIT_2
-
implicitPatternMethods
private static final java.util.Set<MethodDescriptor> implicitPatternMethods
-
methods
private static final java.util.List<MethodDescriptor> methods
-
matched
private java.util.SortedMap<java.lang.Integer,BugInstance> matched
-
conditions
private java.util.SortedMap<java.lang.Integer,java.lang.Integer> conditions
-
sources
private java.util.SortedMap<java.lang.Integer,java.lang.Integer> sources
-
bugReporter
private final BugReporter bugReporter
-
-
Constructor Detail
-
InefficientInitializationInsideLoop
public InefficientInitializationInsideLoop(BugReporter bugReporter)
-
-
Method Detail
-
visitClassContext
public void visitClassContext(ClassContext classContext)
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
- Overrides:
visitClassContext
in classBytecodeScanningDetector
- Parameters:
classContext
- the ClassContext
-
visitMethod
public void visitMethod(org.apache.bcel.classfile.Method obj)
- Specified by:
visitMethod
in interfaceorg.apache.bcel.classfile.Visitor
- Overrides:
visitMethod
in classBetterVisitor
-
isFastPath
private boolean isFastPath(java.lang.String regex)
Since JDK 1.7 there's a special branch in String.split which works very fast for one-character pattern We do not report a bug if this case takes place (in fact precompilation will make split much slower since this fast path doesn't use regexp engine at all)- Parameters:
regex
- regex to test whether it's suitable for the fast path- Returns:
- true if fast path is possible
-
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)
-
getFirstArgument
private java.lang.String getFirstArgument()
- Returns:
- first argument of the called method if it's a constant
-
hasConstantArguments
private boolean hasConstantArguments()
- Returns:
- true if only constants are passed to the called method
-
-