Yay, clicking on a message works now!

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@1472 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Tom Copeland
2003-02-24 22:06:20 +00:00
parent 556ee97158
commit c4568d680d
2 changed files with 65 additions and 10 deletions

View File

@ -98,19 +98,19 @@ public class Plugin implements Addin, Controller, ContextMenuListener {
PMD pmd = new PMD();
RuleContext ctx = new RuleContext();
ctx.setReport(new Report());
ctx.setSourceCodeFilename(context.getElement().toString());
ctx.setSourceCodeFilename(context.getDocument().getLongLabel());
SelectedRules rs = new SelectedRules();
pmd.processFile(context.getDocument().getInputStream(), rs.getSelectedRules(), ctx);
if (rvPage == null) {
rvPage = new RuleViolationPage();
}
if (!rvPage.isVisible()) {
rvPage.show();
}
rvPage.clearAll();
if (ctx.getReport().isEmpty()) {
JOptionPane.showMessageDialog(null, "No problems found", "PMD", JOptionPane.INFORMATION_MESSAGE);
} else {
if (rvPage == null) {
rvPage = new RuleViolationPage();
}
if (!rvPage.isVisible()) {
rvPage.show();
}
rvPage.clearAll();
for (Iterator i = ctx.getReport().iterator(); i.hasNext();) {
rvPage.add((RuleViolation)i.next());
}

View File

@ -2,26 +2,80 @@ package net.sourceforge.pmd.jdeveloper;
import net.sourceforge.pmd.RuleViolation;
import oracle.ide.Ide;
import oracle.ide.editor.Editor;
import oracle.ide.layout.ViewId;
import oracle.ide.log.AbstractLogPage;
import oracle.ide.model.Document;
import oracle.jdeveloper.ceditor.CodeEditor;
import javax.swing.DefaultListModel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import java.awt.Component;
import java.util.Iterator;
import java.util.List;
public class RuleViolationPage extends AbstractLogPage {
public class SingleSelectionModel extends DefaultListSelectionModel {
public SingleSelectionModel() {
setSelectionMode(SINGLE_SELECTION);
}
public void setSelectionInterval(int index0, int index1) {
int oldIndex = getMinSelectionIndex();
super.setSelectionInterval(index0, index1);
int newIndex = getMinSelectionIndex();
if (oldIndex != newIndex) {
updateSingleSelection(oldIndex, newIndex);
}
}
public void updateSingleSelection(int oldIndex, int newIndex) {
RuleViolation rv = ((RVWrapper)model.getElementAt(newIndex)).getRV();
List editors = Ide.getEditorManager().getAllEditors();
for (Iterator i = editors.iterator(); i.hasNext();) {
Editor editor = (Editor)i.next();
Document doc = editor.getContext().getDocument();
if (doc.getLongLabel().equals(rv.getFilename()) && editor instanceof CodeEditor) {
Ide.getEditorManager().openDefaultEditorInFrame(editor.getContext());
((CodeEditor)editor).gotoLine(rv.getLine(), 0, false);
break;
}
}
}
}
private static class RVWrapper {
private RuleViolation rv;
public RVWrapper(RuleViolation rv) {
this.rv = rv;
}
public RuleViolation getRV() {
return this.rv;
}
public String toString() {
return rv.getFilename() + ":" + rv.getLine() +":"+ rv.getDescription();
}
}
private DefaultListModel model = new DefaultListModel();
private JScrollPane scrollPane = new JScrollPane(new JList(model));
private JScrollPane scrollPane;
private JList list;
public RuleViolationPage() {
super(new ViewId("PMDPage", "PMD"), null, false);
list = new JList(model);
list.setSelectionModel(new SingleSelectionModel());
scrollPane = new JScrollPane(list);
Ide.getLogManager().addPage(this);
}
public void add(RuleViolation ruleViolation) {
model.addElement(ruleViolation.getFilename() + ":" + ruleViolation.getLine() +":"+ ruleViolation.getDescription());
model.addElement(new RVWrapper(ruleViolation));
}
public Component getGUI() {
@ -32,4 +86,5 @@ public class RuleViolationPage extends AbstractLogPage {
super.clearAll();
model.clear();
}
}