/*
* FindBugs - Find bugs in Java programs
* Copyright (C) 2003,2004 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 javax.annotation.Nonnull;
import edu.umd.cs.findbugs.util.HTML;
A BugPattern object collects all of the metadata for a particular species of
BugInstance. Specifically, it stores the human-readable text for displaying a
bug instance. BugPatterns derive from the BugPattern elements in the
"findbugs.xml" and "messages.xml" found in a FindBugs plugin.
Author: David Hovemeyer See Also:
/**
* A BugPattern object collects all of the metadata for a particular species of
* BugInstance. Specifically, it stores the human-readable text for displaying a
* bug instance. BugPatterns derive from the BugPattern elements in the
* "findbugs.xml" and "messages.xml" found in a FindBugs plugin.
*
* @author David Hovemeyer
* @see BugInstance
*/
public class BugPattern implements Comparable<BugPattern> {
final private String type;
final private String abbrev;
final private String category;
final private boolean experimental;
final private String shortDescription;
final private String longDescription;
final private String detailText;
final private String url;
final int cweid;
int priorityAdjustment;
private boolean deprecated;
Constructor.
Params: - type –
the type (species) of BugInstance
- abbrev – the abbreviation or "bug code"; see
BugCode
- category –
the category
- experimental –
true if the bug pattern is experimental
- shortDescription –
short one-line description of the bug species
- longDescription – longer one-line description; may contain placeholders for use by
FindBugsMessageFormat
to format BugAnnotations - detailText –
HTML text containing a full description of the bug species
- bugsUrl –
URL of web-page containing bug descriptions or null if there's no such page.
/**
* Constructor.
*
* @param type
* the type (species) of BugInstance
* @param abbrev
* the abbreviation or "bug code"; see {@link BugCode}
* @param category
* the category
* @param experimental
* true if the bug pattern is experimental
* @param shortDescription
* short one-line description of the bug species
* @param longDescription
* longer one-line description; may contain placeholders for use
* by {@link FindBugsMessageFormat} to format BugAnnotations
* @param detailText
* HTML text containing a full description of the bug species
* @param bugsUrl
* URL of web-page containing bug descriptions or null if there's no such page.
*/
public BugPattern(String type, String abbrev, String category, boolean experimental, String shortDescription,
String longDescription, String detailText, String bugsUrl, int cweid) {
this.type = type;
this.abbrev = abbrev.intern();
this.category = category.intern();
this.experimental = experimental;
this.shortDescription = shortDescription;
this.longDescription = longDescription;
this.detailText = detailText;
this.cweid = cweid;
this.url = bugsUrl;
}
static final BugPattern REALLY_UNKNOWN = new BugPattern("REALLY_UNKNOWN", "TEST", "CORRECTNESS", false,
"Unknown warning; core bug patterns not found", "Unknown warning BUG_PATTERN in {1}; core bug patterns not found",
"<p>A warning was recorded, but findbugs can't find the description of this bug pattern "
+ "and so can't describe it. This should occur only in cases of a bug in FindBugs or its configuration, "
+ "or perhaps if an analysis was generated using a plugin, but that plugin is not currently loaded. "
+ "</p>", null, 0);
Get the BugPattern
/**
* Get the BugPattern
*/
public String getType() {
return type;
}
Get the BugKind
/**
* Get the BugKind
*/
public String getAbbrev() {
return abbrev;
}
Get the BugCode
/**
* Get the BugCode
*/
public @Nonnull BugCode getBugCode() {
return DetectorFactoryCollection.instance().getBugCode(abbrev);
}
Get the BugCategory
/**
* Get the BugCategory
*/
public String getCategory() {
return category;
}
public int getPriorityAdjustment() {
return priorityAdjustment;
}
public void adjustPriority(int change) {
priorityAdjustment += change;
}
public String getCategoryAbbrev() {
String categoryAbbrev = null;
BugCategory bcat = DetectorFactoryCollection.instance().getBugCategory(getCategory());
if (bcat != null) {
categoryAbbrev = bcat.getAbbrev();
}
if (categoryAbbrev == null) {
categoryAbbrev = TextUIBugReporter.OTHER_CATEGORY_ABBREV;
}
return categoryAbbrev;
}
Is the bug pattern experimental?
/**
* Is the bug pattern experimental?
*/
public boolean isExperimental() {
return experimental;
}
Get the short description.
/**
* Get the short description.
*/
public String getShortDescription() {
return shortDescription;
}
Get the long description.
/**
* Get the long description.
*/
public String getLongDescription() {
return longDescription;
}
Get the HTML detail text describing the bug.
/**
* Get the HTML detail text describing the bug.
*/
public String getDetailText() {
return detailText;
}
Get the Plain text describing the bug.
/**
* Get the Plain text describing the bug.
*/
public String getDetailPlainText() {
try {
return HTML.convertHtmlSnippetToText(detailText);
} catch (Exception e) {
return detailText;
}
}
Get the detail text as a complete HTML document.
/**
* Get the detail text as a complete HTML document.
*/
public String getDetailHTML() {
return getDetailHTML(getDetailText());
}
public String getDetailHTML(String detailText) {
StringBuilder buf = new StringBuilder();
buf.append("<!DOCTYPE HTML\">\n");
buf.append("<HTML><HEAD><TITLE>");
buf.append(getShortDescription());
buf.append("</TITLE></HEAD><BODY><H1>");
buf.append(wrapInDescriptionLink(getShortDescription()));
buf.append("</H1>\n");
buf.append(detailText);
buf.append("</BODY></HTML>\n");
return buf.toString();
}
public String wrapInDescriptionLink(String text) {
if(url == null) {
return text;
}
return "<a href=\"" + url + "#" + type + "\">" + text + "</a>";
}
@Override
public int compareTo(BugPattern other) {
return type.compareTo(other.type);
}
@Override
public int hashCode() {
return type.hashCode();
}
@Override
public boolean equals(Object o) {
if (!(o instanceof BugPattern)) {
return false;
}
BugPattern other = (BugPattern) o;
return type.equals(other.type);
}
Returns: Returns the cweid.
/**
* @return Returns the cweid.
*/
public int getCWEid() {
return cweid;
}
@Override
public String toString() {
return "BugPattern[" + type + "]";
}
The method is not public to disallow modification of this attribute
Params: - deprecated –
true if this bug pattern is not used anymore and exists for
backward compatibility only
/**
* The method is not public to disallow modification of this attribute
*
* @param deprecated
* true if this bug pattern is not used anymore and exists for
* backward compatibility only
*/
/* package protected */void setDeprecated(boolean deprecated) {
this.deprecated = deprecated;
}
Returns: true if this bug pattern is not used anymore and exists for
backward compatibility only
/**
* @return true if this bug pattern is not used anymore and exists for
* backward compatibility only
*/
public boolean isDeprecated() {
return deprecated;
}
}