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 BugReporter
bugReporter
private org.apache.bcel.classfile.JavaClass
cloneableInterface
private XMethod
cloneMethod
private boolean
cloneOnlyThrowsCloneNotSupportedException
private boolean
cloneOnlyThrowsException
private java.util.Set<XField>
eagerlyInitializedFields
private boolean
hasNoFactoryMethod
private boolean
hasSingletonPostFix
private boolean
implementsCloneableDirectly
private XField
instanceField
private java.util.Map<XField,XMethod>
instanceGetterMethods
private boolean
isCloneable
private boolean
isInstanceAssignOk
private boolean
isInstanceFieldLazilyInitialized
private boolean
isSerializable
private java.util.List<XMethod>
methodsUsingMonitor
private org.apache.bcel.classfile.JavaClass
serializableInterface
-
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 boolean
beforeOpcode(int seen)
return false if we should skip calling sawOpcodeprivate int
getNumberOfEnumValues(org.apache.bcel.classfile.JavaClass javaClass)
private boolean
isInstanceField(XField field, java.lang.String clsName)
void
sawOpcode(int seen)
By default, this method will not be called when stack is TOP.void
visit(org.apache.bcel.classfile.JavaClass obj)
void
visit(org.apache.bcel.classfile.Method obj)
void
visitAfter(org.apache.bcel.classfile.JavaClass javaClass)
-
Methods inherited from class edu.umd.cs.findbugs.bcel.OpcodeStackDetector
afterOpcode, 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, 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, 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
-
-
-
-
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
-
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:
visit
in classBetterVisitor
-
visit
public void visit(org.apache.bcel.classfile.Method obj)
- Overrides:
visit
in classBetterVisitor
-
beforeOpcode
public boolean beforeOpcode(int seen)
Description copied from class:DismantleBytecode
return false if we should skip calling sawOpcode- Overrides:
beforeOpcode
in classOpcodeStackDetector
-
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)
-
isInstanceField
private boolean isInstanceField(XField field, java.lang.String clsName)
-
visitAfter
public void visitAfter(org.apache.bcel.classfile.JavaClass javaClass)
- Overrides:
visitAfter
in classPreorderVisitor
-
getNumberOfEnumValues
private int getNumberOfEnumValues(org.apache.bcel.classfile.JavaClass javaClass)
-
-