/* * FindBugs - Find bugs in Java programs * Copyright (C) 2004-2005 University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collection; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import edu.umd.cs.findbugs.cloud.Cloud; import edu.umd.cs.findbugs.model.ClassFeatureSet; import edu.umd.cs.findbugs.xml.XMLOutput; import javax.annotation.WillClose; public interface BugCollection extends Iterable<BugInstance> { static final String ROOT_ELEMENT_NAME = "BugCollection"; static final String SRCMAP_ELEMENT_NAME = "SrcMap"; static final String PROJECT_ELEMENT_NAME = "Project"; static final String ERRORS_ELEMENT_NAME = "Errors"; static final String ANALYSIS_ERROR_ELEMENT_NAME = "AnalysisError"; // 0.8.6 and earlier static final String ERROR_ELEMENT_NAME = "Error"; // 0.8.7 and later static final String ERROR_MESSAGE_ELEMENT_NAME = "ErrorMessage"; // 0.8.7 and later static final String ERROR_EXCEPTION_ELEMENT_NAME = "Exception"; // 0.8.7 and later static final String ERROR_STACK_TRACE_ELEMENT_NAME = "StackTrace"; // 0.8.7 and later static final String MISSING_CLASS_ELEMENT_NAME = "MissingClass"; static final String SUMMARY_HTML_ELEMENT_NAME = "SummaryHTML"; static final String APP_CLASS_ELEMENT_NAME = "AppClass"; static final String CLASS_HASHES_ELEMENT_NAME = "ClassHashes"; // 0.9.2 and later static final String HISTORY_ELEMENT_NAME = "History"; // 0.9.2 and later public Project getProject(); /** * Set the current release name. * * @param releaseName the current release name */ public void setReleaseName(String releaseName); /** * Get the current release name. * * @return current release name */ public String getReleaseName(); /** * Get the project stats. */ public ProjectStats getProjectStats(); /** * Get the timestamp for the analyzed code (when it was compiled) * * @param timestamp the timestamp. */ public void setTimestamp(long timestamp); /** * Get the timestamp for the analyzed code (when it was compiled) */ public long getTimestamp(); /** * Set the timestamp for when the analysis was performed. * * @param timestamp the analysis timestamp. */ public void setAnalysisTimestamp(long timestamp); /** * Set the version of FindBugs used to perform the analysis * * @param analysisVersion the analysis version. */ public void setAnalysisVersion(String analysisVersion); /** * Get the timestamp for when the analysis was performed. */ public long getAnalysisTimestamp(); /** * Gets the AppVersion corresponding to the given sequence number. */ public AppVersion getAppVersionFromSequenceNumber(long target); /** * Set the sequence number of the BugCollection. * * @param sequence the sequence number * @see BugCollection#getSequenceNumber() */ public void setSequenceNumber(long sequence); /** * Get the sequence number of the BugCollection. * This value represents the number of times the user has * analyzed a different version of the application and * updated the historical bug collection using the * UpdateBugCollection class. * * @return the sequence number */ public long getSequenceNumber(); /** * Clear all AppVersions representing previously-analyzed versions * of the application. */ public abstract void clearAppVersions(); /** * Add an AppVersion representing a version of the analyzed application. * * @param appVersion the AppVersion */ public void addAppVersion(AppVersion appVersion); /** * Get the current AppVersion. */ public AppVersion getCurrentAppVersion(); /** * Get an Iterator over AppVersions defined in the collection. */ public Iterator<AppVersion> appVersionIterator(); /** * Add a BugInstance to this BugCollection. * This just calls add(bugInstance, true). * * @param bugInstance the BugInstance * @return true if the BugInstance was added, or false if a matching * BugInstance was already in the BugCollection */ public boolean add(BugInstance bugInstance); /** * Add a BugInstance to this BugCollection. * * @param bugInstance the BugInstance * @param updateActiveTime true if the warning's active time should be updated * to include the collection's current time * @return true if the BugInstance was added, or false if a matching * BugInstance was already in the BugCollection */ public boolean add(BugInstance bugInstance, boolean updateActiveTime); /** * Look up a BugInstance by its unique id. * * @param uniqueId the BugInstance's unique id. * @return the BugInstance with the given unique id, * or null if there is no such BugInstance * * This is deprecated; uniqueIDs are not persistent. */ @Deprecated public BugInstance lookupFromUniqueId(String uniqueId); /** * Add an analysis error. * * @param message the error message */ public void addError(String message); /** * Add an analysis error. * * @param error the AnalysisError object to add */ public void addError(AnalysisError error); /** * Add a missing class message. * * @param message the missing class message */ public void addMissingClass(String message); public void setClassFeatureSet(ClassFeatureSet classFeatureSet); public void writePrologue(XMLOutput xmlOutput) throws IOException; public void writeEpilogue(XMLOutput xmlOutput) throws IOException; public void clearClassFeatures(); public void clearMissingClasses(); /** * Read XML data from given file into this object, * populating given Project as a side effect. * * @param fileName name of the file to read */ public void readXML(String fileName) throws IOException, DocumentException; /** * Read XML data from given input stream into this * object, populating the Project as a side effect. * An attempt will be made to close the input stream * (even if an exception is thrown). * * @param in the InputStream */ public void readXML(@WillClose InputStream in) throws IOException, DocumentException; /** * Write this BugCollection to a file as XML. * * @param fileName the file to write to */ public void writeXML(String fileName) throws IOException; /** * Write the BugCollection to given output stream as XML. * The output stream will be closed, even if an exception is thrown. * * @param out the OutputStream to write to */ public void writeXML(@WillClose OutputStream out) throws IOException; /** * Write the BugCollection to an XMLOutput object. * The finish() method of the XMLOutput object is guaranteed * to be called. * * <p> * To write the SummaryHTML element, set property * findbugs.report.SummaryHTML to "true". * </p> * * @param xmlOutput the XMLOutput object */ public void writeXML(@WillClose XMLOutput xmlOutput) throws IOException; /** * Return an Iterator over all the BugInstance objects in * the BugCollection. */ public Iterator<BugInstance> iterator(); /** * Return the Collection storing the BugInstance objects. */ public Collection<BugInstance> getCollection(); /** * Convert the BugCollection into a dom4j Document object. * * @return the Document representing the BugCollection as a dom4j tree */ public Document toDocument(); /** * Create a new empty BugCollection with the same metadata as this one. * * @return a new empty BugCollection with the same metadata as this one */ public BugCollection createEmptyCollectionWithMetadata(); /** * Set whether textual messages should be added to any generated XML */ public void setWithMessages(boolean withMessages); /** * Set whether we should minimize XML */ public void setMinimalXML(boolean minimalXML); /** * Return whether textual messages will be added to any generated XML */ public boolean getWithMessages(); public BugInstance findBug(String instanceHash, String bugType, int lineNumber); public boolean isApplySuppressions(); public void setApplySuppressions(boolean applySuppressions); /** * Get the instance of user annotation plugin * * @return user annotation plugin OR null, if there is no annotation plugin * installed */ public Cloud getCloud(); public void setRequestDatabaseCloud(boolean useDatabaseCloud); public Cloud reinitializeCloud(); }