Package com.mebigfatguy.fbcontrib.detect
Class FunctionalInterfaceIssues
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.FunctionalInterfaceIssues
- All Implemented Interfaces:
edu.umd.cs.findbugs.Detector,edu.umd.cs.findbugs.Priorities,org.apache.bcel.classfile.Visitor
@CustomUserValue
public class FunctionalInterfaceIssues
extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for issues around use of @FunctionalInterface classes, especially in
use with Streams..
The first pass walks thru all the regular methods looking for InvokeVirtuals
The second pass walks thru all the synthetic methods looking for anonymous
methods
Future Ids: - filter before map, where the filter does what the map does
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static enum(package private) static class(package private) static enum(package private) static enum -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final FQMethodprivate org.apache.bcel.classfile.BootstrapMethodsprivate edu.umd.cs.findbugs.BugReporterprivate org.apache.bcel.classfile.JavaClassprivate static final FQMethodprivate org.apache.bcel.classfile.JavaClassprivate static final QMethodprivate static final FQMethodprivate static final FQMethodprivate static final FQMethodprivate Map<String, List<FunctionalInterfaceIssues.FIInfo>> private static final FQMethodprivate booleanprivate static final FQMethodprivate static final FQMethodprivate static final FQMethodprivate static final QMethodprivate edu.umd.cs.findbugs.OpcodeStackprivate static final QMethodprivate static final QMethodprivate static final FQMethodprivate static final FQMethodFields 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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprivate StringgetAnonymousName(org.apache.bcel.classfile.ConstantMethodHandle cmh) private org.apache.bcel.classfile.BootstrapMethodsgetBootstrapAttribute(org.apache.bcel.classfile.JavaClass clz) private org.apache.bcel.classfile.ConstantMethodHandlegetMethodHandle(int bootstrapIndex) private booleanisSynthetic(String methodName, String methodSig) 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, report, 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
-
CONTAINS
-
SIZE
-
TOARRAY
-
STREAM
-
ASLIST
-
COLLECT
-
FILTER
-
FINDFIRST
-
ISPRESENT
-
TOLIST
-
TOSET
-
COUNT
-
GET
-
MAP
-
LIMIT
-
collectionClass
private org.apache.bcel.classfile.JavaClass collectionClass -
bugReporter
private edu.umd.cs.findbugs.BugReporter bugReporter -
cls
private org.apache.bcel.classfile.JavaClass cls -
stack
private edu.umd.cs.findbugs.OpcodeStack stack -
bootstrapAtt
private org.apache.bcel.classfile.BootstrapMethods bootstrapAtt -
functionalInterfaceInfo
-
anonymousBugType
-
parseState
-
anonState
-
isParmLambda
private boolean isParmLambda
-
-
Constructor Details
-
FunctionalInterfaceIssues
public FunctionalInterfaceIssues(edu.umd.cs.findbugs.BugReporter bugReporter)
-
-
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
-
checkLimit
public void checkLimit() -
getBootstrapAttribute
@Nullable private org.apache.bcel.classfile.BootstrapMethods getBootstrapAttribute(org.apache.bcel.classfile.JavaClass clz) -
getMethodHandle
@Nullable private org.apache.bcel.classfile.ConstantMethodHandle getMethodHandle(int bootstrapIndex) -
getAnonymousName
-
isSynthetic
-