diff --git a/pmd-jdeveloper1013/etc/build.xml b/pmd-jdeveloper1013/etc/build.xml index ec0abf1946..d33ee445c0 100644 --- a/pmd-jdeveloper1013/etc/build.xml +++ b/pmd-jdeveloper1013/etc/build.xml @@ -7,6 +7,7 @@ + @@ -14,7 +15,8 @@ - + + @@ -48,6 +50,12 @@ + + + + + + diff --git a/pmd-jdeveloper1013/etc/changelog.txt b/pmd-jdeveloper1013/etc/changelog.txt index 9a8811cc0c..51dbfdea33 100644 --- a/pmd-jdeveloper1013/etc/changelog.txt +++ b/pmd-jdeveloper1013/etc/changelog.txt @@ -1,3 +1,7 @@ +????, 2005 - 1.8: +Better presentation of the rule violations. +Upgraded to PMD 3.3. + Oct 18, 2005 - 1.7: Merged in changes from Olaf Heimburger to update plugin to work with JDev 10.1.3 early access. Modified to use "update center" functionality. Update center location is http://pmd.sf.net/center.xml diff --git a/pmd-jdeveloper1013/lib/pmd-3.3.jar b/pmd-jdeveloper1013/lib/pmd-3.3.jar index f037f49925..280668e677 100644 Binary files a/pmd-jdeveloper1013/lib/pmd-3.3.jar and b/pmd-jdeveloper1013/lib/pmd-3.3.jar differ diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/JumpingSelectionModel.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/JumpingSelectionModel.java deleted file mode 100644 index 5dc04122db..0000000000 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/JumpingSelectionModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.sourceforge.pmd.jdeveloper; - -import net.sourceforge.pmd.RuleViolation; -import oracle.ide.editor.EditorManager; -import oracle.ide.net.URLFactory; -import oracle.jdeveloper.ceditor.CodeEditor; - -import javax.swing.*; - -/** - * This class was inspired by a class on Sun's web site in the JList tutorial section. It's - * been twiddled somewhat since then. - */ -public class JumpingSelectionModel extends DefaultListSelectionModel { - - private DefaultListModel model; - - public JumpingSelectionModel(DefaultListModel model) { - this.model = model; - } - - public JumpingSelectionModel() { - setSelectionMode(SINGLE_SELECTION); - } - - public void setSelectionInterval(int index0, int index1) { - int oldIndex = getMinSelectionIndex(); - super.setSelectionInterval(index0, index1); - int newIndex = getMinSelectionIndex(); - if (oldIndex != newIndex) { - RuleViolation rv = ((RuleViolationWrapper)model.getElementAt(newIndex)).getRuleViolation(); - EditorManager.getEditorManager().openDefaultEditorInFrame(URLFactory.newFileURL(rv.getFilename())); - ((CodeEditor)EditorManager.getEditorManager().getCurrentEditor()).gotoLine(rv.getLine(), 0, false); - } - } -} diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/Plugin.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/Plugin.java index 2eadad2ab8..6825a19bb9 100644 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/Plugin.java +++ b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/Plugin.java @@ -1,21 +1,10 @@ package net.sourceforge.pmd.jdeveloper; -import java.io.File; -import java.io.FileInputStream; - -import java.util.Iterator; - -import javax.ide.model.Document; - -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; - import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.PMDException; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.RuleViolation; - import oracle.ide.Addin; import oracle.ide.AddinManager; import oracle.ide.Context; @@ -25,19 +14,28 @@ import oracle.ide.controller.ContextMenu; import oracle.ide.controller.ContextMenuListener; import oracle.ide.controller.Controller; import oracle.ide.controller.IdeAction; -import oracle.ide.controller.Menubar; import oracle.ide.editor.EditorManager; import oracle.ide.log.LogManager; import oracle.ide.log.LogPage; import oracle.ide.log.LogWindow; import oracle.ide.model.Element; +import oracle.ide.model.Node; import oracle.ide.model.Project; -import oracle.ide.model.Reference; import oracle.ide.navigator.NavigatorManager; import oracle.ide.panels.Navigable; - +import oracle.jdeveloper.compiler.IdeLog; +import oracle.jdeveloper.compiler.IdeStorage; import oracle.jdeveloper.model.JavaSourceNode; +import javax.swing.*; +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + public class Plugin implements Addin, Controller, ContextMenuListener { @@ -94,6 +92,9 @@ public class Plugin implements Addin, Controller, ContextMenuListener { } private boolean added; + // whew, this is kludgey + private Map fileToNodeMap = new HashMap(); + public boolean handleEvent(IdeAction ideAction, Context context) { if (!added) { LogManager.getLogManager().addPage(rvPage); @@ -102,24 +103,22 @@ public class Plugin implements Addin, Controller, ContextMenuListener { } if (ideAction.getCommandId() == CHECK_CMD_ID) { try { + fileToNodeMap.clear(); PMD pmd = new PMD(); SelectedRules rs = new SelectedRules(SettingsPanel.createSettingsStorage()); RuleContext ctx = new RuleContext(); ctx.setReport(new Report()); - if (resolveType(context.getElement()) == PROJECT) { - Iterator i = context.getProject().getListOfChildren().iterator(); - while (i.hasNext()) { + if (context.getElement() instanceof Project) { + Project project = (Project)context.getElement(); + for (Iterator i = project.getChildren(); i.hasNext();) { Object obj = i.next(); - if (!(obj instanceof Reference)) { - System.out.println("PMD plugin expected a Reference, found a " + obj.getClass() + " instead. Odd."); + if (!(obj instanceof JavaSourceNode)) { + System.out.println("PMD plugin expected a JavaSourceNode, found a " + obj.getClass() + " instead. Odd."); continue; } - obj = ((Reference)obj).getData(); - if (!(obj instanceof Document)) { - continue; - } - Document candidate = (Document)obj; + JavaSourceNode candidate = (JavaSourceNode)obj; if (candidate.getLongLabel().endsWith(".java") && new File(candidate.getLongLabel()).exists()) { + fileToNodeMap.put(candidate.getLongLabel(), candidate); ctx.setSourceCodeFilename(candidate.getLongLabel()); FileInputStream fis = new FileInputStream(new File(candidate.getLongLabel())); pmd.processFile(fis, rs.getSelectedRules(), ctx); @@ -128,6 +127,7 @@ public class Plugin implements Addin, Controller, ContextMenuListener { } render(ctx); } else if (resolveType(context.getElement()) == SOURCE) { + fileToNodeMap.put(context.getNode().getLongLabel(), context.getNode()); ctx.setSourceCodeFilename(context.getNode().getLongLabel()); pmd.processFile(context.getNode().getInputStream(), rs.getSelectedRules(), ctx); render(ctx); @@ -145,9 +145,6 @@ public class Plugin implements Addin, Controller, ContextMenuListener { return true; } - /** - * TODO investigate CompilerPage as a replacement for RuleViolationPage; or could perhaps subclass it instead. - */ private void render(RuleContext ctx) { rvPage.show(); rvPage.clearAll(); @@ -158,9 +155,13 @@ public class Plugin implements Addin, Controller, ContextMenuListener { ((LogWindow)page).show(); } } else { + List list = new ArrayList(); for (Iterator i = ctx.getReport().iterator(); i.hasNext();) { - rvPage.add((RuleViolation)i.next()); + RuleViolation rv = (RuleViolation)i.next(); + Node node = (Node)fileToNodeMap.get(rv.getFilename()); + list.add(new IdeLog.Message(Ide.getActiveWorkspace(), Ide.getActiveProject(), new IdeStorage(node), rv.getDescription(), 2, rv.getNode().getBeginLine()+1, rv.getNode().getBeginColumn())); } + rvPage.add(list); } } @@ -172,8 +173,7 @@ public class Plugin implements Addin, Controller, ContextMenuListener { // Controller // ContextMenuListener - public void menuWillHide(ContextMenu contextMenu) { - } + public void menuWillHide(ContextMenu contextMenu) {} public void menuWillShow(ContextMenu contextMenu) { Element doc = contextMenu.getContext().getElement(); diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationPage.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationPage.java index 245aa2fd42..789577c322 100644 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationPage.java +++ b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationPage.java @@ -1,34 +1,16 @@ package net.sourceforge.pmd.jdeveloper; -import net.sourceforge.pmd.RuleViolation; -import oracle.ide.layout.ViewId; -import oracle.ide.log.AbstractLogPage; +import oracle.jdeveloper.compiler.CompilerPage; -import javax.swing.*; -import java.awt.*; +import java.util.List; -public class RuleViolationPage extends AbstractLogPage { - - private DefaultListModel model = new DefaultListModel(); - private JScrollPane scrollPane; - private JList list; +public class RuleViolationPage extends CompilerPage { public RuleViolationPage() { - super(new ViewId("PMDPage", Plugin.TITLE), null, false); - list = new JList(model); - list.setSelectionModel(new JumpingSelectionModel(model)); - scrollPane = new JScrollPane(list); + super(Plugin.TITLE, Plugin.TITLE, null); } - public void add(RuleViolation ruleViolation) { - model.addElement(new RuleViolationWrapper(ruleViolation)); - } - - public Component getGUI() { - return scrollPane; - } - - public void clearAll() { - model.clear(); + public void add(List list) { + super.logMsg(list); } } diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationWrapper.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationWrapper.java deleted file mode 100644 index bbbcd192cf..0000000000 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/RuleViolationWrapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.sourceforge.pmd.jdeveloper; - -import net.sourceforge.pmd.RuleViolation; - -public class RuleViolationWrapper { - - private RuleViolation ruleViolation; - - public RuleViolationWrapper(RuleViolation ruleViolation) { - this.ruleViolation = ruleViolation; - } - - public RuleViolation getRuleViolation() { - return this.ruleViolation; - } - - public String toString() { - return ruleViolation.getFilename() + "; line " + ruleViolation.getLine() +"; ("+ ruleViolation.getRule().getName() + ") " + ruleViolation.getDescription(); - } -} diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SelectedRules.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SelectedRules.java index 71199f62bf..7e648c3daa 100644 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SelectedRules.java +++ b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SelectedRules.java @@ -6,7 +6,11 @@ import net.sourceforge.pmd.RuleSetFactory; import net.sourceforge.pmd.RuleSetNotFoundException; import javax.swing.*; -import java.util.*; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; public class SelectedRules { diff --git a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SettingsPanel.java b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SettingsPanel.java index cb3cd1cc5e..5ef6d821c1 100644 --- a/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SettingsPanel.java +++ b/pmd-jdeveloper1013/src/net/sourceforge/pmd/jdeveloper/SettingsPanel.java @@ -7,7 +7,10 @@ import oracle.ide.panels.TraversableContext; import javax.swing.*; import javax.swing.border.EmptyBorder; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.FileDialog; +import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter;