|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectedu.umd.cs.findbugs.FindBugs
public class FindBugs
An instance of this class is used to apply the selected set of analyses on some collection of Java classes. It also implements the comand line interface.
Nested Class Summary | |
---|---|
private static class |
FindBugs.ArchiveWorkListItem
Work list item specifying a file/directory/URL containing class files to analyze. |
private static class |
FindBugs.CategoryFilteringBugReporter
|
private static interface |
FindBugs.Chooser
Handling callback for choose() method, used to implement the -chooseVisitors and -choosePlugins options. |
private static interface |
FindBugs.ClassProducer
Interface for an object representing a source of class files to analyze. |
private class |
FindBugs.DirectoryClassProducer
ClassProducer for directories. |
private static class |
FindBugs.ErrorCountingBugReporter
A delegating bug reporter which counts reported bug instances, missing classes, and serious analysis errors. |
private static class |
FindBugs.FindBugsCommandLine
Helper class to parse the command line and create the FindBugs engine object. |
private static class |
FindBugs.NoCloseInputStream
Delegating InputStream wrapper that never closes the underlying input stream. |
private class |
FindBugs.SingleClassProducer
ClassProducer for single class files. |
private class |
FindBugs.ZipClassProducer
ClassProducer for zip/jar archives. |
Field Summary | |
---|---|
private AnalysisContext |
analysisContext
|
private static java.util.Set<java.lang.String> |
archiveExtensionSet
File extensions that indicate an archive (zip, jar, or similar). |
private FindBugs.ErrorCountingBugReporter |
bugReporter
|
private java.util.List<ClassObserver> |
classObserverList
|
private ClassScreener |
classScreener
|
private java.lang.String |
currentClass
|
(package private) static boolean |
DEBUG
|
private Detector[] |
detectors
|
private static int |
EMACS_REPORTER
|
private static java.lang.String |
home
FindBugs home directory. |
private static int |
HTML_REPORTER
|
private static java.util.Set<java.lang.String> |
knownURLProtocolSet
Known URL protocols. |
private static int |
PRINTING_REPORTER
|
private FindBugsProgress |
progressCallback
|
private Project |
project
|
private static int |
SORTING_REPORTER
|
private static int |
XDOCS_REPORTER
|
private static int |
XML_REPORTER
|
Fields inherited from interface org.apache.bcel.Constants |
---|
AALOAD, AASTORE, ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ACCESS_NAMES, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ANEWARRAY_QUICK, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_SIGNATURE, ATTR_SOURCE_FILE, ATTR_STACK_MAP, ATTR_SYNTHETIC, ATTR_UNKNOWN, ATTRIBUTE_NAMES, BALOAD, BASTORE, BIPUSH, BREAKPOINT, CALOAD, CASTORE, CHECKCAST, CHECKCAST_QUICK, CLASS_TYPE_NAMES, CONSTANT_Class, CONSTANT_Double, CONSTANT_Fieldref, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodref, CONSTANT_Long, CONSTANT_Methodref, CONSTANT_NameAndType, CONSTANT_NAMES, CONSTANT_String, CONSTANT_Utf8, CONSTRUCTOR_NAME, CONSUME_STACK, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETFIELD_QUICK, GETFIELD_QUICK_W, GETFIELD2_QUICK, GETSTATIC, GETSTATIC_QUICK, GETSTATIC2_QUICK, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILLEGAL_OPCODE, ILLEGAL_TYPE, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMPDEP1, IMPDEP2, IMUL, INEG, INSTANCEOF, INSTANCEOF_QUICK, INT2BYTE, INT2CHAR, INT2SHORT, INTERFACES_IMPLEMENTED_BY_ARRAYS, INVOKEINTERFACE, INVOKEINTERFACE_QUICK, INVOKENONVIRTUAL, INVOKENONVIRTUAL_QUICK, INVOKESPECIAL, INVOKESTATIC, INVOKESTATIC_QUICK, INVOKESUPER_QUICK, INVOKEVIRTUAL, INVOKEVIRTUAL_QUICK, INVOKEVIRTUAL_QUICK_W, INVOKEVIRTUALOBJECT_QUICK, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, ITEM_Bogus, ITEM_Double, ITEM_Float, ITEM_InitObject, ITEM_Integer, ITEM_Long, ITEM_NAMES, ITEM_NewObject, ITEM_Null, ITEM_Object, IUSHR, IXOR, JSR, JSR_W, KNOWN_ATTRIBUTES, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_QUICK, LDC_W, LDC_W_QUICK, LDC2_W, LDC2_W_QUICK, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MAJOR, MAJOR_1_1, MAJOR_1_2, MAJOR_1_3, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, MULTIANEWARRAY_QUICK, NEW, NEW_QUICK, NEWARRAY, NO_OF_OPERANDS, NOP, OPCODE_NAMES, POP, POP2, PRODUCE_STACK, PUSH, PUTFIELD, PUTFIELD_QUICK, PUTFIELD_QUICK_W, PUTFIELD2_QUICK, PUTSTATIC, PUTSTATIC_QUICK, PUTSTATIC2_QUICK, RESERVED, RET, RETURN, SALOAD, SASTORE, SHORT_TYPE_NAMES, SIPUSH, STATIC_INITIALIZER_NAME, SWAP, SWITCH, T_ADDRESS, T_ARRAY, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_OBJECT, T_REFERENCE, T_SHORT, T_UNKNOWN, T_VOID, TABLESWITCH, TYPE_NAMES, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE, WIDE |
Fields inherited from interface edu.umd.cs.findbugs.ExitCodes |
---|
BUGS_FOUND_FLAG, ERROR_FLAG, MISSING_CLASS_FLAG |
Constructor Summary | |
---|---|
FindBugs(BugReporter bugReporter,
Project project)
Constructor. |
Method Summary | |
---|---|
void |
addClassObserver(ClassObserver classObserver)
Add a ClassObserver. |
private void |
addCollectionToClasspath(java.util.Collection<java.lang.String> collection,
URLClassPathRepository repository)
Add all classpath entries in given Collection to the given URLClassPathRepository. |
private void |
clearRepository()
Clear the Repository and update it to reflect the classpath specified by the current project. |
private void |
createDetectors()
Create Detectors for each DetectorFactory which is enabled. |
private static FindBugs |
createEngine(FindBugs.FindBugsCommandLine commandLine,
java.lang.String[] argv)
|
private void |
examineClass(java.lang.String className)
Examine a single class by invoking all of the Detectors on it. |
void |
execute()
Execute FindBugs on the Project. |
AnalysisContext |
getAnalysisContext()
Get the analysis context. |
int |
getBugCount()
Get the number of bug instances that were reported during analysis. |
java.lang.String |
getCurrentClass()
Get the name of the most recent class to be analyzed. |
int |
getErrorCount()
Get the number of errors that occurred during analysis. |
(package private) static java.lang.String |
getFileExtension(java.lang.String fileName)
Get the file extension of given fileName. |
static java.lang.String |
getHome()
Get the FindBugs home directory. |
int |
getMissingClassCount()
Get the number of time missing classes were reported during analysis. |
(package private) static java.lang.String |
getURLProtocol(java.lang.String urlString)
Get the URL protocol of given URL string. |
private static java.util.Set<java.lang.String> |
handleBugCategories(java.lang.String categories)
Process -bugCategories option. |
(package private) static boolean |
isArchiveExtension(java.lang.String fileExtension)
Determine if given file extension indicates an archive file. |
static void |
main(java.lang.String[] argv)
|
private static org.apache.bcel.classfile.JavaClass |
parseClass(java.lang.String archiveName,
java.io.InputStream in,
java.lang.String fileName)
Parse the data for a class to create a JavaClass object. |
private static org.apache.bcel.classfile.JavaClass |
parseClass(java.net.URL url)
Parse the data for a class to create a JavaClass object. |
private static org.apache.bcel.classfile.JavaClass |
parseFromStream(java.io.InputStream in,
java.lang.String fileName)
Parse an input stream to produce a JavaClass object. |
private void |
reportFinal()
Call report() on all detectors, to give them a chance to report any accumulated bug reports. |
private void |
reportRecoverableDetectorException(java.lang.String className,
Detector detector,
java.lang.Exception e)
|
private void |
reportRecoverableException(java.lang.String className,
java.lang.Exception e)
|
private static void |
runMain(FindBugs findBugs,
FindBugs.FindBugsCommandLine commandLine)
|
private void |
scanArchiveOrDirectory(FindBugs.ArchiveWorkListItem item,
java.util.LinkedList<FindBugs.ArchiveWorkListItem> archiveWorkList,
java.util.List<java.lang.String> repositoryClassList,
java.util.List<java.lang.String> additionalAuxClasspathEntryList)
Add all classes contained in given file or directory to the BCEL Repository. |
void |
setClassScreener(ClassScreener classScreener)
Set the ClassScreener. |
void |
setFilter(java.lang.String filterFileName,
boolean include)
Set filter of bug instances to include or exclude. |
static void |
setHome(java.lang.String home)
Set the FindBugs home directory. |
void |
setProgressCallback(FindBugsProgress progressCallback)
Set the progress callback that will be used to keep track of the progress of the analysis. |
private void |
setRepositoryClassPath(java.util.List<java.lang.String> additionalAuxClasspathEntryList)
Based on Project settings, set the classpath to be used by the Repository when looking up classes. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static final int PRINTING_REPORTER
private static final int SORTING_REPORTER
private static final int XML_REPORTER
private static final int EMACS_REPORTER
private static final int HTML_REPORTER
private static final int XDOCS_REPORTER
static final boolean DEBUG
private static java.lang.String home
private static final java.util.Set<java.lang.String> archiveExtensionSet
private static final java.util.Set<java.lang.String> knownURLProtocolSet
private FindBugs.ErrorCountingBugReporter bugReporter
private Project project
private java.util.List<ClassObserver> classObserverList
private Detector[] detectors
private FindBugsProgress progressCallback
private ClassScreener classScreener
private AnalysisContext analysisContext
private java.lang.String currentClass
Constructor Detail |
---|
public FindBugs(BugReporter bugReporter, Project project)
bugReporter
- the BugReporter object that will be used to report
BugInstance objects, analysis errors, class to source mapping, etc.project
- the Project indicating which files to analyze and
the auxiliary classpath to use; note that the FindBugs
object will create a private copy of the Project objectMethod Detail |
---|
public void setProgressCallback(FindBugsProgress progressCallback)
progressCallback
- the progress callbackpublic void setFilter(java.lang.String filterFileName, boolean include) throws java.io.IOException, FilterException
filterFileName
- the name of the filter fileinclude
- true if the filter specifies bug instances to include,
false if it specifies bug instances to exclude
java.io.IOException
FilterException
public void addClassObserver(ClassObserver classObserver)
classObserver
- the ClassObserverpublic void setClassScreener(ClassScreener classScreener)
classScreener
- the ClassScreener to usepublic void execute() throws java.io.IOException, java.lang.InterruptedException
java.io.IOException
- if an I/O exception occurs analyzing one of the files
java.lang.InterruptedException
- if the thread is interrupted while conducting the analysispublic AnalysisContext getAnalysisContext()
public java.lang.String getCurrentClass()
public int getBugCount()
public int getErrorCount()
public int getMissingClassCount()
public static void setHome(java.lang.String home)
public static java.lang.String getHome()
private void createDetectors()
private void clearRepository()
private void setRepositoryClassPath(java.util.List<java.lang.String> additionalAuxClasspathEntryList) throws java.io.IOException
java.io.IOException
private void addCollectionToClasspath(java.util.Collection<java.lang.String> collection, URLClassPathRepository repository)
collection
- classpath entries to addrepository
- URLClassPathRepository to add the entries toprivate void scanArchiveOrDirectory(FindBugs.ArchiveWorkListItem item, java.util.LinkedList<FindBugs.ArchiveWorkListItem> archiveWorkList, java.util.List<java.lang.String> repositoryClassList, java.util.List<java.lang.String> additionalAuxClasspathEntryList) throws java.io.IOException, java.lang.InterruptedException
item
- work list item representing the file, which may be a jar/zip
archive, a single class file, or a directory to be recursively
searched for class filesarchiveWorkList
- work list of archives to analyze: this method
may add to the work list if it finds nested archivesrepositoryClassList
- a List to which all classes found in
the archive or directory are added, so we later know
which files to analyze
java.io.IOException
java.lang.InterruptedException
private void examineClass(java.lang.String className) throws java.lang.InterruptedException
className
- the fully qualified name of the class to examine
java.lang.InterruptedException
private void reportRecoverableException(java.lang.String className, java.lang.Exception e)
private void reportRecoverableDetectorException(java.lang.String className, Detector detector, java.lang.Exception e)
private void reportFinal() throws java.lang.InterruptedException
java.lang.InterruptedException
static java.lang.String getFileExtension(java.lang.String fileName)
static java.lang.String getURLProtocol(java.lang.String urlString)
urlString
- the URL string
static boolean isArchiveExtension(java.lang.String fileExtension)
fileExtension
- the file extension (e.g., ".jar")
private static org.apache.bcel.classfile.JavaClass parseClass(java.lang.String archiveName, java.io.InputStream in, java.lang.String fileName) throws java.io.IOException
java.io.IOException
private static org.apache.bcel.classfile.JavaClass parseClass(java.net.URL url) throws java.io.IOException
java.io.IOException
private static org.apache.bcel.classfile.JavaClass parseFromStream(java.io.InputStream in, java.lang.String fileName) throws java.io.IOException
java.io.IOException
private static java.util.Set<java.lang.String> handleBugCategories(java.lang.String categories)
categories
- comma-separated list of bug categories
public static void main(java.lang.String[] argv)
private static FindBugs createEngine(FindBugs.FindBugsCommandLine commandLine, java.lang.String[] argv) throws java.io.IOException, FilterException
java.io.IOException
FilterException
private static void runMain(FindBugs findBugs, FindBugs.FindBugsCommandLine commandLine) throws java.io.IOException, java.lang.RuntimeException, FilterException
java.io.IOException
java.lang.RuntimeException
FilterException
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |