Class Project

java.lang.Object
edu.umd.cs.findbugs.Project
All Implemented Interfaces:
XMLWriteable, AutoCloseable

public class Project extends Object implements XMLWriteable, AutoCloseable

A project in the GUI. This consists of some number of Jar files to analyze for bugs, and optionally

  • some number of source directories, for locating the program's source code
  • some number of auxiliary classpath entries, for locating classes referenced by the program which the user doesn't want to analyze
  • some number of boolean options
  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • currentWorkingDirectoryList

      private final List<File> currentWorkingDirectoryList
    • projectName

      private String projectName
    • analysisTargets

      private List<String> analysisTargets
      List of jars/directories to analyze
    • srcDirList

      private List<String> srcDirList
      The list of source directories.
    • auxClasspathEntryList

      private List<String> auxClasspathEntryList
      The list of auxiliary classpath entries.
    • isModified

      private boolean isModified
      Flag to indicate that this Project has been modified.
    • configuration

      private UserPreferences configuration
    • enabledPlugins

      private final Map<String,Boolean> enabledPlugins
      key is plugin id
    • UNNAMED_PROJECT

      public static final String UNNAMED_PROJECT
      StaticConstant used to name anonymous projects.
      See Also:
    • timestampForAnalyzedClasses

      private long timestampForAnalyzedClasses
    • guiCallback

      private IGuiCallback guiCallback
    • suppressionFilter

      @Nonnull private Filter suppressionFilter
    • sourceFinder

      private SourceFinder sourceFinder
    • JAR_ELEMENT_NAME

      static final String JAR_ELEMENT_NAME
      See Also:
    • AUX_CLASSPATH_ENTRY_ELEMENT_NAME

      static final String AUX_CLASSPATH_ENTRY_ELEMENT_NAME
      See Also:
    • SRC_DIR_ELEMENT_NAME

      static final String SRC_DIR_ELEMENT_NAME
      See Also:
    • WRK_DIR_ELEMENT_NAME

      static final String WRK_DIR_ELEMENT_NAME
      See Also:
    • FILENAME_ATTRIBUTE_NAME

      static final String FILENAME_ATTRIBUTE_NAME
      See Also:
    • PROJECTNAME_ATTRIBUTE_NAME

      static final String PROJECTNAME_ATTRIBUTE_NAME
      See Also:
    • PLUGIN_ELEMENT_NAME

      static final String PLUGIN_ELEMENT_NAME
      See Also:
    • PLUGIN_ID_ATTRIBUTE_NAME

      static final String PLUGIN_ID_ATTRIBUTE_NAME
      See Also:
    • PLUGIN_STATUS_ELEMENT_NAME

      static final String PLUGIN_STATUS_ELEMENT_NAME
      See Also:
    • OPTIONS_KEY

      private static final String OPTIONS_KEY
      See Also:
    • JAR_FILES_KEY

      private static final String JAR_FILES_KEY
      See Also:
    • SRC_DIRS_KEY

      private static final String SRC_DIRS_KEY
      See Also:
    • AUX_CLASSPATH_ENTRIES_KEY

      private static final String AUX_CLASSPATH_ENTRIES_KEY
      See Also:
    • RELATIVE_PATHS

      public static final String RELATIVE_PATHS
      See Also:
    • FILE_IGNORE_CASE

      private static final boolean FILE_IGNORE_CASE
      Hack for whether files are case insensitive. For now, we'll assume that Windows is the only case insensitive OS. (OpenVMS users, feel free to submit a patch :-)
  • Constructor Details

    • Project

      public Project()
      Create an anonymous project.
  • Method Details

    • getPluginStatus

      @CheckForNull public Boolean getPluginStatus(Plugin plugin)
    • setPluginStatusTrinary

      public void setPluginStatusTrinary(String pluginId, Boolean enabled)
    • getConfiguration

      public UserPreferences getConfiguration()
    • setConfiguration

      public void setConfiguration(@Nonnull UserPreferences configuration)
      Parameters:
      configuration - The configuration to set, non null
    • duplicate

      public Project duplicate()
      Return an exact copy of this Project.
    • getSourceFinder

      public SourceFinder getSourceFinder()
    • isGuiAvaliable

      public boolean isGuiAvaliable()
    • add

      public void add(Project project2)
      add information from project2 to this project
    • appendWithoutDuplicates

      public static <T> List<T> appendWithoutDuplicates(List<T> lst1, List<T> lst2)
    • setCurrentWorkingDirectory

      public void setCurrentWorkingDirectory(File f)
    • isModified

      public boolean isModified()
      Return whether or not this Project has unsaved modifications.
    • setModified

      public void setModified(boolean isModified)
      Set whether or not this Project has unsaved modifications.
    • addFile

      public boolean addFile(String fileName)
      Add a file to the project.
      Parameters:
      fileName - the file to add
      Returns:
      true if the file was added, or false if the file was already present
    • addSourceDirs

      public boolean addSourceDirs(Collection<String> sourceDirs)
      Add source directories to the project.
      Parameters:
      sourceDirs - The source directories to add. These can be either absolute paths or relative to any of the working directories in this project object.
      Returns:
      true if a source directory was added or false if all source directories were already present
    • addWorkingDir

      public boolean addWorkingDir(String dirName)
      Add a working directory to the project.
      Parameters:
      dirName - the directory to add
      Returns:
      true if the working directory was added, or false if the working directory was already present
    • getFileCount

      public int getFileCount()
      Get the number of files in the project.
      Returns:
      the number of files in the project
    • getFile

      public String getFile(int num)
      Get the given file in the list of project files.
      Parameters:
      num - the number of the file in the list of project files
      Returns:
      the name of the file
    • removeFile

      public void removeFile(int num)
      Remove file at the given index in the list of project files
      Parameters:
      num - index of the file to remove in the list of project files
    • getFileList

      public List<String> getFileList()
      Get the list of files, directories, and zip files in the project.
    • getNumSourceDirs

      public int getNumSourceDirs()
      Get the number of source directories in the project.
      Returns:
      the number of source directories in the project
    • getSourceDir

      public String getSourceDir(int num)
      Get the given source directory.
      Parameters:
      num - the number of the source directory
      Returns:
      the source directory
    • removeSourceDir

      public void removeSourceDir(int num)
      Remove source directory at given index.
      Parameters:
      num - index of the source directory to remove
    • getFileArray

      public String[] getFileArray()
      Get project files as an array of Strings.
    • getSourceDirArray

      public String[] getSourceDirArray()
      Get source dirs as an array of Strings.
    • getSourceDirList

      public List<String> getSourceDirList()
      Get the source dir list.
    • addAuxClasspathEntry

      public boolean addAuxClasspathEntry(String auxClasspathEntry)
      Add an auxiliary classpath entry
      Parameters:
      auxClasspathEntry - the entry
      Returns:
      true if the entry was added successfully, or false if the given entry is already in the list
    • getNumAuxClasspathEntries

      public int getNumAuxClasspathEntries()
      Get the number of auxiliary classpath entries.
    • getAuxClasspathEntry

      public String getAuxClasspathEntry(int n)
      Get the n'th auxiliary classpath entry.
    • removeAuxClasspathEntry

      public void removeAuxClasspathEntry(int n)
      Remove the n'th auxiliary classpath entry.
    • getAuxClasspathEntryList

      public List<String> getAuxClasspathEntryList()
      Return the list of aux classpath entries.
    • processComponentJar

      private void processComponentJar(URL jarFileURL, Project.WorkList workList, List<String> implicitClasspath)
      Examine the manifest of a single zip/jar file for implicit classapth entries.
      Parameters:
      jarFileURL - URL of the zip/jar file
      workList - worklist of zip/jar files to examine
      implicitClasspath - list of implicit classpath entries found
    • readXML

    • writeXML

      public void writeXML(File f, @CheckForNull BugCollection bugCollection) throws IOException
      Throws:
      IOException
    • readProject

      public static Project readProject(String argument) throws IOException
      Read Project from named file.
      Parameters:
      argument - command line argument containing project file name
      Returns:
      the Project
      Throws:
      IOException
    • toString

      public String toString()
      Convert to a string in a nice (displayable) format.
      Overrides:
      toString in class Object
    • transformFilename

      public static String transformFilename(String fileName)
      Transform a user-entered filename into a proper filename, by adding the ".fb" file extension if it isn't already present.
    • writeXML

      public void writeXML(XMLOutput xmlOutput) throws IOException
      Description copied from interface: XMLWriteable
      Write this object to given XMLOutput.
      Specified by:
      writeXML in interface XMLWriteable
      Parameters:
      xmlOutput - the XMLOutput for the document
      Throws:
      IOException
    • writeXML

      public void writeXML(XMLOutput xmlOutput, @CheckForNull File destination, @CheckForNull BugCollection bugCollection) throws IOException
      Throws:
      IOException
    • convertToRelative

      private Iterable<String> convertToRelative(List<String> paths, String base)
    • convertToRelative

      private String convertToRelative(String srcFile, String base)
      Converts a full path to a relative path if possible
      Parameters:
      srcFile - path to convert
      Returns:
      the converted filename
    • makeAbsoluteCWD

      private String makeAbsoluteCWD(String fileName)
      Make the given filename absolute relative to the current working directory.
    • makeAbsoluteCwdCandidates

      private List<String> makeAbsoluteCwdCandidates(String fileName)
      Make the given filename absolute relative to the current working directory candidates. If the given filename exists in more than one of the working directories, a list of these existing absolute paths is returned. The returned list is guaranteed to be non-empty. The returned paths might exist or not exist and might be relative or absolute.
      Returns:
      A list of at least one candidate path for the given filename.
    • addToListInternal

      private <T> boolean addToListInternal(Collection<T> list, T value)
      Add a value to given list, making the Project modified if the value is not already present in the list.
      Parameters:
      list - the list
      value - the value to be added
      Returns:
      true if the value was not already present in the list, false otherwise
    • setTimestamp

      public void setTimestamp(long timestamp)
    • addTimestamp

      public void addTimestamp(long timestamp)
    • getTimestamp

      public long getTimestamp()
    • setProjectName

      public void setProjectName(String projectName)
    • getProjectName

      public String getProjectName()
    • setSuppressionFilter

      public void setSuppressionFilter(@Nonnull Filter suppressionFilter)
    • getSuppressionFilter

      @Nonnull public Filter getSuppressionFilter()
    • setGuiCallback

      public void setGuiCallback(IGuiCallback guiCallback)
    • getGuiCallback

      public IGuiCallback getGuiCallback()
    • getResolvedSourcePaths

      public Iterable<String> getResolvedSourcePaths()
    • close

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