/* * FindBugs - Find bugs in Java programs * Copyright (C) 2003-2005, University of Maryland * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package edu.umd.cs.findbugs.gui; import edu.umd.cs.findbugs.SortedBugCollection; import edu.umd.cs.findbugs.TextUIBugReporter; import edu.umd.cs.findbugs.classfile.ClassDescriptor; import edu.umd.cs.findbugs.log.ConsoleLogger; /** * BugReporter used by AnalysisRun. */ public class SwingGUIBugReporter extends TextUIBugReporter { private final AnalysisRun analysisRun; private SortedBugCollection bugCollection; private AnalysisErrorDialog errorDialog; private int errorCount; /** * Constructor. * * @param analysisRun */ public SwingGUIBugReporter(AnalysisRun analysisRun) { this.analysisRun = analysisRun; this.bugCollection = new SortedBugCollection(getProjectStats()); } public SortedBugCollection getBugCollection() { return bugCollection; } public boolean errorsOccurred() { return errorCount > 0; } public AnalysisErrorDialog getErrorDialog() { return errorDialog; } public void observeClass(ClassDescriptor classDescriptor) { } @Override public void reportMissingClass(ClassNotFoundException ex) { ++errorCount; super.reportMissingClass(ex); String message = getMissingClassName(ex); bugCollection.addMissingClass(message); } @Override public void logError(String message) { ++errorCount; analysisRun.getFrame().getLogger().logMessage(ConsoleLogger.WARNING, message); super.logError(message); bugCollection.addError(message); } public void finish() { } @Override public void doReportBug(edu.umd.cs.findbugs.BugInstance bugInstance) { checkBugInstance(bugInstance); if (bugCollection.add(bugInstance)) notifyObservers(bugInstance); } private void createDialog() { if (errorDialog == null) { errorDialog = new AnalysisErrorDialog(analysisRun.getFrame(), true, this); } } @Override public void reportQueuedErrors() { createDialog(); errorDialog.clear(); super.reportQueuedErrors(); errorDialog.finish(); } @Override protected void emitLine(String line) { line = line.replaceAll("\t", " "); errorDialog.addLine(line); } }