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
-
Nested Class Summary
Nested classes/interfaces inherited from class OpcodeStackDetector
OpcodeStackDetector.WithCustomJumpInfo -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final BugReporterprivate org.apache.bcel.classfile.JavaClassprivate XMethodprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate XFieldprivate booleanprivate booleanprivate booleanprivate booleanprivate org.apache.bcel.classfile.JavaClassFields inherited from class OpcodeStackDetector
stackFields inherited from class DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINTFields inherited from interface Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate 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, Set<XMethod> visitedMethods) private booleanisInstanceField(XField field, String clsName) private booleanprivate 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 OpcodeStackDetector
afterOpcode, beforeOpcode, getStack, isUsingCustomUserValue, visitCodeMethods inherited from class BytecodeScanningDetector
getClassContext, report, shouldVisitCode, visitClassContextMethods inherited from class 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, visitMethods inherited from class AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods inherited from class 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, 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, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitField, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitMethod, 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, visitPermittedSubclasses, visitRecord, visitRecordComponent, visitStackMapType
-
Field Details
-
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
-
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
-
eagerlyInitializedFields
-
instanceGetterMethods
-
methodsUsingMonitor
-
calledMethodsByMethods
-
-
Constructor Details
-
MultipleInstantiationsOfSingletons
-
-
Method Details
-
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:
-
isInstanceField
-
isMergedConstructorAndFieldStore
-
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
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass javaClass) - Overrides:
visitAfterin classPreorderVisitor
-
hasSynchronized
- 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)
-