edu.umd.cs.findbugs
Class FindBugs

java.lang.Object
  extended by edu.umd.cs.findbugs.FindBugs
All Implemented Interfaces:
ExitCodes, Constants2, org.apache.bcel.Constants

public class FindBugs
extends java.lang.Object
implements Constants2, ExitCodes

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.

Author:
Bill Pugh, David Hovemeyer

Field Summary
static java.util.Set<java.lang.String> archiveExtensionSet
          File extensions that indicate an archive (zip, jar, or similar).
static boolean DEBUG
           
static AnalysisFeatureSetting[] DEFAULT_EFFORT
           
static java.util.Set<java.lang.String> knownURLProtocolSet
          Known URL protocols.
static AnalysisFeatureSetting[] MAX_EFFORT
           
static AnalysisFeatureSetting[] MIN_EFFORT
           
static boolean TIMEDEBUG
           
static int TIMEQUANTUM
           
 
Fields inherited from interface org.apache.bcel.Constants
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, 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_ANNOTATION_DEFAULT, ATTR_CODE, ATTR_CONSTANT_VALUE, ATTR_DEPRECATED, ATTR_EXCEPTIONS, ATTR_INNER_CLASSES, ATTR_LINE_NUMBER_TABLE, ATTR_LOCAL_VARIABLE_TABLE, ATTR_PMG, ATTR_RUNTIMEINVISIBLE_ANNOTATIONS, ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_ANNOTATIONS, ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS, 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, MAJOR_1_4, MAJOR_1_5, MAX_ACC_FLAG, MAX_BYTE, MAX_CODE_SIZE, MAX_CP_ENTRIES, MAX_SHORT, MINOR, MINOR_1_1, MINOR_1_2, MINOR_1_3, MINOR_1_4, MINOR_1_5, 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.
 void addFilter(java.lang.String filterFileName, boolean include)
          Set filter of bug instances to include or exclude.
 void enableTrainingInput(java.lang.String trainingInputDir)
          Set whether or not training input should be used to make the analysis more precise.
 void enableTrainingOutput(java.lang.String trainingOutputDir)
          Set whether or not training output should be emitted.
 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.
static java.lang.String getHome()
          Get the FindBugs home directory.
 int getMissingClassCount()
          Get the number of time missing classes were reported during analysis.
 java.lang.String getReleaseName()
           
static void main(java.lang.String[] argv)
           
 void setAnalysisFeatureSettings(AnalysisFeatureSetting[] settingList)
          Set analysis feature settings.
 void setClassScreener(ClassScreener classScreener)
          Set the ClassScreener.
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.
 void setRelaxedReportingMode(boolean relaxedReportingMode)
          Set relaxed reporting mode.
 void setReleaseName(java.lang.String releaseName)
           
 void setSourceInfoFile(java.lang.String sourceInfoFile)
          Set the filename of the source info file containing line numbers for fields and classes.
 void setUserPreferences(UserPreferences userPreferences)
          Set the UserPreferences representing which Detectors should be used.
static void showCommandLineOptions()
          Print command line options synopses to stdout.
static void showCommandLineOptions(edu.umd.cs.findbugs.FindBugs.TextUICommandLine commandLine)
           
static void showSynopsis()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MIN_EFFORT

public static final AnalysisFeatureSetting[] MIN_EFFORT

DEFAULT_EFFORT

public static final AnalysisFeatureSetting[] DEFAULT_EFFORT

MAX_EFFORT

public static final AnalysisFeatureSetting[] MAX_EFFORT

DEBUG

public static final boolean DEBUG

TIMEDEBUG

public static final boolean TIMEDEBUG

TIMEQUANTUM

public static final int TIMEQUANTUM

archiveExtensionSet

public static final java.util.Set<java.lang.String> archiveExtensionSet
File extensions that indicate an archive (zip, jar, or similar).


knownURLProtocolSet

public static final java.util.Set<java.lang.String> knownURLProtocolSet
Known URL protocols. Filename URLs that do not have an explicit protocol are assumed to be files.

Constructor Detail

FindBugs

public FindBugs(BugReporter bugReporter,
                Project project)
Constructor.

Parameters:
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 object
Method Detail

setProgressCallback

public void setProgressCallback(FindBugsProgress progressCallback)
Set the progress callback that will be used to keep track of the progress of the analysis.

Parameters:
progressCallback - the progress callback

addFilter

public void addFilter(java.lang.String filterFileName,
                      boolean include)
               throws java.io.IOException,
                      FilterException
Set filter of bug instances to include or exclude.

Parameters:
filterFileName - the name of the filter file
include - true if the filter specifies bug instances to include, false if it specifies bug instances to exclude
Throws:
java.io.IOException
FilterException

setUserPreferences

public void setUserPreferences(UserPreferences userPreferences)
Set the UserPreferences representing which Detectors should be used. If UserPreferences are not set explicitly, the default set of Detectors will be used.

Parameters:
userPreferences - the UserPreferences

addClassObserver

public void addClassObserver(ClassObserver classObserver)
Add a ClassObserver.

Parameters:
classObserver - the ClassObserver

setClassScreener

public void setClassScreener(ClassScreener classScreener)
Set the ClassScreener. This object chooses which individual classes to analyze. By default, all classes are analyzed.

Parameters:
classScreener - the ClassScreener to use

setRelaxedReportingMode

public void setRelaxedReportingMode(boolean relaxedReportingMode)
Set relaxed reporting mode.

Parameters:
relaxedReportingMode - true if relaxed reporting mode should be enabled, false if not

enableTrainingOutput

public void enableTrainingOutput(java.lang.String trainingOutputDir)
Set whether or not training output should be emitted.

Parameters:
trainingOutputDir - directory to save training output in

enableTrainingInput

public void enableTrainingInput(java.lang.String trainingInputDir)
Set whether or not training input should be used to make the analysis more precise.

Parameters:
trainingInputDir - directory to load training input from

setAnalysisFeatureSettings

public void setAnalysisFeatureSettings(AnalysisFeatureSetting[] settingList)
Set analysis feature settings.

Parameters:
settingList - list of analysis feature settings

getReleaseName

public java.lang.String getReleaseName()
Returns:
Returns the releaseName.

setReleaseName

public void setReleaseName(java.lang.String releaseName)
Parameters:
releaseName - The releaseName to set.

setSourceInfoFile

public void setSourceInfoFile(java.lang.String sourceInfoFile)
Set the filename of the source info file containing line numbers for fields and classes.

Parameters:
sourceInfoFile - the source info filename

execute

public void execute()
             throws java.io.IOException,
                    java.lang.InterruptedException
Execute FindBugs on the Project. All bugs found are reported to the BugReporter object which was set when this object was constructed.

Throws:
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 analysis

getAnalysisContext

public AnalysisContext getAnalysisContext()
Get the analysis context. It is only valid to call this method after the execute() method has been called.


getCurrentClass

public java.lang.String getCurrentClass()
Get the name of the most recent class to be analyzed. This is useful for diagnosing an unexpected exception. Returns null if no class has been analyzed.


getBugCount

public int getBugCount()
Get the number of bug instances that were reported during analysis.


getErrorCount

public int getErrorCount()
Get the number of errors that occurred during analysis.


getMissingClassCount

public int getMissingClassCount()
Get the number of time missing classes were reported during analysis.


setHome

public static void setHome(java.lang.String home)
Set the FindBugs home directory.


getHome

public static java.lang.String getHome()
Get the FindBugs home directory.


main

public static void main(java.lang.String[] argv)

showCommandLineOptions

public static void showCommandLineOptions()
Print command line options synopses to stdout.


showCommandLineOptions

public static void showCommandLineOptions(edu.umd.cs.findbugs.FindBugs.TextUICommandLine commandLine)

showSynopsis

public static void showSynopsis()