Package edu.umd.cs.findbugs
Class FindBugs2
- java.lang.Object
-
- edu.umd.cs.findbugs.FindBugs2
-
- All Implemented Interfaces:
IFindBugsEngine
public class FindBugs2 extends java.lang.Object implements IFindBugsEngine
FindBugs driver class. Orchestrates the analysis of a project, collection of results, etc.- Author:
- David Hovemeyer
-
-
Field Summary
Fields Modifier and Type Field Description static boolean
DEBUG
static boolean
PROGRESS
static java.lang.String
PROP_FINDBUGS_HOST_APP
static java.lang.String
PROP_FINDBUGS_HOST_APP_VERSION
-
Constructor Summary
Constructors Constructor Description FindBugs2()
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addClassObserver(IClassObserver classObserver)
Add an IClassObserver.void
addFilter(java.lang.String filterFileName, boolean include)
Set filter of bug instances to include or exclude.static void
clearAnalysisContext()
protected void
clearCaches()
Protected to allow Eclipse plugin remember some cache data for later reuseprotected void
configureFilters(UserPreferences userPreferences)
protected IAnalysisCache
createAnalysisCache()
Create the analysis cache object and register it for current execution thread.static void
createAnalysisContext(Project project, java.util.List<ClassDescriptor> appClassList, java.lang.String sourceInfoFileName)
Create the AnalysisContext that will serve as the BCEL-compatibility layer over the AnalysisCache.void
dispose()
To avoid cyclic cross-references and allow GC after engine is not more needed.boolean
emitTrainingOutput()
Return whether or not training output should be emitted after analysis completes.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
excludeBaselineBugs(java.lang.String baselineBugs)
Provide baseline of bugs not to reportvoid
execute()
Execute the analysis.void
finishSettings()
int
getBugCount()
Get the number of bug instances that were reported during analysis.BugReporter
getBugReporter()
Get the BugReporter.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.int
getMissingClassCount()
Get the number of time missing classes were reported during analysis.Project
getProject()
Get the Project.java.lang.String
getProjectName()
java.lang.String
getReleaseName()
java.lang.String
getTrainingInputDir()
Get the training input database directory.java.lang.String
getTrainingOutputDir()
Get the training output directory.UserPreferences
getUserPreferences()
Get the UserPreferences.static void
main(java.lang.String[] args)
static void
registerBuiltInAnalysisEngines(IAnalysisCache analysisCache)
Register the "built-in" analysis engines with given IAnalysisCache.static void
registerPluginAnalysisEngines(DetectorFactoryCollection detectorFactoryCollection, IAnalysisCache analysisCache)
Register all of the analysis engines defined in the plugins contained in a DetectorFactoryCollection with an IAnalysisCache.void
setAbridgedMessages(boolean xmlWithAbridgedMessages)
void
setAnalysisFeatureSettings(AnalysisFeatureSetting[] settingList)
Set analysis feature settings.static void
setAppClassList(java.util.List<ClassDescriptor> appClassList)
void
setApplySuppression(boolean applySuppression)
void
setBugReporter(BugReporter bugReporter)
Set the BugReporter.void
setBugReporterDecorators(java.util.Set<java.lang.String> explicitlyEnabled, java.util.Set<java.lang.String> explicitlyDisabled)
void
setClassScreener(IClassScreener classScreener)
Set the ClassScreener.void
setDetectorFactoryCollection(DetectorFactoryCollection detectorFactoryCollection)
Set the detector factory collection to be used by this FindBugs2 engine.void
setMergeSimilarWarnings(boolean mergeSimilarWarnings)
void
setNoClassOk(boolean noClassOk)
Set whether or not to generate an empty output file if there were no class files specified.void
setProgressCallback(FindBugsProgress progressCallback)
Set the progress callback that will be used to keep track of the progress of the analysis.void
setProject(Project project)
Set the Project.void
setProjectName(java.lang.String name)
void
setRankThreshold(int rankThreshold)
void
setRelaxedReportingMode(boolean relaxedReportingMode)
Set relaxed reporting mode.void
setReleaseName(java.lang.String releaseName)
void
setScanNestedArchives(boolean scanNestedArchives)
Set whether or not nested archives should be scanned.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.java.util.List<ClassDescriptor>
sortByCallGraph(java.util.Collection<ClassDescriptor> classList, TopologicalSort.OutEdges<ClassDescriptor> outEdges)
boolean
useTrainingInput()
Return whether or not we should make use of training data.
-
-
-
Field Detail
-
DEBUG
public static final boolean DEBUG
-
PROGRESS
public static final boolean PROGRESS
-
PROP_FINDBUGS_HOST_APP
public static final java.lang.String PROP_FINDBUGS_HOST_APP
- See Also:
- Constant Field Values
-
PROP_FINDBUGS_HOST_APP_VERSION
public static final java.lang.String PROP_FINDBUGS_HOST_APP_VERSION
- See Also:
- Constant Field Values
-
-
Method Detail
-
setDetectorFactoryCollection
public void setDetectorFactoryCollection(DetectorFactoryCollection detectorFactoryCollection)
Set the detector factory collection to be used by this FindBugs2 engine. This method should be called before the execute() method is called.- Specified by:
setDetectorFactoryCollection
in interfaceIFindBugsEngine
- Parameters:
detectorFactoryCollection
- The detectorFactoryCollection to set.
-
execute
public void execute() throws java.io.IOException, java.lang.InterruptedException
Execute the analysis. For obscure reasons, CheckedAnalysisExceptions are re-thrown as IOExceptions. However, these can only happen during the setup phase where we scan codebases for classes.- Specified by:
execute
in interfaceIFindBugsEngine
- Throws:
java.io.IOException
java.lang.InterruptedException
-
clearCaches
protected void clearCaches()
Protected to allow Eclipse plugin remember some cache data for later reuse
-
dispose
public void dispose()
To avoid cyclic cross-references and allow GC after engine is not more needed. (used by Eclipse plugin)
-
getBugReporter
public BugReporter getBugReporter()
Description copied from interface:IFindBugsEngine
Get the BugReporter.- Specified by:
getBugReporter
in interfaceIFindBugsEngine
- Returns:
- the BugReporter
-
getProject
public Project getProject()
Description copied from interface:IFindBugsEngine
Get the Project.- Specified by:
getProject
in interfaceIFindBugsEngine
- Returns:
- the Project
-
addClassObserver
public void addClassObserver(IClassObserver classObserver)
Description copied from interface:IFindBugsEngine
Add an IClassObserver.- Specified by:
addClassObserver
in interfaceIFindBugsEngine
- Parameters:
classObserver
- the IClassObserver
-
addFilter
public void addFilter(java.lang.String filterFileName, boolean include) throws java.io.IOException, FilterException
Description copied from interface:IFindBugsEngine
Set filter of bug instances to include or exclude.- Specified by:
addFilter
in interfaceIFindBugsEngine
- Parameters:
filterFileName
- the name of the filter fileinclude
- true if the filter specifies bug instances to include, false if it specifies bug instances to exclude- Throws:
java.io.IOException
FilterException
-
excludeBaselineBugs
public void excludeBaselineBugs(java.lang.String baselineBugs) throws java.io.IOException, org.dom4j.DocumentException
Description copied from interface:IFindBugsEngine
Provide baseline of bugs not to report- Specified by:
excludeBaselineBugs
in interfaceIFindBugsEngine
- Parameters:
baselineBugs
- the name of the xml bug baseline file- Throws:
org.dom4j.DocumentException
java.io.IOException
-
enableTrainingInput
public void enableTrainingInput(java.lang.String trainingInputDir)
Description copied from interface:IFindBugsEngine
Set whether or not training input should be used to make the analysis more precise.- Specified by:
enableTrainingInput
in interfaceIFindBugsEngine
- Parameters:
trainingInputDir
- directory to load training input from
-
enableTrainingOutput
public void enableTrainingOutput(java.lang.String trainingOutputDir)
Description copied from interface:IFindBugsEngine
Set whether or not training output should be emitted.- Specified by:
enableTrainingOutput
in interfaceIFindBugsEngine
- Parameters:
trainingOutputDir
- directory to save training output in
-
getBugCount
public int getBugCount()
Description copied from interface:IFindBugsEngine
Get the number of bug instances that were reported during analysis.- Specified by:
getBugCount
in interfaceIFindBugsEngine
-
getCurrentClass
public java.lang.String getCurrentClass()
Description copied from interface:IFindBugsEngine
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.- Specified by:
getCurrentClass
in interfaceIFindBugsEngine
-
getErrorCount
public int getErrorCount()
Description copied from interface:IFindBugsEngine
Get the number of errors that occurred during analysis.- Specified by:
getErrorCount
in interfaceIFindBugsEngine
-
getMissingClassCount
public int getMissingClassCount()
Description copied from interface:IFindBugsEngine
Get the number of time missing classes were reported during analysis.- Specified by:
getMissingClassCount
in interfaceIFindBugsEngine
-
getReleaseName
public java.lang.String getReleaseName()
- Specified by:
getReleaseName
in interfaceIFindBugsEngine
- Returns:
- Returns the releaseName.
-
getProjectName
public java.lang.String getProjectName()
- Specified by:
getProjectName
in interfaceIFindBugsEngine
- Returns:
- Returns the projectName.
-
setProjectName
public void setProjectName(java.lang.String name)
- Specified by:
setProjectName
in interfaceIFindBugsEngine
- Parameters:
name
- The project name to set.
-
setAnalysisFeatureSettings
public void setAnalysisFeatureSettings(AnalysisFeatureSetting[] settingList)
Description copied from interface:IFindBugsEngine
Set analysis feature settings.- Specified by:
setAnalysisFeatureSettings
in interfaceIFindBugsEngine
- Parameters:
settingList
- list of analysis feature settings
-
setBugReporter
public void setBugReporter(BugReporter bugReporter)
Description copied from interface:IFindBugsEngine
Set the BugReporter.- Specified by:
setBugReporter
in interfaceIFindBugsEngine
- Parameters:
bugReporter
- The BugReporter to set
-
setClassScreener
public void setClassScreener(IClassScreener classScreener)
Description copied from interface:IFindBugsEngine
Set the ClassScreener. This object chooses which individual classes to analyze. By default, all classes are analyzed.- Specified by:
setClassScreener
in interfaceIFindBugsEngine
- Parameters:
classScreener
- the ClassScreener to use
-
setProgressCallback
public void setProgressCallback(FindBugsProgress progressCallback)
Description copied from interface:IFindBugsEngine
Set the progress callback that will be used to keep track of the progress of the analysis.- Specified by:
setProgressCallback
in interfaceIFindBugsEngine
- Parameters:
progressCallback
- the progress callback
-
setProject
public void setProject(Project project)
Description copied from interface:IFindBugsEngine
Set the Project.- Specified by:
setProject
in interfaceIFindBugsEngine
- Parameters:
project
- The Project to set
-
setRelaxedReportingMode
public void setRelaxedReportingMode(boolean relaxedReportingMode)
Description copied from interface:IFindBugsEngine
Set relaxed reporting mode.- Specified by:
setRelaxedReportingMode
in interfaceIFindBugsEngine
- Parameters:
relaxedReportingMode
- true if relaxed reporting mode should be enabled, false if not
-
setReleaseName
public void setReleaseName(java.lang.String releaseName)
- Specified by:
setReleaseName
in interfaceIFindBugsEngine
- Parameters:
releaseName
- The releaseName to set.
-
setSourceInfoFile
public void setSourceInfoFile(java.lang.String sourceInfoFile)
Description copied from interface:IFindBugsEngine
Set the filename of the source info file containing line numbers for fields and classes.- Specified by:
setSourceInfoFile
in interfaceIFindBugsEngine
- Parameters:
sourceInfoFile
- the source info filename
-
setUserPreferences
public void setUserPreferences(UserPreferences userPreferences)
Description copied from interface:IFindBugsEngine
Set the UserPreferences representing which Detectors should be used. If UserPreferences are not set explicitly, the default set of Detectors will be used.- Specified by:
setUserPreferences
in interfaceIFindBugsEngine
- Parameters:
userPreferences
- the UserPreferences
-
configureFilters
protected void configureFilters(UserPreferences userPreferences)
-
emitTrainingOutput
public boolean emitTrainingOutput()
Description copied from interface:IFindBugsEngine
Return whether or not training output should be emitted after analysis completes.- Specified by:
emitTrainingOutput
in interfaceIFindBugsEngine
- Returns:
- true if training output should be emitted, false if not
-
getUserPreferences
public UserPreferences getUserPreferences()
Description copied from interface:IFindBugsEngine
Get the UserPreferences.- Specified by:
getUserPreferences
in interfaceIFindBugsEngine
- Returns:
- the UserPreferences
-
getTrainingInputDir
public java.lang.String getTrainingInputDir()
Description copied from interface:IFindBugsEngine
Get the training input database directory.- Specified by:
getTrainingInputDir
in interfaceIFindBugsEngine
- Returns:
- the training input database directory
-
getTrainingOutputDir
public java.lang.String getTrainingOutputDir()
Description copied from interface:IFindBugsEngine
Get the training output directory.- Specified by:
getTrainingOutputDir
in interfaceIFindBugsEngine
- Returns:
- the training output directory
-
useTrainingInput
public boolean useTrainingInput()
Description copied from interface:IFindBugsEngine
Return whether or not we should make use of training data.- Specified by:
useTrainingInput
in interfaceIFindBugsEngine
- Returns:
- true if training data should be used, false if not
-
setScanNestedArchives
public void setScanNestedArchives(boolean scanNestedArchives)
Description copied from interface:IFindBugsEngine
Set whether or not nested archives should be scanned.- Specified by:
setScanNestedArchives
in interfaceIFindBugsEngine
- Parameters:
scanNestedArchives
- true if nested archives should be scanned, false if not
-
setNoClassOk
public void setNoClassOk(boolean noClassOk)
Description copied from interface:IFindBugsEngine
Set whether or not to generate an empty output file if there were no class files specified.- Specified by:
setNoClassOk
in interfaceIFindBugsEngine
- Parameters:
noClassOk
- true if FindBugs should generate empty output file
-
createAnalysisCache
protected IAnalysisCache createAnalysisCache() throws java.io.IOException
Create the analysis cache object and register it for current execution thread.This method is protected to allow clients override it and possibly reuse some previous analysis data (for Eclipse interactive re-build)
- Throws:
java.io.IOException
- if error occurs registering analysis engines in a plugin
-
registerBuiltInAnalysisEngines
public static void registerBuiltInAnalysisEngines(IAnalysisCache analysisCache)
Register the "built-in" analysis engines with given IAnalysisCache.- Parameters:
analysisCache
- an IAnalysisCache
-
registerPluginAnalysisEngines
public static void registerPluginAnalysisEngines(DetectorFactoryCollection detectorFactoryCollection, IAnalysisCache analysisCache) throws java.io.IOException
Register all of the analysis engines defined in the plugins contained in a DetectorFactoryCollection with an IAnalysisCache.- Parameters:
detectorFactoryCollection
- a DetectorFactoryCollectionanalysisCache
- an IAnalysisCache- Throws:
java.io.IOException
-
sortByCallGraph
public java.util.List<ClassDescriptor> sortByCallGraph(java.util.Collection<ClassDescriptor> classList, TopologicalSort.OutEdges<ClassDescriptor> outEdges)
-
clearAnalysisContext
public static void clearAnalysisContext()
-
createAnalysisContext
public static void createAnalysisContext(Project project, java.util.List<ClassDescriptor> appClassList, @CheckForNull java.lang.String sourceInfoFileName) throws java.io.IOException
Create the AnalysisContext that will serve as the BCEL-compatibility layer over the AnalysisCache.- Parameters:
project
- The projectappClassList
- list of ClassDescriptors identifying application classessourceInfoFileName
- name of source info file (null if none)- Throws:
java.io.IOException
-
setAppClassList
public static void setAppClassList(java.util.List<ClassDescriptor> appClassList)
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception
- Throws:
java.lang.Exception
-
setAbridgedMessages
public void setAbridgedMessages(boolean xmlWithAbridgedMessages)
- Specified by:
setAbridgedMessages
in interfaceIFindBugsEngine
-
setMergeSimilarWarnings
public void setMergeSimilarWarnings(boolean mergeSimilarWarnings)
- Specified by:
setMergeSimilarWarnings
in interfaceIFindBugsEngine
-
setApplySuppression
public void setApplySuppression(boolean applySuppression)
- Specified by:
setApplySuppression
in interfaceIFindBugsEngine
-
setRankThreshold
public void setRankThreshold(int rankThreshold)
- Specified by:
setRankThreshold
in interfaceIFindBugsEngine
-
finishSettings
public void finishSettings()
- Specified by:
finishSettings
in interfaceIFindBugsEngine
-
setBugReporterDecorators
public void setBugReporterDecorators(java.util.Set<java.lang.String> explicitlyEnabled, java.util.Set<java.lang.String> explicitlyDisabled)
- Specified by:
setBugReporterDecorators
in interfaceIFindBugsEngine
-
-