Package com.mebigfatguy.fbcontrib.detect
Class OverlyPermissiveMethod
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
com.mebigfatguy.fbcontrib.detect.OverlyPermissiveMethod
- All Implemented Interfaces:
edu.umd.cs.findbugs.Detector,edu.umd.cs.findbugs.Priorities,org.apache.bcel.classfile.Visitor
public class OverlyPermissiveMethod
extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for methods that are declared more permissively than the code is using.
For instance, declaring a method public, when it could just be declared
private.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate edu.umd.cs.findbugs.BugReporterprivate Stringprivate Stringprivate org.apache.bcel.classfile.JavaClassprivate edu.umd.cs.findbugs.OpcodeStackFields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINTFields inherited from interface edu.umd.cs.findbugs.Priorities
EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY -
Constructor Summary
ConstructorsConstructorDescriptionOverlyPermissiveMethod(edu.umd.cs.findbugs.BugReporter bugReporter) constructs a OPM detector given the reporter to report bugs on -
Method Summary
Modifier and TypeMethodDescriptionprivate org.apache.bcel.classfile.BootstrapMethodgetBootstrapMethod(int bootstrapIndex) private static StringgetDeclaredAccessValue(int declaredAccess) private org.apache.bcel.classfile.ConstantMethodHandlegetFirstMethodHandle(org.apache.bcel.classfile.ConstantPool pool, org.apache.bcel.classfile.BootstrapMethod bm) private static Objectprivate booleanhasRuntimeAnnotations(org.apache.bcel.classfile.Method obj) private booleanisAssumedPublic(String methodName) private booleanisCallingOnThis(String sig) checks to see if an instance method is called on the 'this' objectprivate booleanisConstrainedByInterface(FQMethod fqMethod) looks to see if this method is an implementation of a method in an interface, including generic specified interface methods.private booleanlooks to see if this method described by key is derived from a superclass or interfaceprivate booleanisGetterSetter(String methodName, String methodSignature) private static booleanisOverlyPermissive(int declaredAccess) voidreport()after collecting all method calls, build a report of all methods that have been called, but in a way that is less permissive then is defined.voidsawOpcode(int seen) voidvisitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) voidvisitCode(org.apache.bcel.classfile.Code obj) Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector
getClassContext, shouldVisitCodeMethods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode
afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, 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, visitMethods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor
getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotationMethods 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, visitStackMapEntryMethods 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, visitMethod, visitSignature, visitSourceFile, visitSynthetic, visitUnknownMethods inherited from class java.lang.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, visitRecord, visitRecordComponent, visitStackMapType
-
Field Details
-
DECLARED_ACCESS
-
bugReporter
private edu.umd.cs.findbugs.BugReporter bugReporter -
stack
private edu.umd.cs.findbugs.OpcodeStack stack -
cls
private org.apache.bcel.classfile.JavaClass cls -
callingPackage
-
callingClass
-
-
Constructor Details
-
OverlyPermissiveMethod
public OverlyPermissiveMethod(edu.umd.cs.findbugs.BugReporter bugReporter) constructs a OPM detector given the reporter to report bugs on- Parameters:
bugReporter- the sync of bug reports
-
-
Method Details
-
visitClassContext
public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext) - Specified by:
visitClassContextin interfaceedu.umd.cs.findbugs.Detector- Overrides:
visitClassContextin classedu.umd.cs.findbugs.BytecodeScanningDetector
-
visitCode
public void visitCode(org.apache.bcel.classfile.Code obj) - Specified by:
visitCodein interfaceorg.apache.bcel.classfile.Visitor- Overrides:
visitCodein classedu.umd.cs.findbugs.visitclass.PreorderVisitor
-
sawOpcode
public void sawOpcode(int seen) - Overrides:
sawOpcodein classedu.umd.cs.findbugs.visitclass.DismantleBytecode
-
hasRuntimeAnnotations
private boolean hasRuntimeAnnotations(org.apache.bcel.classfile.Method obj) -
isAssumedPublic
-
isGetterSetter
-
isCallingOnThis
checks to see if an instance method is called on the 'this' object- Parameters:
sig- the signature of the method called to find the called-on object- Returns:
- when it is called on this or not
-
report
public void report()after collecting all method calls, build a report of all methods that have been called, but in a way that is less permissive then is defined.- Specified by:
reportin interfaceedu.umd.cs.findbugs.Detector- Overrides:
reportin classedu.umd.cs.findbugs.BytecodeScanningDetector
-
isOverlyPermissive
private static boolean isOverlyPermissive(int declaredAccess) -
isConstrainedByInterface
looks to see if this method is an implementation of a method in an interface, including generic specified interface methods.- Parameters:
fqMethod- the method to check- Returns:
- if this method is constrained by an interface method
-
isDerived
looks to see if this method described by key is derived from a superclass or interface- Parameters:
fqCls- the class that the method is defined inkey- the information about the method- Returns:
- whether this method derives from something or not
-
getDeclaredAccessValue
-
getRequiredAccessValue
-
getBootstrapMethod
@Nullable private org.apache.bcel.classfile.BootstrapMethod getBootstrapMethod(int bootstrapIndex) -
getFirstMethodHandle
private org.apache.bcel.classfile.ConstantMethodHandle getFirstMethodHandle(org.apache.bcel.classfile.ConstantPool pool, org.apache.bcel.classfile.BootstrapMethod bm)
-