Class Project

  • All Implemented Interfaces:
    XMLWriteable, java.lang.AutoCloseable

    public class Project
    extends java.lang.Object
    implements XMLWriteable, java.lang.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
    Author:
    David Hovemeyer
    • Field Detail

      • UNNAMED_PROJECT

        public static final java.lang.String UNNAMED_PROJECT
        StaticConstant used to name anonymous projects.
        See Also:
        Constant Field Values
    • Constructor Detail

      • Project

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

      • getPluginStatus

        @CheckForNull
        public java.lang.Boolean getPluginStatus​(Plugin plugin)
      • setPluginStatusTrinary

        public void setPluginStatusTrinary​(java.lang.String pluginId,
                                           java.lang.Boolean enabled)
      • 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.
      • isGuiAvaliable

        public boolean isGuiAvaliable()
      • add

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

        public static <T> java.util.List<T> appendWithoutDuplicates​(java.util.List<T> lst1,
                                                                    java.util.List<T> lst2)
      • setCurrentWorkingDirectory

        public void setCurrentWorkingDirectory​(java.io.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​(java.lang.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
      • addSourceDir

        @Deprecated
        public boolean addSourceDir​(java.lang.String sourceDir)
        Deprecated.
        Calling this method repeatedly performs poorly because a SourceFinder is created each time, which checks all files for existence each time. Use addSourceDirs(java.util.Collection<java.lang.String>) instead.
        Add a source directory to the project.
        Parameters:
        sourceDir - The source directory to add. These can be either an absolute path or relative to any of the working directories in this project object.
        Returns:
        true if the source directory was added or false if it was already present
      • addSourceDirs

        public boolean addSourceDirs​(java.util.Collection<java.lang.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​(java.lang.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 java.lang.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 java.util.List<java.lang.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 java.lang.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 java.lang.String[] getFileArray()
        Get project files as an array of Strings.
      • getSourceDirArray

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

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

        public boolean addAuxClasspathEntry​(java.lang.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 java.lang.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 java.util.List<java.lang.String> getAuxClasspathEntryList()
        Return the list of aux classpath entries.
      • getImplicitClasspathEntryList

        @Deprecated
        public java.util.List<java.lang.String> getImplicitClasspathEntryList()
        Deprecated.
        FindBugs2 and ClassPathBuilder take care of this automatically
        Return the list of implicit classpath entries. The implicit classpath is computed from the closure of the set of jar files that are referenced by the "Class-Path" attribute of the manifest of the any jar file that is part of this project or by the "Class-Path" attribute of any directly or indirectly referenced jar. The referenced jar files that exist are the list of implicit classpath entries.
      • write

        @Deprecated
        public void write​(java.lang.String outputFile,
                          boolean useRelativePaths,
                          java.lang.String relativeBase)
                   throws java.io.IOException
        Deprecated.
        Save the project to an output file.
        Parameters:
        outputFile - name of output file
        useRelativePaths - true if the project should be written using only relative paths
        relativeBase - if useRelativePaths is true, this file is taken as the base directory in terms of which all files should be made relative
        Throws:
        java.io.IOException - if an error occurs while writing
      • readXML

        public static Project readXML​(java.io.File f)
                               throws java.io.IOException,
                                      org.xml.sax.SAXException,
                                      javax.xml.parsers.ParserConfigurationException
        Throws:
        java.io.IOException
        org.xml.sax.SAXException
        javax.xml.parsers.ParserConfigurationException
      • writeXML

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

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

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

        public static java.lang.String transformFilename​(java.lang.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 java.io.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:
        java.io.IOException
      • writeXML

        public void writeXML​(XMLOutput xmlOutput,
                             @CheckForNull
                             java.io.File destination,
                             @CheckForNull
                             BugCollection bugCollection)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • setTimestamp

        public void setTimestamp​(long timestamp)
      • addTimestamp

        public void addTimestamp​(long timestamp)
      • getTimestamp

        public long getTimestamp()
      • setProjectName

        public void setProjectName​(java.lang.String projectName)
      • getProjectName

        public java.lang.String getProjectName()
      • setSuppressionFilter

        public void setSuppressionFilter​(@Nonnull
                                         Filter suppressionFilter)
      • getSuppressionFilter

        @Nonnull
        public Filter getSuppressionFilter()
      • setGuiCallback

        public void setGuiCallback​(IGuiCallback guiCallback)
      • getResolvedSourcePaths

        public java.lang.Iterable<java.lang.String> getResolvedSourcePaths()
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable