Class FindBugs2

java.lang.Object
edu.umd.cs.findbugs.FindBugs2
All Implemented Interfaces:
IFindBugsEngine, AutoCloseable

public class FindBugs2 extends Object implements IFindBugsEngine, AutoCloseable
FindBugs driver class. Orchestrates the analysis of a project, collection of results, etc.
Author:
David Hovemeyer
  • Field Details

    • DEBUG

      public static final boolean DEBUG
    • PROGRESS

      public static final boolean PROGRESS
    • MULTI_THREAD

      public static final boolean MULTI_THREAD
    • PROP_FINDBUGS_HOST_APP

      public static final String PROP_FINDBUGS_HOST_APP
      See Also:
    • PROP_FINDBUGS_HOST_APP_VERSION

      public static final String PROP_FINDBUGS_HOST_APP_VERSION
      See Also:
  • Constructor Details

    • FindBugs2

      public FindBugs2()
      Constructor that uses CurrentThreadExecutorService to keep backward compatibility with SpotBugs 3.1.
      Since:
      3.1
    • FindBugs2

      public FindBugs2(@NonNull ExecutorService service)
      Parameters:
      service - The non-null ExecutorService instance to execute analysis. Caller is responsible to shutdown it.
      Since:
      4.0
  • Method Details

    • 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 interface IFindBugsEngine
      Parameters:
      detectorFactoryCollection - The detectorFactoryCollection to set.
    • execute

      public void execute() throws IOException, 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 interface IFindBugsEngine
      Throws:
      IOException
      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)

      Caller probably need to shutdown the ExecutorService instance provided at constructor.

    • getBugReporter

      public BugReporter getBugReporter()
      Description copied from interface: IFindBugsEngine
      Get the BugReporter.
      Specified by:
      getBugReporter in interface IFindBugsEngine
      Returns:
      the BugReporter
    • getProject

      public Project getProject()
      Description copied from interface: IFindBugsEngine
      Get the Project.
      Specified by:
      getProject in interface IFindBugsEngine
      Returns:
      the Project
    • addClassObserver

      public void addClassObserver(IClassObserver classObserver)
      Description copied from interface: IFindBugsEngine
      Add an IClassObserver.
      Specified by:
      addClassObserver in interface IFindBugsEngine
      Parameters:
      classObserver - the IClassObserver
    • addFilter

      public void addFilter(String filterFileName, boolean include) throws IOException, FilterException
      Description copied from interface: IFindBugsEngine
      Set filter of bug instances to include or exclude.
      Specified by:
      addFilter in interface IFindBugsEngine
      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:
      IOException
      FilterException
    • excludeBaselineBugs

      public void excludeBaselineBugs(String baselineBugs) throws IOException, org.dom4j.DocumentException
      Description copied from interface: IFindBugsEngine
      Provide baseline of bugs not to report
      Specified by:
      excludeBaselineBugs in interface IFindBugsEngine
      Parameters:
      baselineBugs - the name of the xml bug baseline file
      Throws:
      org.dom4j.DocumentException
      IOException
    • enableTrainingInput

      public void enableTrainingInput(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 interface IFindBugsEngine
      Parameters:
      trainingInputDir - directory to load training input from
    • enableTrainingOutput

      public void enableTrainingOutput(String trainingOutputDir)
      Description copied from interface: IFindBugsEngine
      Set whether or not training output should be emitted.
      Specified by:
      enableTrainingOutput in interface IFindBugsEngine
      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 interface IFindBugsEngine
    • getCurrentClass

      public 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 interface IFindBugsEngine
    • getErrorCount

      public int getErrorCount()
      Description copied from interface: IFindBugsEngine
      Get the number of errors that occurred during analysis.
      Specified by:
      getErrorCount in interface IFindBugsEngine
    • getMissingClassCount

      public int getMissingClassCount()
      Description copied from interface: IFindBugsEngine
      Get the number of time missing classes were reported during analysis.
      Specified by:
      getMissingClassCount in interface IFindBugsEngine
    • getReleaseName

      public String getReleaseName()
      Specified by:
      getReleaseName in interface IFindBugsEngine
      Returns:
      Returns the releaseName.
    • getProjectName

      public String getProjectName()
      Specified by:
      getProjectName in interface IFindBugsEngine
      Returns:
      Returns the projectName.
    • setProjectName

      public void setProjectName(String name)
      Specified by:
      setProjectName in interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      Parameters:
      progressCallback - the progress callback
    • setProject

      public void setProject(Project project)
      Description copied from interface: IFindBugsEngine
      Set the Project.
      Specified by:
      setProject in interface IFindBugsEngine
      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 interface IFindBugsEngine
      Parameters:
      relaxedReportingMode - true if relaxed reporting mode should be enabled, false if not
    • setReleaseName

      public void setReleaseName(String releaseName)
      Specified by:
      setReleaseName in interface IFindBugsEngine
      Parameters:
      releaseName - The releaseName to set.
    • setSourceInfoFile

      public void setSourceInfoFile(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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      Returns:
      the UserPreferences
    • getTrainingInputDir

      public String getTrainingInputDir()
      Description copied from interface: IFindBugsEngine
      Get the training input database directory.
      Specified by:
      getTrainingInputDir in interface IFindBugsEngine
      Returns:
      the training input database directory
    • getTrainingOutputDir

      public String getTrainingOutputDir()
      Description copied from interface: IFindBugsEngine
      Get the training output directory.
      Specified by:
      getTrainingOutputDir in interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      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 interface IFindBugsEngine
      Parameters:
      noClassOk - true if FindBugs should generate empty output file
    • createAnalysisCache

      protected IAnalysisCache createAnalysisCache() throws 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:
      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 IOException
      Register all of the analysis engines defined in the plugins contained in a DetectorFactoryCollection with an IAnalysisCache.
      Parameters:
      detectorFactoryCollection - a DetectorFactoryCollection
      analysisCache - an IAnalysisCache
      Throws:
      IOException
    • sortByCallGraph

      public List<ClassDescriptor> sortByCallGraph(Collection<ClassDescriptor> classList, TopologicalSort.OutEdges<ClassDescriptor> outEdges)
    • clearAnalysisContext

      public static void clearAnalysisContext()
    • createAnalysisContext

      public static void createAnalysisContext(Project project, List<ClassDescriptor> appClassList, @CheckForNull String sourceInfoFileName) throws IOException
      Create the AnalysisContext that will serve as the BCEL-compatibility layer over the AnalysisCache.
      Parameters:
      project - The project
      appClassList - list of ClassDescriptors identifying application classes
      sourceInfoFileName - name of source info file (null if none)
      Throws:
      IOException
    • setAppClassList

      public static void setAppClassList(List<ClassDescriptor> appClassList)
    • main

      public static void main(String[] args) throws Exception
      Throws:
      Exception
    • setAbridgedMessages

      public void setAbridgedMessages(boolean xmlWithAbridgedMessages)
      Specified by:
      setAbridgedMessages in interface IFindBugsEngine
    • setMergeSimilarWarnings

      public void setMergeSimilarWarnings(boolean mergeSimilarWarnings)
      Specified by:
      setMergeSimilarWarnings in interface IFindBugsEngine
    • setApplySuppression

      public void setApplySuppression(boolean applySuppression)
      Specified by:
      setApplySuppression in interface IFindBugsEngine
    • setRankThreshold

      public void setRankThreshold(int rankThreshold)
      Specified by:
      setRankThreshold in interface IFindBugsEngine
    • finishSettings

      public void finishSettings()
      Specified by:
      finishSettings in interface IFindBugsEngine
    • setBugReporterDecorators

      public void setBugReporterDecorators(Set<String> explicitlyEnabled, Set<String> explicitlyDisabled)
      Specified by:
      setBugReporterDecorators in interface IFindBugsEngine
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable