FindBugsFrame.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
edu.umd.cs.findbugs.gui |
![]() |
![]() |
FindBugs |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* FindBugs - Find bugs in Java programs
* Copyright (C) 2003-2005, University of Maryland
* Copyright (C) 2004 Dave Brosius <dbrosius@users.sourceforge.net>
*
* 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
*/
/*
* FindBugsFrame.java
*
* Created on March 30, 2003, 12:05 PM
*/
package edu.umd.cs.findbugs.gui;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.io.StringReader;
import java.lang.reflect.Method;
import java.net.URL;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.JViewport;
import javax.swing.KeyStroke;
import javax.swing.ListModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.JTextComponent;
import javax.swing.text.Position;
import javax.swing.text.View;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import org.dom4j.DocumentException;
import edu.umd.cs.findbugs.BugAnnotation;
import edu.umd.cs.findbugs.BugAnnotationWithSourceLines;
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.BugPattern;
import edu.umd.cs.findbugs.Detector;
import edu.umd.cs.findbugs.DetectorFactoryCollection;
import edu.umd.cs.findbugs.FindBugs;
import edu.umd.cs.findbugs.FindBugsCommandLine;
import edu.umd.cs.findbugs.I18N;
import edu.umd.cs.findbugs.L10N;
import edu.umd.cs.findbugs.MethodAnnotation;
import edu.umd.cs.findbugs.Project;
import edu.umd.cs.findbugs.ShowHelp;
import edu.umd.cs.findbugs.SourceLineAnnotation;
import edu.umd.cs.findbugs.SystemProperties;
import edu.umd.cs.findbugs.annotations.SuppressWarnings;
import edu.umd.cs.findbugs.ba.SourceFile;
import edu.umd.cs.findbugs.ba.SourceFinder;
import edu.umd.cs.findbugs.config.AnalysisFeatureSetting;
import edu.umd.cs.findbugs.config.ProjectFilterSettings;
import edu.umd.cs.findbugs.config.UserPreferences;
import edu.umd.cs.findbugs.config.CommandLine.HelpRequestedException;
/**
* The main GUI frame for FindBugs.
*
* @author David Hovemeyer
*/
public final class FindBugsFrame extends javax.swing.JFrame implements LogSync {
/**
*
*/
private static final int fontSize = 12;
/**
*
*/
private static final Font SOURCE_FONT = new java.awt.Font("Monospaced", 0, fontSize);
private static final Font JTREE_FONT = new java.awt.Font("SansSerif", 0, fontSize);
/**
*
*/
private static final Font LABEL_FONT = new java.awt.Font("Dialog", 1, 2*fontSize);
/**
*
*/
private static final Font BUTTON_FONT = new java.awt.Font("Dialog", 0, fontSize);
private static final long serialVersionUID = 1L;
/* ----------------------------------------------------------------------
* Helper classes
* ---------------------------------------------------------------------- */
static final Color HIGH_PRIORITY_COLOR = new Color(0xff0000);
static final Color NORMAL_PRIORITY_COLOR = new Color(0x9f0000);
static final Color LOW_PRIORITY_COLOR = Color.BLACK;
static final Color EXP_PRIORITY_COLOR = Color.BLACK;
/**
* Tree node type for BugInstances.
* We use this instead of plain DefaultMutableTreeNodes in order to
* get more control over the exact text that is shown in the tree.
*/
private class BugTreeNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = 1L;
private int count;
public BugTreeNode(BugInstance bugInstance) {
super(bugInstance);
count = -1;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
try {
BugInstance bugInstance = (BugInstance) getUserObject();
StringBuilder result = new StringBuilder();
if (count >= 0) {
result.append(count);
result.append(": ");
}
if (bugInstance.isExperimental())
result.append(L10N.getLocalString("msg.exp_txt", "EXP: "));
result.append(fullDescriptionsItem.isSelected() ? bugInstance.getMessage() : bugInstance.toString());
return result.toString();
} catch (Exception e) {
return MessageFormat.format(L10N.getLocalString("msg.errorformatting_txt", "Error formatting message for bug: "), new Object[]{e.toString()});
}
}
}
/**
* Compare BugInstance class names.
* This is useful for grouping bug instances by class.
* Note that all instances with the same class name will compare
* as equal.
*/
private static class BugInstanceClassComparator implements Comparator<BugInstance> {
public int compare(BugInstance lhs, BugInstance rhs) {
return lhs.getPrimaryClass().compareTo(rhs.getPrimaryClass());
}
}
/**
* The instance of BugInstanceClassComparator.
*/
private static final Comparator<BugInstance> bugInstanceClassComparator = new BugInstanceClassComparator();
/**
* Compare BugInstance package names.
* This is useful for grouping bug instances by package.
* Note that all instances with the same package name will compare
* as equal.
*/
private static class BugInstancePackageComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance lhs, BugInstance rhs) {
return lhs.getPrimaryClass().getPackageName().compareTo(rhs.getPrimaryClass().getPackageName());
}
}
/**
* The instance of BugInstancePackageComparator.
*/
private static final Comparator<BugInstance> bugInstancePackageComparator = new BugInstancePackageComparator();
/**
* Compare BugInstance bug types.
* This is useful for grouping bug instances by bug type.
* Note that all instances with the same bug type will compare
* as equal.
*/
private static class BugInstanceTypeComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance lhs, BugInstance rhs) {
String lhsString = lhs.toString();
String rhsString = rhs.toString();
return lhsString.substring(0, lhsString.indexOf(':')).compareTo(rhsString.substring(0, rhsString.indexOf(':')));
}
}
/**
* The instance of BugInstanceTypeComparator.
*/
private static final Comparator<BugInstance> bugInstanceTypeComparator = new BugInstanceTypeComparator();
/**
* Compare BugInstance bug categories.
* This is useful for grouping bug instances by bug category.
* Note that all instances with the same bug category will compare
* as equal.
*/
private static class BugInstanceCategoryComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance lhs, BugInstance rhs) {
return getCategory(lhs).compareTo(getCategory(rhs));
}
private String getCategory(BugInstance warning) {
BugPattern bugPattern = warning.getBugPattern();
if (bugPattern == null) {
if (FindBugs.DEBUG)
System.out.println("Unknown bug pattern for bug type: " + warning.getType());
return "";
} else {
return bugPattern.getCategory();
}
}
}
/**
* The instance of BugInstanceCategoryComparator.
*/
private static final Comparator<BugInstance> bugInstanceCategoryComparator = new BugInstanceCategoryComparator();
/**
* Two-level comparison of bug instances by class name and
* BugInstance natural ordering.
*/
private static class BugInstanceByClassComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance a, BugInstance b) {
int cmp = bugInstanceClassComparator.compare(a, b);
if (cmp != 0)
return cmp;
return a.compareTo(b);
}
}
/**
* The instance of BugInstanceByClassComparator.
*/
private static final Comparator<BugInstance> bugInstanceByClassComparator = new FindBugsFrame.BugInstanceByClassComparator();
/**
* Two-level comparison of bug instances by package and
* BugInstance natural ordering.
*/
private static class BugInstanceByPackageComparator implements Comparator<BugInstance> {
public int compare(BugInstance a, BugInstance b) {
int cmp = bugInstancePackageComparator.compare(a, b);
if (cmp != 0)
return cmp;
return a.compareTo(b);
}
}
/**
* The instance of BugInstanceByPackageComparator.
*/
private static final Comparator<BugInstance> bugInstanceByPackageComparator = new FindBugsFrame.BugInstanceByPackageComparator();
/**
* Two-level comparison of bug instances by bug type and
* BugInstance natural ordering.
*/
private static class BugInstanceByTypeComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance a, BugInstance b) {
int cmp = bugInstanceTypeComparator.compare(a, b);
if (cmp != 0)
return cmp;
return a.compareTo(b);
}
}
/**
* The instance of BugTypeByTypeComparator.
*/
private static final Comparator<BugInstance> bugInstanceByTypeComparator = new FindBugsFrame.BugInstanceByTypeComparator();
/**
* Two-level comparison of bug instances by bug category and
* BugInstance natural ordering.
*/
private static class BugInstanceByCategoryComparator implements Comparator<BugInstance>, Serializable {
private static final long serialVersionUID = 1L;
public int compare(BugInstance a, BugInstance b) {
int cmp = bugInstanceCategoryComparator.compare(a, b);
if (cmp != 0)
return cmp;
return a.compareTo(b);
}
}
/**
* The instance of BugTypeByCategoryComparator.
*/
private static final Comparator<BugInstance> bugInstanceByCategoryComparator = new FindBugsFrame.BugInstanceByCategoryComparator();
/**
* Swing FileFilter class for file selection dialogs for FindBugs project files.
*/
private static class ProjectFileFilter extends FileFilter {
@Override
public boolean accept(File file) {
return file.isDirectory() || file.getName().endsWith(".fb");
}
@Override
public String getDescription() {
return L10N.getLocalString("dlg.findbugsprojects_lbl", "FindBugs projects (*.fb)");
}
}
/**
* The instance of ProjectFileFilter.
*/
private static final FileFilter projectFileFilter = new ProjectFileFilter();
/**
* Swing FileFilter for choosing an auxiliary classpath entry.
* Both Jar files and directories can be chosen.
*/
private static class AuxClasspathEntryFileFilter extends FileFilter {
@Override
public boolean accept(File file) {
return file.isDirectory() || file.getName().endsWith(".jar");
}
@Override
public String getDescription() {
return L10N.getLocalString("dlg.jarsanddirectories_lbl", "Jar files and directories");
}
}
/**
* The instance of AuxClasspathEntryFileFilter.
*/
private static final FileFilter auxClasspathEntryFileFilter = new AuxClasspathEntryFileFilter();
/**
* Swing FileFilter for choosing XML saved bug files.
*/
private static class XMLFileFilter extends FileFilter {
@Override
public boolean accept(File file) {
return file.isDirectory() || file.getName().endsWith(".xml");
}
@Override
public String getDescription() {
return L10N.getLocalString("dlg.xmlsavedbugs_lbl", "XML saved bug files");
}
}
/**
* The instance of XMLFileFilter.
*/
private static final FileFilter xmlFileFilter = new XMLFileFilter();
/**
* Set of archive file extensions.
*/
private static final HashSet<String> archiveExtensionSet = new HashSet<String>();
static {
archiveExtensionSet.add(".jar");
archiveExtensionSet.add(".zip");
archiveExtensionSet.add(".ear");
archiveExtensionSet.add(".war");
archiveExtensionSet.add(".sar");
}
/**
* File filter for choosing archives and directories.
*/
private static class ArchiveAndDirectoryFilter extends FileFilter {
@Override
public boolean accept(File file) {
if (file.isDirectory())
return true;
String fileName = file.getName();
int dot = fileName.lastIndexOf('.');
if (dot < 0)
return false;
String extension = fileName.substring(dot);
return archiveExtensionSet.contains(extension);
}
@Override
public String getDescription() {
return L10N.getLocalString("dlg.javaarchives_lbl", "Java archives (*.jar,*.zip,*.ear,*.war,*.sar)");
}
}
/**
* The instance of ArchiveAndDirectoryFilter.
*/
private static final FileFilter archiveAndDirectoryFilter = new ArchiveAndDirectoryFilter();
/* ----------------------------------------------------------------------
* Constants
* ---------------------------------------------------------------------- */
static final String GROUP_BY_CLASS = "By class";
static final String GROUP_BY_PACKAGE = "By package";
static final String GROUP_BY_BUG_TYPE = "By bug type";
static final String GROUP_BY_BUG_CATEGORY="By bug category";
private static final String[] GROUP_BY_ORDER_LIST = {
GROUP_BY_CLASS, GROUP_BY_PACKAGE, GROUP_BY_BUG_TYPE, GROUP_BY_BUG_CATEGORY
};
/**
* A fudge value required in our hack to get the REAL maximum
* divider location for a JSplitPane. Experience suggests that
* the value "1" would work here, but setting it a little higher
* makes the code a bit more robust.
*/
private static final int DIVIDER_FUDGE = 3;
private static final boolean BUG_COUNT = SystemProperties.getBoolean("findbugs.gui.bugCount");
/* ----------------------------------------------------------------------
* Member fields
* ---------------------------------------------------------------------- */
Component selectedComponent = null;
/* ----------------------------------------------------------------------
* Constructor
* ---------------------------------------------------------------------- */
/**
* Creates new form FindBugsFrame.
*/
public FindBugsFrame() {
UserPreferences prefs = UserPreferences.getUserPreferences();
prefs.read();
String dirProp = SystemProperties.getProperty("user.dir");
if (dirProp != null) {
currentDirectory = new File(dirProp);
}
initComponents();
postInitComponents();
}
/* ----------------------------------------------------------------------
* Component initialization and event handlers
* ---------------------------------------------------------------------- */
/**
* This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
java.awt.GridBagConstraints gridBagConstraints;
priorityButtonGroup = new javax.swing.ButtonGroup();
effortButtonGroup = new javax.swing.ButtonGroup();
//consoleSplitter = new javax.swing.JSplitPane();
viewPanel = new javax.swing.JPanel();
emptyPanel = new javax.swing.JPanel();
reportPanel = new javax.swing.JPanel();
editProjectPanel = new javax.swing.JPanel();
jarFileLabel = new javax.swing.JLabel();
jarNameTextField = new javax.swing.JTextField();
addJarButton = new javax.swing.JButton();
jarFileListLabel = new javax.swing.JLabel();
sourceDirLabel = new javax.swing.JLabel();
srcDirTextField = new javax.swing.JTextField();
addSourceDirButton = new javax.swing.JButton();
sourceDirListLabel = new javax.swing.JLabel();
removeJarButton = new javax.swing.JButton();
removeSrcDirButton = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
browseJarButton = new javax.swing.JButton();
browseSrcDirButton = new javax.swing.JButton();
editProjectLabel = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
findBugsButton = new javax.swing.JButton();
jSeparator4 = new javax.swing.JSeparator();
jarFileListScrollPane = new javax.swing.JScrollPane();
jarFileList = new javax.swing.JList();
sourceDirListScrollPane = new javax.swing.JScrollPane();
sourceDirList = new javax.swing.JList();
classpathEntryLabel = new javax.swing.JLabel();
classpathEntryListLabel = new javax.swing.JLabel();
classpathEntryTextField = new javax.swing.JTextField();
browseClasspathEntryButton = new javax.swing.JButton();
addClasspathEntryButton = new javax.swing.JButton();
removeClasspathEntryButton = new javax.swing.JButton();
classpathEntryListScrollPane = new javax.swing.JScrollPane();
classpathEntryList = new javax.swing.JList();
jSeparator5 = new javax.swing.JSeparator();
sourceUpButton = new javax.swing.JButton();
sourceDownButton = new javax.swing.JButton();
classpathUpButton = new javax.swing.JButton();
classpathDownButton = new javax.swing.JButton();
bugTreePanel = new javax.swing.JPanel();
bugTreeBugDetailsSplitter = new javax.swing.JSplitPane();
groupByTabbedPane = new javax.swing.JTabbedPane();
byClassScrollPane = new javax.swing.JScrollPane();
byClassBugTree = new javax.swing.JTree();
byClassBugTree.setFont(JTREE_FONT);
byPackageScrollPane = new javax.swing.JScrollPane();
byPackageBugTree = new javax.swing.JTree();
byPackageBugTree.setFont(JTREE_FONT);
byBugTypeScrollPane = new javax.swing.JScrollPane();
byBugTypeBugTree = new javax.swing.JTree();
byBugTypeBugTree.setFont(JTREE_FONT);
byBugCategoryScrollPane = new javax.swing.JScrollPane();
byBugCategoryBugTree = new javax.swing.JTree();
byBugCategoryBugTree.setFont(JTREE_FONT);
bySummary = new javax.swing.JScrollPane();
bugSummaryEditorPane = new javax.swing.JEditorPane();
bugDetailsTabbedPane = new javax.swing.JTabbedPane();
bugDescriptionScrollPane = new javax.swing.JScrollPane();
bugDescriptionEditorPane = new javax.swing.JEditorPane();
sourceTextAreaScrollPane = new javax.swing.JScrollPane();
sourceTextArea = new javax.swing.JTextArea();
annotationTextAreaScrollPane = new javax.swing.JScrollPane();
annotationTextArea = new javax.swing.JTextArea();
urlLabel = new javax.swing.JLabel();
jPanel1 = new javax.swing.JPanel();
logoLabel = new javax.swing.JLabel();
growBoxSpacer = new javax.swing.JLabel();
theMenuBar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
newProjectItem = new javax.swing.JMenuItem();
openProjectItem = new javax.swing.JMenuItem();
recentProjectsMenu = new javax.swing.JMenu();
jSeparator9 = new javax.swing.JSeparator();
closeProjectItem = new javax.swing.JMenuItem();
saveProjectItem = new javax.swing.JMenuItem();
saveProjectAsItem = new javax.swing.JMenuItem();
reloadProjectItem = new javax.swing.JMenuItem();
jSeparator3 = new javax.swing.JSeparator();
loadBugsItem = new javax.swing.JMenuItem();
saveBugsItem = new javax.swing.JMenuItem();
jSeparator6 = new javax.swing.JSeparator();
exitItem = new javax.swing.JMenuItem();
editMenu = new javax.swing.JMenu();
cutItem = new javax.swing.JMenuItem();
copyItem = new javax.swing.JMenuItem();
pasteItem = new javax.swing.JMenuItem();
jSeparator10 = new javax.swing.JSeparator();
selectAllItem = new javax.swing.JMenuItem();
viewMenu = new javax.swing.JMenu();
viewBugDetailsItem = new javax.swing.JCheckBoxMenuItem();
fullDescriptionsItem = new javax.swing.JCheckBoxMenuItem();
jSeparator7 = new javax.swing.JSeparator();
filterWarningsMenu = new javax.swing.JMenu();
expPriorityButton = new javax.swing.JRadioButtonMenuItem();
lowPriorityButton = new javax.swing.JRadioButtonMenuItem();
mediumPriorityButton = new javax.swing.JRadioButtonMenuItem();
highPriorityButton = new javax.swing.JRadioButtonMenuItem();
jSeparator11 = new javax.swing.JSeparator();
jSeparator8 = new javax.swing.JSeparator();
viewProjectItem = new javax.swing.JRadioButtonMenuItem();
viewBugsItem = new javax.swing.JRadioButtonMenuItem();
settingsMenu = new javax.swing.JMenu();
configureDetectorsItem = new javax.swing.JMenuItem();
effortMenu = new javax.swing.JMenu();
minEffortItem = new javax.swing.JCheckBoxMenuItem();
normalEffortItem = new javax.swing.JCheckBoxMenuItem();
maxEffortItem = new javax.swing.JCheckBoxMenuItem();
helpMenu = new javax.swing.JMenu();
aboutItem = new javax.swing.JMenuItem();
getContentPane().setLayout(new java.awt.GridBagLayout());
addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
@Override
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
viewPanel.setLayout(new java.awt.CardLayout());
viewPanel.add(emptyPanel, "EmptyPanel");
viewPanel.add(reportPanel, "ReportPanel");
editProjectPanel.setLayout(new java.awt.GridBagLayout());
jarFileLabel.setFont(BUTTON_FONT);
jarFileLabel.setText("Archive or directory:");
jarFileLabel.setText(L10N.getLocalString("dlg.jarfile_lbl", "Archive or Directory:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(jarFileLabel, gridBagConstraints);
jarNameTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jarNameTextFieldActionPerformed(evt);
}
});
jarNameTextField.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 0);
editProjectPanel.add(jarNameTextField, gridBagConstraints);
addJarButton.setFont(BUTTON_FONT);
addJarButton.setText("Add");
addJarButton.setMaximumSize(new java.awt.Dimension(90, 25));
addJarButton.setMinimumSize(new java.awt.Dimension(90, 25));
addJarButton.setPreferredSize(new java.awt.Dimension(90, 25));
addJarButton.setText(L10N.getLocalString("dlg.add_btn", "Add"));
addJarButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addJarButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(addJarButton, gridBagConstraints);
jarFileListLabel.setFont(BUTTON_FONT);
jarFileListLabel.setText("Archives/directories:");
jarFileListLabel.setText(L10N.getLocalString("dlg.jarlist_lbl", "Archives/Directories:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(jarFileListLabel, gridBagConstraints);
sourceDirLabel.setFont(BUTTON_FONT);
sourceDirLabel.setText("Source directory:");
sourceDirLabel.setText(L10N.getLocalString("dlg.srcfile_lbl", "Source directory:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 8;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(sourceDirLabel, gridBagConstraints);
srcDirTextField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
srcDirTextFieldActionPerformed(evt);
}
});
srcDirTextField.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 8;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 0);
editProjectPanel.add(srcDirTextField, gridBagConstraints);
addSourceDirButton.setFont(BUTTON_FONT);
addSourceDirButton.setText("Add");
addSourceDirButton.setMaximumSize(new java.awt.Dimension(90, 25));
addSourceDirButton.setMinimumSize(new java.awt.Dimension(90, 25));
addSourceDirButton.setPreferredSize(new java.awt.Dimension(90, 25));
addSourceDirButton.setText(L10N.getLocalString("dlg.add_btn", "Add"));
addSourceDirButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addSourceDirButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 8;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(addSourceDirButton, gridBagConstraints);
sourceDirListLabel.setFont(BUTTON_FONT);
sourceDirListLabel.setText("Source directories:");
sourceDirListLabel.setText(L10N.getLocalString("dlg.srclist_lbl", "Source directories:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 9;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(sourceDirListLabel, gridBagConstraints);
removeJarButton.setFont(BUTTON_FONT);
removeJarButton.setText("Remove");
removeJarButton.setMaximumSize(new java.awt.Dimension(90, 25));
removeJarButton.setMinimumSize(new java.awt.Dimension(90, 25));
removeJarButton.setPreferredSize(new java.awt.Dimension(90, 25));
removeJarButton.setText(L10N.getLocalString("dlg.remove_btn", "Remove"));
removeJarButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeJarButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(removeJarButton, gridBagConstraints);
removeSrcDirButton.setFont(BUTTON_FONT);
removeSrcDirButton.setText("Remove");
removeSrcDirButton.setMaximumSize(new java.awt.Dimension(90, 25));
removeSrcDirButton.setMinimumSize(new java.awt.Dimension(90, 25));
removeSrcDirButton.setPreferredSize(new java.awt.Dimension(90, 25));
removeSrcDirButton.setText(L10N.getLocalString("dlg.remove_btn", "Remove"));
removeSrcDirButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeSrcDirButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 9;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(removeSrcDirButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
editProjectPanel.add(jSeparator1, gridBagConstraints);
browseJarButton.setFont(BUTTON_FONT);
browseJarButton.setText("Browse");
browseJarButton.setMaximumSize(new java.awt.Dimension(90, 25));
browseJarButton.setMinimumSize(new java.awt.Dimension(90, 25));
browseJarButton.setPreferredSize(new java.awt.Dimension(90, 25));
browseJarButton.setText(L10N.getLocalString("dlg.browse_btn", "Browse..."));
browseJarButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseJarButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(browseJarButton, gridBagConstraints);
browseSrcDirButton.setFont(BUTTON_FONT);
browseSrcDirButton.setText("Browse");
browseSrcDirButton.setMaximumSize(new java.awt.Dimension(90, 25));
browseSrcDirButton.setMinimumSize(new java.awt.Dimension(90, 25));
browseSrcDirButton.setPreferredSize(new java.awt.Dimension(90, 25));
browseSrcDirButton.setText(L10N.getLocalString("dlg.browse_btn", "Browse..."));
browseSrcDirButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseSrcDirButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 8;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(browseSrcDirButton, gridBagConstraints);
editProjectLabel.setBackground(new java.awt.Color(0, 0, 204));
editProjectLabel.setFont(LABEL_FONT);
editProjectLabel.setForeground(new java.awt.Color(255, 255, 255));
editProjectLabel.setText("Project");
editProjectLabel.setOpaque(true);
editProjectLabel.setText(L10N.getLocalString("dlg.project_lbl", "Project"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
editProjectPanel.add(editProjectLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 7;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
editProjectPanel.add(jSeparator2, gridBagConstraints);
findBugsButton.setMnemonic('B');
findBugsButton.setText("Find Bugs!");
findBugsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
findBugsButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 21;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
editProjectPanel.add(findBugsButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 14;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
editProjectPanel.add(jSeparator4, gridBagConstraints);
jarFileListScrollPane.setPreferredSize(new java.awt.Dimension(259, 1));
jarFileList.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
jarFileList.setFont(BUTTON_FONT);
disableEditKeyBindings(jarFileList);
jarFileList.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
jarFileListScrollPane.setViewportView(jarFileList);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weighty = 0.4;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(jarFileListScrollPane, gridBagConstraints);
sourceDirListScrollPane.setPreferredSize(new java.awt.Dimension(259, 1));
sourceDirList.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
sourceDirList.setFont(BUTTON_FONT);
disableEditKeyBindings(sourceDirList);
sourceDirList.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
sourceDirListScrollPane.setViewportView(sourceDirList);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 9;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.gridheight = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weighty = 0.1;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(sourceDirListScrollPane, gridBagConstraints);
classpathEntryLabel.setFont(BUTTON_FONT);
classpathEntryLabel.setText("Classpath entry:");
classpathEntryLabel.setText(L10N.getLocalString("dlg.classpathfile_lbl", "Classpath entry:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 15;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3);
editProjectPanel.add(classpathEntryLabel, gridBagConstraints);
classpathEntryListLabel.setFont(BUTTON_FONT);
classpathEntryListLabel.setText("Classpath entries:");
classpathEntryListLabel.setText(L10N.getLocalString("dlg.classpathlist_lbl", "Classpath entries:"));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 16;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3);
editProjectPanel.add(classpathEntryListLabel, gridBagConstraints);
classpathEntryTextField.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 15;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 0);
editProjectPanel.add(classpathEntryTextField, gridBagConstraints);
browseClasspathEntryButton.setFont(BUTTON_FONT);
browseClasspathEntryButton.setText("Browse");
browseClasspathEntryButton.setMaximumSize(new java.awt.Dimension(90, 25));
browseClasspathEntryButton.setMinimumSize(new java.awt.Dimension(90, 25));
browseClasspathEntryButton.setPreferredSize(new java.awt.Dimension(90, 25));
browseClasspathEntryButton.setText(L10N.getLocalString("dlg.browse_btn", "Browse..."));
browseClasspathEntryButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseClasspathEntryButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 15;
editProjectPanel.add(browseClasspathEntryButton, gridBagConstraints);
addClasspathEntryButton.setFont(BUTTON_FONT);
addClasspathEntryButton.setText("Add");
addClasspathEntryButton.setMaximumSize(new java.awt.Dimension(90, 25));
addClasspathEntryButton.setMinimumSize(new java.awt.Dimension(90, 25));
addClasspathEntryButton.setPreferredSize(new java.awt.Dimension(90, 25));
addClasspathEntryButton.setText(L10N.getLocalString("dlg.add_btn", "Add"));
addClasspathEntryButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addClasspathEntryButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 15;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 0);
editProjectPanel.add(addClasspathEntryButton, gridBagConstraints);
removeClasspathEntryButton.setFont(BUTTON_FONT);
removeClasspathEntryButton.setText("Remove");
removeClasspathEntryButton.setMaximumSize(new java.awt.Dimension(90, 25));
removeClasspathEntryButton.setMinimumSize(new java.awt.Dimension(90, 25));
removeClasspathEntryButton.setPreferredSize(new java.awt.Dimension(90, 25));
removeClasspathEntryButton.setText(L10N.getLocalString("dlg.remove_btn", "Remove"));
removeClasspathEntryButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeClasspathEntryButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 16;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 0);
editProjectPanel.add(removeClasspathEntryButton, gridBagConstraints);
classpathEntryListScrollPane.setPreferredSize(new java.awt.Dimension(259, 1));
classpathEntryList.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED));
classpathEntryList.setFont(BUTTON_FONT);
disableEditKeyBindings(classpathEntryList);
classpathEntryList.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
classpathEntryListScrollPane.setViewportView(classpathEntryList);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 16;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.gridheight = 3;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weighty = 0.1;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
editProjectPanel.add(classpathEntryListScrollPane, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 20;
gridBagConstraints.gridwidth = 4;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0);
editProjectPanel.add(jSeparator5, gridBagConstraints);
sourceUpButton.setFont(BUTTON_FONT);
sourceUpButton.setText("Up");
sourceUpButton.setMaximumSize(new java.awt.Dimension(90, 25));
sourceUpButton.setMinimumSize(new java.awt.Dimension(90, 25));
sourceUpButton.setPreferredSize(new java.awt.Dimension(90, 25));
sourceUpButton.setText(L10N.getLocalString("dlg.up_btn", "Up"));
sourceUpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sourceUpButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 10;
gridBagConstraints.weighty = 0.2;
editProjectPanel.add(sourceUpButton, gridBagConstraints);
sourceDownButton.setFont(BUTTON_FONT);
sourceDownButton.setText("Down");
sourceDownButton.setMaximumSize(new java.awt.Dimension(90, 25));
sourceDownButton.setMinimumSize(new java.awt.Dimension(90, 25));
sourceDownButton.setPreferredSize(new java.awt.Dimension(90, 25));
sourceDownButton.setText(L10N.getLocalString("dlg.down_btn", "Down"));
sourceDownButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
sourceDownButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 11;
editProjectPanel.add(sourceDownButton, gridBagConstraints);
classpathUpButton.setFont(BUTTON_FONT);
classpathUpButton.setText("Up");
classpathUpButton.setMaximumSize(new java.awt.Dimension(90, 25));
classpathUpButton.setMinimumSize(new java.awt.Dimension(90, 25));
classpathUpButton.setPreferredSize(new java.awt.Dimension(90, 25));
classpathUpButton.setText(L10N.getLocalString("dlg.up_btn", "Up"));
classpathUpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
classpathUpButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 17;
gridBagConstraints.weighty = 0.2;
editProjectPanel.add(classpathUpButton, gridBagConstraints);
classpathDownButton.setFont(BUTTON_FONT);
classpathDownButton.setText("Down");
classpathDownButton.setMaximumSize(new java.awt.Dimension(90, 25));
classpathDownButton.setMinimumSize(new java.awt.Dimension(90, 25));
classpathDownButton.setPreferredSize(new java.awt.Dimension(90, 25));
classpathDownButton.setText(L10N.getLocalString("dlg.down_btn", "Down"));
classpathDownButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
classpathDownButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 18;
editProjectPanel.add(classpathDownButton, gridBagConstraints);
viewPanel.add(editProjectPanel, "EditProjectPanel");
bugTreePanel.setLayout(new java.awt.GridBagLayout());
bugTreeBugDetailsSplitter.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
bugTreeBugDetailsSplitter.setResizeWeight(1.0);
bugTreeBugDetailsSplitter.setOneTouchExpandable(true);
bugTreeBugDetailsSplitter.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
bugTreeBugDetailsSplitterPropertyChange(evt);
}
});
byClassBugTree.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
byClassScrollPane.setViewportView(byClassBugTree);
groupByTabbedPane.addTab("By Class", byClassScrollPane);
byPackageBugTree.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
byPackageScrollPane.setViewportView(byPackageBugTree);
groupByTabbedPane.addTab("By Package", byPackageScrollPane);
byBugTypeBugTree.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
byBugTypeScrollPane.setViewportView(byBugTypeBugTree);
groupByTabbedPane.addTab("By Bug Type", byBugTypeScrollPane);
byBugCategoryBugTree.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
byBugCategoryScrollPane.setViewportView(byBugCategoryBugTree);
groupByTabbedPane.addTab("By Category Type", byBugCategoryScrollPane);
bugSummaryEditorPane.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
bySummary.setViewportView(bugSummaryEditorPane);
groupByTabbedPane.addTab("Summary", bySummary);
bugTreeBugDetailsSplitter.setTopComponent(groupByTabbedPane);
bugDescriptionEditorPane.setEditable(false);
bugDescriptionEditorPane.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
bugDescriptionScrollPane.setViewportView(bugDescriptionEditorPane);
bugDetailsTabbedPane.addTab("Details", bugDescriptionScrollPane);
sourceTextAreaScrollPane.setMinimumSize(new java.awt.Dimension(22, 180));
sourceTextAreaScrollPane.setPreferredSize(new java.awt.Dimension(0, 100));
sourceTextArea.setEditable(false);
sourceTextArea.setFont(SOURCE_FONT);
sourceTextArea.setEnabled(false);
sourceTextArea.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
sourceTextAreaScrollPane.setViewportView(sourceTextArea);
sourceLineNumberer = new LineNumberer(sourceTextArea);
sourceLineNumberer.setBackground(Color.WHITE);
sourceTextAreaScrollPane.setRowHeaderView(sourceLineNumberer);
bugDetailsTabbedPane.addTab("Source code", sourceTextAreaScrollPane);
annotationTextArea.addFocusListener(new java.awt.event.FocusAdapter() {
@Override
public void focusGained(java.awt.event.FocusEvent evt) {
focusGainedHandler(evt);
}
});
annotationTextAreaScrollPane.setViewportView(annotationTextArea);
bugDetailsTabbedPane.addTab("Annotations", annotationTextAreaScrollPane);
bugTreeBugDetailsSplitter.setBottomComponent(bugDetailsTabbedPane);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
bugTreePanel.add(bugTreeBugDetailsSplitter, gridBagConstraints);
viewPanel.add(bugTreePanel, "BugTree");
{
equalizeControls( new JComponent[]
{
addJarButton,
addSourceDirButton,
addClasspathEntryButton,
removeJarButton,
removeSrcDirButton,
removeClasspathEntryButton,
browseJarButton,
browseSrcDirButton,
browseClasspathEntryButton,
sourceUpButton,
sourceDownButton,
classpathUpButton,
classpathDownButton
});
groupByTabbedPane.setTitleAt(0, L10N.getLocalString( "dlg.byclass_tab", "By Class"));
groupByTabbedPane.setTitleAt(1, L10N.getLocalString( "dlg.bypackage_tab", "By Package"));
groupByTabbedPane.setTitleAt(2, L10N.getLocalString( "dlg.bybugtype_tab", "By Bug Type"));
groupByTabbedPane.setTitleAt(3, L10N.getLocalString( "dlg.bybugcategory_tab", "By Bug Category"));
groupByTabbedPane.setTitleAt(4, L10N.getLocalString( "dlg.summary_tab", "Summary"));
bugDetailsTabbedPane.setTitleAt(0, L10N.getLocalString( "dlg.details_tab", "Details"));
bugDetailsTabbedPane.setTitleAt(1, L10N.getLocalString( "dlg.sourcecode_tab", "Source Code"));
bugDetailsTabbedPane.setTitleAt(2, L10N.getLocalString( "dlg.annotations_tab", "Annotations"));
}
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
getContentPane().add(viewPanel, gridBagConstraints);
urlLabel.setFont(BUTTON_FONT);
urlLabel.setText("FindBugs - http://findbugs.sourceforge.net/");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 0);
getContentPane().add(urlLabel, gridBagConstraints);
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
jPanel1.add(logoLabel);
growBoxSpacer.setMaximumSize(new java.awt.Dimension(16, 16));
jPanel1.add(growBoxSpacer);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST;
gridBagConstraints.insets = new java.awt.Insets(2, 0, 2, 2);
getContentPane().add(jPanel1, gridBagConstraints);
theMenuBar.setFont(BUTTON_FONT);
fileMenu.setText("File");
fileMenu.setFont(BUTTON_FONT);
localiseButton(fileMenu, "menu.file_menu", "&File", true);
fileMenu.addMenuListener(new javax.swing.event.MenuListener() {
public void menuCanceled(javax.swing.event.MenuEvent evt) {
}
public void menuDeselected(javax.swing.event.MenuEvent evt) {
}
public void menuSelected(javax.swing.event.MenuEvent evt) {
fileMenuMenuSelected(evt);
}
});
newProjectItem.setFont(BUTTON_FONT);
newProjectItem.setText("New Project");
localiseButton(newProjectItem, "menu.new_item", "&New Project", true);
newProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newProjectItemActionPerformed(evt);
}
});
fileMenu.add(newProjectItem);
openProjectItem.setFont(BUTTON_FONT);
openProjectItem.setText("Open Project...");
localiseButton(openProjectItem, "menu.open_item", "&Open Project...", true);
openProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openProjectItemActionPerformed(evt);
}
});
fileMenu.add(openProjectItem);
recentProjectsMenu.setText("Recent Projects");
recentProjectsMenu.setFont(BUTTON_FONT);
localiseButton(recentProjectsMenu, "menu.recent_menu", "R&ecent Projects", true);
rebuildRecentProjectsMenu();
fileMenu.add(recentProjectsMenu);
fileMenu.add(jSeparator9);
closeProjectItem.setFont(BUTTON_FONT);
closeProjectItem.setText("Close Project");
localiseButton(closeProjectItem, "menu.close_item", "&Close Project", true);
closeProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeProjectItemActionPerformed(evt);
}
});
fileMenu.add(closeProjectItem);
saveProjectItem.setFont(BUTTON_FONT);
saveProjectItem.setText("Save Project");
localiseButton(saveProjectItem, "menu.save_item", "&Save Project", true);
saveProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveProjectItemActionPerformed(evt);
}
});
fileMenu.add(saveProjectItem);
saveProjectAsItem.setFont(BUTTON_FONT);
saveProjectAsItem.setText("Save Project As...");
localiseButton(saveProjectAsItem, "menu.saveas_item", "Save Project &As...", true);
saveProjectAsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveProjectAsItemActionPerformed(evt);
}
});
fileMenu.add(saveProjectAsItem);
reloadProjectItem.setFont(BUTTON_FONT);
reloadProjectItem.setText("Reload Project");
localiseButton(reloadProjectItem, "menu.reload_item", "&Reload Project", true);
reloadProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
reloadProjectItemActionPerformed(evt);
}
});
fileMenu.add(reloadProjectItem);
fileMenu.add(jSeparator3);
loadBugsItem.setFont(BUTTON_FONT);
loadBugsItem.setText("Load Bugs...");
localiseButton(loadBugsItem, "menu.loadbugs_item", "&Load Bugs...", true);
loadBugsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
loadBugsItemActionPerformed(evt);
}
});
fileMenu.add(loadBugsItem);
saveBugsItem.setFont(BUTTON_FONT);
saveBugsItem.setText("Save Bugs");
localiseButton(saveBugsItem, "menu.savebugs_item", "Save &Bugs...", true);
saveBugsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveBugsItemActionPerformed(evt);
}
});
fileMenu.add(saveBugsItem);
fileMenu.add(jSeparator6);
exitItem.setFont(BUTTON_FONT);
exitItem.setText("Exit");
localiseButton(exitItem, "menu.exit_item", "E&xit", true);
exitItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitItemActionPerformed(evt);
}
});
fileMenu.add(exitItem);
theMenuBar.add(fileMenu);
editMenu.setText("Edit");
editMenu.setFont(BUTTON_FONT);
editMenu.setEnabled(false);
localiseButton(editMenu, "menu.edit_menu", "&Edit", true);
cutItem.setFont(BUTTON_FONT);
cutItem.setText("Cut");
localiseButton(cutItem, "menu.cut_item", "Cut", true);
cutItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cutActionPerformed(evt);
}
});
editMenu.add(cutItem);
copyItem.setFont(BUTTON_FONT);
copyItem.setText("Copy");
localiseButton(copyItem, "menu.copy_item", "Copy", true);
copyItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyActionPerformed(evt);
}
});
editMenu.add(copyItem);
pasteItem.setFont(BUTTON_FONT);
pasteItem.setText("Paste");
localiseButton(pasteItem, "menu.paste_item", "Paste", true);
pasteItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pasteActionPerformed(evt);
}
});
editMenu.add(pasteItem);
editMenu.add(jSeparator10);
selectAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
selectAllItem.setFont(BUTTON_FONT);
selectAllItem.setText("Select All");
localiseButton(selectAllItem, "menu.selectall_item", "Select &All", true);
selectAllItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
selectAllActionPerformed(evt);
}
});
editMenu.add(selectAllItem);
theMenuBar.add(editMenu);
viewMenu.setText("View");
viewMenu.setFont(BUTTON_FONT);
localiseButton(viewMenu, "menu.view_menu", "&View", true);
viewMenu.addMenuListener(new javax.swing.event.MenuListener() {
public void menuCanceled(javax.swing.event.MenuEvent evt) {
}
public void menuDeselected(javax.swing.event.MenuEvent evt) {
}
public void menuSelected(javax.swing.event.MenuEvent evt) {
viewMenuMenuSelected(evt);
}
});
viewBugDetailsItem.setFont(BUTTON_FONT);
viewBugDetailsItem.setSelected(true);
viewBugDetailsItem.setText("Bug Details");
localiseButton(viewBugDetailsItem, "menu.bugdetails_item", "Bug &Details", true);
viewBugDetailsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewBugDetailsItemActionPerformed(evt);
}
});
viewMenu.add(viewBugDetailsItem);
fullDescriptionsItem.setFont(BUTTON_FONT);
fullDescriptionsItem.setSelected(true);
fullDescriptionsItem.setText("Full Descriptions");
localiseButton(fullDescriptionsItem, "menu.fulldescriptions_item", "&Full Descriptions", true);
fullDescriptionsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
fullDescriptionsItemActionPerformed(evt);
}
});
viewMenu.add(fullDescriptionsItem);
viewMenu.add(jSeparator7);
filterWarningsMenu.setText("Filter Warnings");
filterWarningsMenu.setFont(BUTTON_FONT);
localiseButton(filterWarningsMenu, "menu.filterwarnings_menu", "Filter &Warnings", true);
expPriorityButton.setFont(BUTTON_FONT);
expPriorityButton.setText("Experimental Priority");
priorityButtonGroup.add(expPriorityButton);
localiseButton(expPriorityButton, "menu.exppriority_item", "&Experimental Priority", true);
expPriorityButton.setSelected(getPriorityThreshold() == Detector.EXP_PRIORITY);
expPriorityButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
expPriorityButtonActionPerformed(evt);
}
});
filterWarningsMenu.add(expPriorityButton);
lowPriorityButton.setFont(BUTTON_FONT);
lowPriorityButton.setText("Low Priority");
priorityButtonGroup.add(lowPriorityButton);
localiseButton(lowPriorityButton, "menu.lowpriority_item", "&Low Priority", true);
lowPriorityButton.setSelected(getPriorityThreshold() == Detector.LOW_PRIORITY);
lowPriorityButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lowPriorityButtonActionPerformed(evt);
}
});
filterWarningsMenu.add(lowPriorityButton);
mediumPriorityButton.setFont(BUTTON_FONT);
mediumPriorityButton.setText("Medium Priority");
priorityButtonGroup.add(mediumPriorityButton);
localiseButton(mediumPriorityButton, "menu.mediumpriority_item", "&Medium Priority", true);
mediumPriorityButton.setSelected(getPriorityThreshold() == Detector.NORMAL_PRIORITY);
mediumPriorityButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mediumPriorityButtonActionPerformed(evt);
}
});
filterWarningsMenu.add(mediumPriorityButton);
highPriorityButton.setFont(BUTTON_FONT);
highPriorityButton.setText("High Priority");
priorityButtonGroup.add(highPriorityButton);
localiseButton(highPriorityButton, "menu.highpriority_item", "&High Priority", true);
highPriorityButton.setSelected(getPriorityThreshold() == Detector.HIGH_PRIORITY);
highPriorityButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
highPriorityButtonActionPerformed(evt);
}
});
filterWarningsMenu.add(highPriorityButton);
filterWarningsMenu.add(jSeparator11);
viewMenu.add(filterWarningsMenu);
ButtonGroup bg = new ButtonGroup();
bg.add(expPriorityButton);
bg.add(lowPriorityButton);
bg.add(mediumPriorityButton);
bg.add(highPriorityButton);
viewMenu.add(jSeparator8);
viewProjectItem.setFont(BUTTON_FONT);
viewProjectItem.setText("View Project Details");
viewProjectItem.setEnabled(false);
localiseButton(viewProjectItem, "menu.viewprojectdetails_item", "View Project Details", true);
viewProjectItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewProjectItemActionPerformed(evt);
}
});
viewMenu.add(viewProjectItem);
viewBugsItem.setFont(BUTTON_FONT);
viewBugsItem.setText("View Bugs");
viewBugsItem.setEnabled(false);
localiseButton(viewBugsItem, "menu.viewbugs_item", "View Bugs", true);
viewBugsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
viewBugsItemActionPerformed(evt);
}
});
viewMenu.add(viewBugsItem);
theMenuBar.add(viewMenu);
settingsMenu.setText("Settings");
settingsMenu.setFont(BUTTON_FONT);
localiseButton(settingsMenu, "menu.settings_menu", "&Settings", true);
settingsMenu.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
settingsMenuActionPerformed(evt);
}
});
configureDetectorsItem.setFont(BUTTON_FONT);
configureDetectorsItem.setText("Configure Detectors...");
localiseButton(configureDetectorsItem, "menu.configure_item", "&Configure Detectors...", true);
configureDetectorsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
configureDetectorsItemActionPerformed(evt);
}
});
settingsMenu.add(configureDetectorsItem);
effortMenu.setText("Effort");
effortMenu.setFont(BUTTON_FONT);
localiseButton(effortMenu, "menu.effort_menu", "Effort", true);
minEffortItem.setFont(BUTTON_FONT);
minEffortItem.setText("Minimum");
effortButtonGroup.add(minEffortItem);
localiseButton(minEffortItem, "menu.mineffort_item", "&Minimum", true);
minEffortItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
minEffortItemActionPerformed(evt);
}
});
effortMenu.add(minEffortItem);
normalEffortItem.setFont(BUTTON_FONT);
normalEffortItem.setSelected(true);
normalEffortItem.setText("Normal");
effortButtonGroup.add(normalEffortItem);
localiseButton(normalEffortItem, "menu.normaleffort_item", "&Normal", true);
normalEffortItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
normalEffortItemActionPerformed(evt);
}
});
effortMenu.add(normalEffortItem);
maxEffortItem.setFont(BUTTON_FONT);
maxEffortItem.setText("Maximum");
effortButtonGroup.add(maxEffortItem);
localiseButton(maxEffortItem, "menu.maxeffort_item", "&Maximum", true);
maxEffortItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
maxEffortItemActionPerformed(evt);
}
});
effortMenu.add(maxEffortItem);
settingsMenu.add(effortMenu);
theMenuBar.add(settingsMenu);
helpMenu.setText("Help");
helpMenu.setFont(BUTTON_FONT);
localiseButton(helpMenu, "menu.help_menu", "&Help", true);
aboutItem.setFont(BUTTON_FONT);
aboutItem.setText("About...");
localiseButton(aboutItem, "menu.about_item", "&About", true);
aboutItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
aboutItemActionPerformed(evt);
}
});
helpMenu.add(aboutItem);
theMenuBar.add(helpMenu);
setJMenuBar(theMenuBar);
pack();
}//GEN-END:initComponents
private void maxEffortItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maxEffortItemActionPerformed
settingList = FindBugs.MAX_EFFORT;
}//GEN-LAST:event_maxEffortItemActionPerformed
private void normalEffortItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_normalEffortItemActionPerformed
settingList = FindBugs.DEFAULT_EFFORT;
}//GEN-LAST:event_normalEffortItemActionPerformed
private void minEffortItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_minEffortItemActionPerformed
settingList = FindBugs.MIN_EFFORT;
}//GEN-LAST:event_minEffortItemActionPerformed
private void settingsMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_settingsMenuActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_settingsMenuActionPerformed
private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
if (SystemProperties.getBoolean("findbugs.noSummary")) {
groupByTabbedPane.remove(bySummary);
}
}//GEN-LAST:event_formWindowOpened
private void selectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllActionPerformed
if (selectedComponent == null)
return;
if (selectedComponent instanceof JTextComponent)
((JTextComponent)selectedComponent).selectAll();
else if (selectedComponent instanceof JList) {
JList list = (JList)selectedComponent;
list.setSelectionInterval(0, list.getModel().getSize()-1);
}
}//GEN-LAST:event_selectAllActionPerformed
private void disableEditKeyBindings(JList list) {
list.getInputMap().put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK), "none");
list.getInputMap().put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK), "none");
list.getInputMap().put(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK), "none");
}
private String buildSelectPath(JList list) {
StringBuilder path = new StringBuilder();
int[] indices = list.getSelectedIndices();
String separatorStr = SystemProperties.getProperty("path.separator");
String sep = "";
ListModel m = list.getModel();
for (int indice : indices) {
path.append(sep);
sep = separatorStr;
path.append(m.getElementAt(indice));
}
return path.toString();
}
private void pasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteActionPerformed
if (selectedComponent == null)
return;
if (selectedComponent instanceof JTextComponent)
((JTextComponent)selectedComponent).paste();
else if (selectedComponent instanceof JList) {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable transfer = cb.getContents(this);
if (transfer.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
String path = (String)transfer.getTransferData(DataFlavor.stringFlavor);
if (selectedComponent == jarFileList) {
jarNameTextField.setText(path);
addJarButtonActionPerformed(evt);
}
else if (selectedComponent == sourceDirList) {
srcDirTextField.setText(path);
this.addSourceDirButtonActionPerformed(evt);
}
else if (selectedComponent == classpathEntryList) {
classpathEntryTextField.setText(path);
addClasspathEntryButtonActionPerformed(evt);
}
} catch (Exception e) {
}
}
}
}//GEN-LAST:event_pasteActionPerformed
private void copyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyActionPerformed
if (selectedComponent == null)
return;
if (selectedComponent instanceof JTextComponent)
((JTextComponent)selectedComponent).copy();
else if (selectedComponent instanceof JTree) {
TreePath path = ((JTree)selectedComponent).getSelectionPath();
StringSelection data = new StringSelection(path.getLastPathComponent().toString());
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
cb.setContents(data, data);
}
else if (selectedComponent instanceof JList) {
StringSelection path = new StringSelection(buildSelectPath((JList)selectedComponent));
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
cb.setContents(path, path);
}
}//GEN-LAST:event_copyActionPerformed
private void cutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cutActionPerformed
if (selectedComponent == null)
return;
if (selectedComponent instanceof JTextComponent)
((JTextComponent)selectedComponent).cut();
else if (selectedComponent instanceof JList) {
StringSelection path = new StringSelection(buildSelectPath((JList)selectedComponent));
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
cb.setContents(path, path);
if (selectedComponent == jarFileList)
removeJarButtonActionPerformed(evt);
else if (selectedComponent == sourceDirList)
removeSrcDirButtonActionPerformed(evt);
else if (selectedComponent == classpathEntryList)
removeClasspathEntryButtonActionPerformed(evt);
}
}//GEN-LAST:event_cutActionPerformed
private void focusGainedHandler(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_focusGainedHandler
Component old = evt.getOppositeComponent();
if (old instanceof JList)
((JList) old).clearSelection();
selectedComponent = evt.getComponent();
ableEditMenu();
}//GEN-LAST:event_focusGainedHandler
private void classpathUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_classpathUpButtonActionPerformed
if (moveEntriesUp(classpathEntryList))
resyncAuxClasspathEntries();
}//GEN-LAST:event_classpathUpButtonActionPerformed
private void sourceDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sourceDownButtonActionPerformed
if (moveEntriesDown(sourceDirList))
resyncSourceEntries();
}//GEN-LAST:event_sourceDownButtonActionPerformed
private void sourceUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sourceUpButtonActionPerformed
if (moveEntriesUp(sourceDirList))
resyncSourceEntries();
}//GEN-LAST:event_sourceUpButtonActionPerformed
private void classpathDownButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_classpathDownButtonActionPerformed
if (moveEntriesDown(classpathEntryList))
resyncAuxClasspathEntries();
}//GEN-LAST:event_classpathDownButtonActionPerformed
private void viewBugsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewBugsItemActionPerformed
setView("BugTree");
}//GEN-LAST:event_viewBugsItemActionPerformed
private void viewProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewProjectItemActionPerformed
setView("EditProjectPanel");
}//GEN-LAST:event_viewProjectItemActionPerformed
private void highPriorityButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_highPriorityButtonActionPerformed
setPriorityThreshold(Detector.HIGH_PRIORITY);
}//GEN-LAST:event_highPriorityButtonActionPerformed
private void mediumPriorityButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mediumPriorityButtonActionPerformed
setPriorityThreshold(Detector.NORMAL_PRIORITY);
}//GEN-LAST:event_mediumPriorityButtonActionPerformed
private void lowPriorityButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_lowPriorityButtonActionPerformed
setPriorityThreshold(Detector.LOW_PRIORITY);
}//GEN-LAST:event_lowPriorityButtonActionPerformed
private void expPriorityButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_expPriorityButtonActionPerformed
setPriorityThreshold(Detector.EXP_PRIORITY);
}//GEN-LAST:event_expPriorityButtonActionPerformed
private void saveBugsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveBugsItemActionPerformed
try {
if (currentAnalysisRun == null) {
logger.logMessage(Logger.ERROR, "No bugs are loaded!");
return;
}
JFileChooser chooser = createFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setFileFilter(xmlFileFilter);
int result = chooseFile(chooser, L10N.getLocalString("dlg.savebugs_ttl", "Save Bugs"));
if (result != JFileChooser.CANCEL_OPTION) {
// Make sure current annotation text is up to date with its
// corresponding bug instance
if (currentBugInstance != null)
synchBugAnnotation(currentBugInstance);
// Save bugs to file
File selectedFile = chooser.getSelectedFile();
currentAnalysisRun.saveBugsToFile(selectedFile);
}
} catch (Exception e) {
if (FindBugs.DEBUG) {
e.printStackTrace();
}
logger.logMessage(Logger.ERROR, "Could not save bugs: " + e.toString());
}
}//GEN-LAST:event_saveBugsItemActionPerformed
private void loadBugsFromFile(File file) throws IOException, DocumentException {
File selectedFile = file;
Project project = new Project();
AnalysisRun analysisRun = new AnalysisRun(project, this);
analysisRun.loadBugsFromFile(selectedFile);
project.setProjectFileName(file.getName()); // otherwise frame will show "<<unnamed project>>"
setProject(project);
synchAnalysisRun(analysisRun);
}
private void loadBugsFromURL(String urlspec) throws IOException, DocumentException {
URL url = new URL(urlspec);
InputStream in = url.openStream();
Project project = new Project();
AnalysisRun analysisRun = new AnalysisRun(project, this);
analysisRun.loadBugsFromInputStream(in);
setProject(project);
synchAnalysisRun(analysisRun);
}
private void loadBugsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadBugsItemActionPerformed
// FIXME: offer to save current project and bugs
try {
JFileChooser chooser = createFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setFileFilter(xmlFileFilter);
int result = chooseFile(chooser, L10N.getLocalString("dlg.loadbugs_ttl", "Load Bugs..."));
if (result != JFileChooser.CANCEL_OPTION) {
loadBugsFromFile(chooser.getSelectedFile());
}
} catch (Exception e) {
if (FindBugs.DEBUG) {
e.printStackTrace();
}
logger.logMessage(Logger.ERROR, "Could not load bugs: " + e.toString());
}
}//GEN-LAST:event_loadBugsItemActionPerformed
private void configureDetectorsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureDetectorsItemActionPerformed
ConfigureDetectorsDialog dialog = new ConfigureDetectorsDialog(this, true);
dialog.setSize(700, 520);
dialog.setLocationRelativeTo(null); // center the dialog
dialog.setVisible(true);
}//GEN-LAST:event_configureDetectorsItemActionPerformed
private void reloadProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reloadProjectItemActionPerformed
Project current = getCurrentProject();
if (current == null)
return;
try {
String filename = current.getProjectFileName();
Project project = new Project();
project.read(filename);
setProject(null);
setProject(project);
findBugsButtonActionPerformed(evt);
} catch (IOException e) {
logger.logMessage(Logger.ERROR, "Could not reload project: " + e.getMessage());
}
}//GEN-LAST:event_reloadProjectItemActionPerformed
private void saveProjectAsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveProjectAsItemActionPerformed
saveProject(getCurrentProject(), L10N.getLocalString("dlg.saveprojectas_ttl", "Save Project As..."), true);
}//GEN-LAST:event_saveProjectAsItemActionPerformed
private void viewMenuMenuSelected(javax.swing.event.MenuEvent evt) {//GEN-FIRST:event_viewMenuMenuSelected
// View bug details and full descriptions items,
// are only enabled if there is a project open.
boolean hasProject = getCurrentProject() != null;
viewBugDetailsItem.setEnabled(hasProject);
fullDescriptionsItem.setEnabled(hasProject);
}//GEN-LAST:event_viewMenuMenuSelected
private void fileMenuMenuSelected(javax.swing.event.MenuEvent evt) {//GEN-FIRST:event_fileMenuMenuSelected
// Save and close project items are only enabled if there is a project open.
boolean hasProject = getCurrentProject() != null;
saveProjectItem.setEnabled(hasProject);
saveProjectAsItem.setEnabled(hasProject);
reloadProjectItem.setEnabled(hasProject && !getCurrentProject().getProjectFileName().equals(Project.UNNAMED_PROJECT));
closeProjectItem.setEnabled(hasProject);
// Save bugs is only enabled if there is a current analysis run
boolean hasAnalysisRun = currentAnalysisRun != null;
saveBugsItem.setEnabled(hasAnalysisRun);
}//GEN-LAST:event_fileMenuMenuSelected
private void closeProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeProjectItemActionPerformed
if (closeProjectHook(getCurrentProject(), L10N.getLocalString("dlg.closeproject_lbl", "Close Project"))) {
setProject(null);
}
}//GEN-LAST:event_closeProjectItemActionPerformed
private void removeClasspathEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeClasspathEntryButtonActionPerformed
Project project = getCurrentProject();
DefaultListModel listModel = (DefaultListModel) classpathEntryList.getModel();
int[] selIndices = classpathEntryList.getSelectedIndices();
for (int i = selIndices.length - 1; i >= 0; i--) {
int sel = selIndices[i];
project.removeAuxClasspathEntry(sel);
listModel.remove(sel);
}
}//GEN-LAST:event_removeClasspathEntryButtonActionPerformed
private void addClasspathEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addClasspathEntryButtonActionPerformed
addClasspathEntryToList();
}//GEN-LAST:event_addClasspathEntryButtonActionPerformed
private void browseClasspathEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseClasspathEntryButtonActionPerformed
JFileChooser chooser = createFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
chooser.setFileFilter(auxClasspathEntryFileFilter);
chooser.setMultiSelectionEnabled(true);
int result = chooseFile(chooser, "Add Entry");
if (result != JFileChooser.CANCEL_OPTION) {
File[] selectedFileList = chooser.getSelectedFiles();
for (int i = 0; i < selectedFileList.length; ++i) {
selectedFileList[i] = verifyFileSelection(selectedFileList[i]);
String entry = selectedFileList[i].getPath();
addClasspathEntryToProject(entry);
}
}
}//GEN-LAST:event_browseClasspathEntryButtonActionPerformed
private void fullDescriptionsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fullDescriptionsItemActionPerformed
for (JTree bugTree : bugTreeList) {
// Redisplay the displayed bug instance nodes
DefaultTreeModel bugTreeModel = (DefaultTreeModel) bugTree.getModel();
int numRows = bugTree.getRowCount();
for (int i = 0; i < numRows; ++i) {
//System.out.println("Getting path for row " + i);
TreePath path = bugTree.getPathForRow(i);
if (path == null)
continue;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
if (node instanceof BugTreeNode)
bugTreeModel.valueForPathChanged(path, node.getUserObject());
}
}
}//GEN-LAST:event_fullDescriptionsItemActionPerformed
private void viewBugDetailsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewBugDetailsItemActionPerformed
String view = getView();
if (view.equals("BugTree")) {
checkBugDetailsVisibility();
}
}//GEN-LAST:event_viewBugDetailsItemActionPerformed
private void bugTreeBugDetailsSplitterPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_bugTreeBugDetailsSplitterPropertyChange
// Here we want to
// (1) Keep the View:Bug details checkbox item up to date, and
// (2) keep the details window synchronized with the current bug instance
String propertyName = evt.getPropertyName();
if (propertyName.equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) {
boolean isMaximized = isSplitterMaximized(bugTreeBugDetailsSplitter, evt);
viewBugDetailsItem.setSelected(!isMaximized);
if (!isMaximized) {
// Details window is shown, so make sure it is populated
// with bug detail information
synchBugInstance();
}
}
}//GEN-LAST:event_bugTreeBugDetailsSplitterPropertyChange
private void openProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openProjectItemActionPerformed
if (!closeProjectHook(getCurrentProject(), L10N.getLocalString("msg.openproject_txt", "Open Project")))
return;
JFileChooser chooser = createFileChooser();
chooser.setFileFilter(projectFileFilter);
int result = chooseFileToOpen(chooser);
if (result == JFileChooser.CANCEL_OPTION)
return;
try {
File file = chooser.getSelectedFile();
Project project = new Project();
project.read(file.getPath());
setProject(project);
UserPreferences.getUserPreferences().useProject(file.getPath());
rebuildRecentProjectsMenu();
} catch (IOException e) {
logger.logMessage(Logger.ERROR, MessageFormat.format( L10N.getLocalString("msg.couldnotopenproject_txt", "Could not open project: {0}"), new Object[]{e.getMessage()}));
}
}//GEN-LAST:event_openProjectItemActionPerformed
private void saveProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveProjectItemActionPerformed
saveProject(getCurrentProject(), L10N.getLocalString("msg.saveproject_txt", "Save Project"));
}//GEN-LAST:event_saveProjectItemActionPerformed
private void aboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutItemActionPerformed
about();
}//GEN-LAST:event_aboutItemActionPerformed
private void findBugsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findBugsButtonActionPerformed
Project project = getCurrentProject();
if (project.getFileCount() == 0) {
logger.logMessage(Logger.ERROR, MessageFormat.format(L10N.getLocalString("msg.projectnojars_txt", "Project {0} has no Jar files selected"), new Object[]{project}));
return;
}
bugDescriptionEditorPane.setText("");
currentBugDetailsKey = null;
sourceTextArea.setText("");
AnalysisRun analysisRun = new AnalysisRun(project, this);
logger.logMessage(Logger.INFO, MessageFormat.format(L10N.getLocalString("msg.beginninganalysis_txt", "Beginning analysis of {0}"), new Object[]{project}));
// Run the analysis!
RunAnalysisDialog dialog = new RunAnalysisDialog(this, analysisRun, analysisPriority);
dialog.setSize(400, 300);
dialog.setLocationRelativeTo(null); // center the dialog
dialog.setVisible(true);
if (dialog.isCompleted()) {
logger.logMessage(Logger.INFO, MessageFormat.format(L10N.getLocalString("msg.analysiscompleted_txt", "Analysis {0} completed"), new Object[]{project}));
// Report any errors that might have occurred during analysis
analysisRun.reportAnalysisErrors();
// Now we have an analysis run to look at
synchAnalysisRun(analysisRun);
} else {
if (dialog.exceptionOccurred()) {
// The analysis was killed by an unexpected exception
Exception e = dialog.getException();
AnalysisErrorDialog err = new AnalysisErrorDialog(this, true, null);
err.addLine(MessageFormat.format(L10N.getLocalString("msg.fatalanalysisexception_txt", "Fatal analysis exception: {0}"), new Object[]{e.toString()}));
StackTraceElement[] callList = e.getStackTrace();
for (StackTraceElement aCallList : callList)
err.addLine("\t" + aCallList);
err.finish();
err.setSize(650, 500);
err.setLocationRelativeTo(null); // center the dialog
err.setVisible(true);
} else {
// Cancelled by user
logger.logMessage(Logger.INFO, MessageFormat.format(L10N.getLocalString("msg.analysiscancelled_txt", "Analysis of {0} cancelled by user"), new Object[]{project}));
}
}
}//GEN-LAST:event_findBugsButtonActionPerformed
private void browseSrcDirButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseSrcDirButtonActionPerformed
JFileChooser chooser = createFileChooser();
chooser.setFileFilter(archiveAndDirectoryFilter);
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int rc = chooseFile(chooser, L10N.getLocalString("msg_addsource_lbl", "Add source directory or archive"));
if (rc == JFileChooser.APPROVE_OPTION) {
File[] selectedFileList = chooser.getSelectedFiles();
for (int i = 0; i < selectedFileList.length; ++i) {
selectedFileList[i] = verifyFileSelection(selectedFileList[i]);
String entry = selectedFileList[i].getPath();
addSrcToProject(entry);
}
}
}//GEN-LAST:event_browseSrcDirButtonActionPerformed
private void srcDirTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_srcDirTextFieldActionPerformed
addSourceDirToList();
}//GEN-LAST:event_srcDirTextFieldActionPerformed
private void jarNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jarNameTextFieldActionPerformed
addJarToList();
}//GEN-LAST:event_jarNameTextFieldActionPerformed
private void browseJarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseJarButtonActionPerformed
JFileChooser chooser = createFileChooser();
chooser.setFileFilter(archiveAndDirectoryFilter);
chooser.setMultiSelectionEnabled(true);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int rc = chooseFile(chooser, L10N.getLocalString("msg.addarchiveordirectory_txt", "Add archive or directory"));
if (rc == JFileChooser.APPROVE_OPTION) {
File[] selectedFileList = chooser.getSelectedFiles();
for (int i = 0; i < selectedFileList.length; ++i) {
selectedFileList[i] = verifyFileSelection(selectedFileList[i]);
String entry = selectedFileList[i].getPath();
addJarToProject(entry);
}
}
}//GEN-LAST:event_browseJarButtonActionPerformed
private void newProjectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newProjectItemActionPerformed
if (!closeProjectHook(getCurrentProject(), L10N.getLocalString("msg.newproject_txt", "New Project")))
return;
Project project = new Project();
setProject(project);
}//GEN-LAST:event_newProjectItemActionPerformed
private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitItemActionPerformed
exitFindBugs();
}//GEN-LAST:event_exitItemActionPerformed
private void removeSrcDirButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeSrcDirButtonActionPerformed
Project project = getCurrentProject();
DefaultListModel listModel = (DefaultListModel) sourceDirList.getModel();
int[] selIndices = sourceDirList.getSelectedIndices();
for (int i = selIndices.length - 1; i >= 0; i--) {
int sel = selIndices[i];
project.removeSourceDir(sel);
listModel.remove(sel);
}
}//GEN-LAST:event_removeSrcDirButtonActionPerformed
private void removeJarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeJarButtonActionPerformed
Project project = getCurrentProject();
DefaultListModel listModel = (DefaultListModel) jarFileList.getModel();
int[] selIndices = jarFileList.getSelectedIndices();
for (int i = selIndices.length - 1; i >= 0; i--) {
int sel = selIndices[i];
project.removeFile(sel);
listModel.remove(sel);
}
}//GEN-LAST:event_removeJarButtonActionPerformed
private void addSourceDirButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addSourceDirButtonActionPerformed
addSourceDirToList();
}//GEN-LAST:event_addSourceDirButtonActionPerformed
private void addJarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addJarButtonActionPerformed
addJarToList();
}//GEN-LAST:event_addJarButtonActionPerformed
/**
* Exit the Application
*/
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
exitFindBugs();
}//GEN-LAST:event_exitForm
/**
* This makes the set of controls passed in all the same size, equal to
* the minimum needed of the largest control.
*/
private void equalizeControls(JComponent[] components) {
Dimension d;
int minX = 0, minY = 0;
for (JComponent comp : components) {
comp.setMaximumSize(null);
comp.setMinimumSize(null);
comp.setPreferredSize(null);
d = comp.getPreferredSize();
if (d.width > minX)
minX = d.width;
if (d.height > minY)
minY = d.height;
}
d = new Dimension(minX, minY);
for (JComponent comp : components) {
comp.setMinimumSize(d);
comp.setMaximumSize(d);
comp.setPreferredSize(d);
}
}
/**
* This is called whenever the selection is changed in the bug tree.
*
* @param e the TreeSelectionEvent
*/
private void bugTreeSelectionChanged(TreeSelectionEvent e) {
BugInstance selected = getCurrentBugInstance();
if (selected != null) {
synchBugInstance();
}
}
private void openRecentProjectItemActionPerformed(java.awt.event.ActionEvent evt) {
if (!closeProjectHook(getCurrentProject(), L10N.getLocalString("msg.openproject_txt", "Open Project")))
return;
JMenuItem recentProjectItem = (JMenuItem) evt.getSource();
File file = new File(recentProjectItem.getText());
try {
System.setProperty("user.dir", file.getParent());
Project project = new Project();
project.read(file.getPath());
setProject(project);
UserPreferences.getUserPreferences().useProject(file.getPath());
} catch (IOException e) {
UserPreferences.getUserPreferences().removeProject(file.getPath());
logger.logMessage(Logger.ERROR, MessageFormat.format(L10N.getLocalString("msg.couldnotopenproject_txt", "Could not open project: {0}"), new Object[]{e.getMessage()}));
} finally {
rebuildRecentProjectsMenu();
}
}
private boolean moveEntriesUp(JList entryList) {
int[] selIndices = entryList.getSelectedIndices();
if (selIndices.length == 0)
return false;
boolean changed = false;
int lastInsertPos = -1;
DefaultListModel model = (DefaultListModel) entryList.getModel();
for (int i = 0; i < selIndices.length; i++) {
int sel = selIndices[i];
if ((sel - 1) > lastInsertPos) {
model.add(sel - 1, model.remove(sel));
selIndices[i] = sel - 1;
changed = true;
}
lastInsertPos = selIndices[i];
}
entryList.setSelectedIndices(selIndices);
return changed;
}
private boolean moveEntriesDown(JList entryList) {
int[] selIndices = entryList.getSelectedIndices();
if (selIndices.length == 0)
return false;
boolean changed = false;
DefaultListModel model = (DefaultListModel) entryList.getModel();
int lastInsertPos = model.getSize();
for (int i = selIndices.length - 1; i >= 0; i--) {
int sel = selIndices[i];
if ((sel + 1) < lastInsertPos) {
model.add(sel + 1, model.remove(sel));
selIndices[i] = sel + 1;
changed = true;
}
lastInsertPos = selIndices[i];
}
entryList.setSelectedIndices(selIndices);
return changed;
}
private void resyncAuxClasspathEntries() {
Project project = getCurrentProject();
int numEntries = project.getNumAuxClasspathEntries();
while (numEntries-- > 0)
project.removeAuxClasspathEntry(0);
DefaultListModel model = (DefaultListModel) classpathEntryList.getModel();
for (int i = 0; i < model.size(); i++)
project.addAuxClasspathEntry((String) model.get(i));
}
private void resyncSourceEntries() {
Project project = getCurrentProject();
int numEntries = project.getNumSourceDirs();
while (numEntries-- > 0)
project.removeSourceDir(0);
DefaultListModel model = (DefaultListModel) sourceDirList.getModel();
for (int i = 0; i < model.size(); i++)
project.addSourceDir((String) model.get(i));
}
/**
* Localise the given AbstractButton, setting the text and optionally mnemonic
* Note that AbstractButton includes menus and menu items.
* @param button The button to localise
* @param key The key to look up in resource bundle
* @param defaultString default String to use if key not found
* @param setMnemonic whether or not to set the mnemonic. According to Sun's
* guidelines, default/cancel buttons should not have mnemonics
* but instead should use Return/Escape
*/
private void localiseButton(AbstractButton button, String key, String defaultString,
boolean setMnemonic) {
L10N.localiseButton(button, key, defaultString, setMnemonic);
}
/* ----------------------------------------------------------------------
* Component initialization support
* ---------------------------------------------------------------------- */
/**
* This is called from the constructor to perform post-initialization
* of the components in the form.
*/
private void postInitComponents() {
logger = new ConsoleLogger(this);
// Add menu items for bug categories to View->Filter Settings menu.
// These are automatically localized assuming that a
// BugCategoryDescriptions_<locale>.properties file exists
// in edu.umd.cs.findbugs.
Collection<String> bugCategoryCollection = edu.umd.cs.findbugs.I18N.instance().getBugCategories();
this.bugCategoryCheckBoxList = new JCheckBoxMenuItem[bugCategoryCollection.size()];
this.bugCategoryList = new String[bugCategoryCollection.size()];
int count = 0;
for (String bugCategory : bugCategoryCollection) {
String bugCategoryDescription = I18N.instance().getBugCategoryDescription(bugCategory);
final JCheckBoxMenuItem item = new JCheckBoxMenuItem(bugCategoryDescription, true);
item.setFont(BUTTON_FONT);
item.setSelected(getFilterSettings().containsCategory(bugCategory));
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
toggleBugCategory(item);
}
});
filterWarningsMenu.add(item);
this.bugCategoryCheckBoxList[count] = item;
this.bugCategoryList[count] = bugCategory;
++count;
}
viewPanelLayout = (CardLayout) viewPanel.getLayout();
// List of bug group tabs.
// This must be in the same order as GROUP_BY_ORDER_LIST!
bugTreeList = new JTree[]{byClassBugTree, byPackageBugTree, byBugTypeBugTree, byBugCategoryBugTree};
// Configure bug trees
for (JTree bugTree : bugTreeList) {
bugTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
bugTree.setCellRenderer(BugCellRenderer.instance());
bugTree.setRootVisible(false);
bugTree.setShowsRootHandles(true);
bugTree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
bugTreeSelectionChanged(e);
}
});
}
jarFileList.setModel(new DefaultListModel());
sourceDirList.setModel(new DefaultListModel());
classpathEntryList.setModel(new DefaultListModel());
// We use a special highlight painter to ensure that the highlights cover
// complete source lines, even though the source text doesn't
// fill the lines completely.
final Highlighter.HighlightPainter painter =
new DefaultHighlighter.DefaultHighlightPainter(sourceTextArea.getSelectionColor()) {
@Override
public Shape paintLayer(Graphics g, int offs0, int offs1,
Shape bounds, JTextComponent c, View view) {
try {
Shape extent = view.modelToView(offs0, Position.Bias.Forward, offs1, Position.Bias.Backward, bounds);
Rectangle rect = extent.getBounds();
rect.x = 0;
rect.width = bounds.getBounds().width;
g.setColor(getColor());
g.fillRect(rect.x, rect.y, rect.width, rect.height);
return rect;
} catch (BadLocationException e) {
return null;
}
}
};
Highlighter sourceHighlighter = new DefaultHighlighter() {
@Override
public Object addHighlight(int p0, int p1, Highlighter.HighlightPainter p)
throws BadLocationException {
return super.addHighlight(p0, p1, painter);
}
};
sourceTextArea.setHighlighter(sourceHighlighter);
updateTitle(getCurrentProject());
// Load the icon for the UMD logo
ClassLoader classLoader = this.getClass().getClassLoader();
ImageIcon logoIcon = new ImageIcon(classLoader.getResource("edu/umd/cs/findbugs/gui/logo_umd.png"));
logoLabel.setIcon(logoIcon);
// Set common Menu Accelerators
final int MENU_MASK = getMenuMask();
newProjectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, MENU_MASK));
openProjectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, MENU_MASK));
saveProjectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, MENU_MASK));
closeProjectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, MENU_MASK));
reloadProjectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, MENU_MASK));
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, MENU_MASK));
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK));
pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, MENU_MASK));
se




