Package edu.umd.cs.findbugs.detect
Class MultipleInstantiationsOfSingletons
- 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.MultipleInstantiationsOfSingletons
-
- All Implemented Interfaces:
Detector,Priorities,org.apache.bcel.classfile.Visitor
public class MultipleInstantiationsOfSingletons 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 BugReporterbugReporterprivate java.util.Map<XMethod,java.util.List<XMethod>>calledMethodsByMethodsprivate org.apache.bcel.classfile.JavaClasscloneableInterfaceprivate XMethodcloneMethodprivate booleancloneOnlyThrowsCloneNotSupportedExceptionprivate booleancloneOnlyThrowsExceptionprivate java.util.Set<XField>eagerlyInitializedFieldsprivate booleanhasNoFactoryMethodprivate booleanhasPublicConstructorprivate booleanhasSingletonPostFixprivate booleanimplementsCloneableDirectlyprivate XFieldinstanceFieldprivate java.util.Map<XField,XMethod>instanceGetterMethodsprivate booleanisCloneableprivate booleanisInstanceAssignOkprivate booleanisInstanceFieldLazilyInitializedprivate booleanisSerializableprivate java.util.List<XMethod>methodsUsingMonitorprivate org.apache.bcel.classfile.JavaClassserializableInterface-
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 MultipleInstantiationsOfSingletons(BugReporter bugReporter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private booleanblockHasGetStaticOf(BasicBlock block, XField field, org.apache.bcel.generic.ConstantPoolGen cpg)private booleanblockHasSelfConstructor(BasicBlock block, org.apache.bcel.generic.ConstantPoolGen cpg)private intgetNumberOfEnumValues(org.apache.bcel.classfile.JavaClass javaClass)private booleanhasSynchronized(XMethod method, java.util.Set<XMethod> visitedMethods)private booleanisInstanceField(XField field, java.lang.String clsName)private booleanisMergedConstructorAndFieldStore(XField field)private booleanisPassthroughBlock(BasicBlock block)private booleanpathHasGetStaticOf(CFG cfg, BasicBlock block, XField field, org.apache.bcel.generic.ConstantPoolGen cpg, int depth)private booleanpathHasSelfConstructor(CFG cfg, BasicBlock block, org.apache.bcel.generic.ConstantPoolGen cpg, int depth)voidsawOpcode(int seen)By default, this method will not be called when stack is TOP.voidvisit(org.apache.bcel.classfile.JavaClass obj)voidvisit(org.apache.bcel.classfile.Method method)voidvisitAfter(org.apache.bcel.classfile.JavaClass javaClass)-
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, 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, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isIf, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, normalizeNullComparison, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString, visit
-
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, 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, 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, visitPermittedSubclasses, visitRecord, visitRecordComponent, visitStackMapType
-
-
-
-
Field Detail
-
bugReporter
private final BugReporter bugReporter
-
cloneableInterface
private org.apache.bcel.classfile.JavaClass cloneableInterface
-
serializableInterface
private org.apache.bcel.classfile.JavaClass serializableInterface
-
hasSingletonPostFix
private boolean hasSingletonPostFix
-
hasPublicConstructor
private boolean hasPublicConstructor
-
isCloneable
private boolean isCloneable
-
implementsCloneableDirectly
private boolean implementsCloneableDirectly
-
cloneMethod
private XMethod cloneMethod
-
cloneOnlyThrowsException
private boolean cloneOnlyThrowsException
-
cloneOnlyThrowsCloneNotSupportedException
private boolean cloneOnlyThrowsCloneNotSupportedException
-
isSerializable
private boolean isSerializable
-
isInstanceAssignOk
private boolean isInstanceAssignOk
-
hasNoFactoryMethod
private boolean hasNoFactoryMethod
-
isInstanceFieldLazilyInitialized
private boolean isInstanceFieldLazilyInitialized
-
instanceField
private XField instanceField
-
eagerlyInitializedFields
private final java.util.Set<XField> eagerlyInitializedFields
-
methodsUsingMonitor
private final java.util.List<XMethod> methodsUsingMonitor
-
-
Constructor Detail
-
MultipleInstantiationsOfSingletons
public MultipleInstantiationsOfSingletons(BugReporter bugReporter)
-
-
Method Detail
-
visit
public void visit(org.apache.bcel.classfile.JavaClass obj)
- Overrides:
visitin classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method method)
- Overrides:
visitin classBetterVisitor
-
sawOpcode
public void sawOpcode(int seen)
Description copied from class:OpcodeStackDetectorBy 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:
sawOpcodein classOpcodeStackDetector- See Also:
OpcodeStackDetector.beforeOpcode(int)
-
isInstanceField
private boolean isInstanceField(XField field, java.lang.String clsName)
-
isMergedConstructorAndFieldStore
private boolean isMergedConstructorAndFieldStore(XField field)
-
pathHasSelfConstructor
private boolean pathHasSelfConstructor(CFG cfg, BasicBlock block, org.apache.bcel.generic.ConstantPoolGen cpg, int depth)
-
pathHasGetStaticOf
private boolean pathHasGetStaticOf(CFG cfg, BasicBlock block, XField field, org.apache.bcel.generic.ConstantPoolGen cpg, int depth)
-
blockHasSelfConstructor
private boolean blockHasSelfConstructor(BasicBlock block, org.apache.bcel.generic.ConstantPoolGen cpg)
-
blockHasGetStaticOf
private boolean blockHasGetStaticOf(BasicBlock block, XField field, org.apache.bcel.generic.ConstantPoolGen cpg)
-
isPassthroughBlock
private boolean isPassthroughBlock(BasicBlock block)
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass javaClass)
- Overrides:
visitAfterin classPreorderVisitor
-
hasSynchronized
private boolean hasSynchronized(XMethod method, java.util.Set<XMethod> visitedMethods)
- Parameters:
method- The method we are checkingvisitedMethods- The set of methods we have already visited, to break recursion when methods are called recursively. To be initially empty.- Returns:
- true if the method (or one of the methods called recursively) is synchronized or uses a monitor.
-
getNumberOfEnumValues
private int getNumberOfEnumValues(org.apache.bcel.classfile.JavaClass javaClass)
-
-