Release 11.1.1.4300

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@7644 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Torsten Kleiber
2012-03-12 19:59:15 +00:00
parent 2e8a2625b9
commit cc88c397e3
2 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,87 @@
package net.sourceforge.pmd.jdeveloper;
import java.awt.Component;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
import net.sourceforge.pmd.cpd.Match;
import net.sourceforge.pmd.cpd.TokenEntry;
import oracle.ide.ceditor.CodeEditor;
import oracle.ide.editor.EditorManager;
import oracle.ide.layout.ViewId;
import oracle.ide.log.AbstractLogPage;
import oracle.ide.model.Node;
public class CpdViolationPage extends AbstractLogPage implements TreeSelectionListener {
private final transient JScrollPane scrollPane;
private final transient JTree tree;
private final transient DefaultMutableTreeNode top;
public final transient Map cpdFileToNodeMap =
new HashMap(); // whew, this is kludgey
public CpdViolationPage() {
super(new ViewId("CpdPage", CpdAddin.CPD_TITLE), null, false);
top = new DefaultMutableTreeNode("CPD");
tree = new JTree(top);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(this);
scrollPane = new JScrollPane(tree);
}
public void valueChanged(final TreeSelectionEvent event) {
final DefaultMutableTreeNode node =
(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (node != null && node.isLeaf()) {
final CpdViolationWrapper nodeInfo =
(CpdViolationWrapper)node.getUserObject();
EditorManager.getEditorManager().openDefaultEditorInFrame(nodeInfo.file.getURL());
((CodeEditor)EditorManager.getEditorManager().getCurrentEditor()).gotoLine(nodeInfo.mark.getBeginLine(),
0,
false);
}
}
public void add(final Match match) {
final Node file1 =
(Node)cpdFileToNodeMap.get(match.getFirstMark().getTokenSrcID());
final DefaultMutableTreeNode matchNode =
new DefaultMutableTreeNode(file1.getShortLabel() + " contains a " +
match.getLineCount() +
" line block of duplicated code", true);
top.add(matchNode);
for (final Iterator i = match.iterator(); i.hasNext(); ) {
final TokenEntry mark = (TokenEntry)i.next();
final Node file = (Node)cpdFileToNodeMap.get(mark.getTokenSrcID());
final DefaultMutableTreeNode markTreeNode =
new DefaultMutableTreeNode(new CpdViolationWrapper(mark, file,
file.getShortLabel() +
" has some at line " +
mark.getBeginLine()),
false);
matchNode.add(markTreeNode);
}
}
public Component getGUI() {
return scrollPane;
}
public void clearAll() {
top.removeAllChildren();
tree.repaint();
scrollPane.repaint();
//tree.removeSelectionPath(new TreePath(new Object[] {top}));
}
}

View File

@ -0,0 +1,23 @@
package net.sourceforge.pmd.jdeveloper;
import net.sourceforge.pmd.cpd.TokenEntry;
import oracle.ide.model.Node;
public class CpdViolationWrapper {
private final transient String label;
public transient Node file;
public transient TokenEntry mark;
public CpdViolationWrapper(final TokenEntry mark, final Node file,
final String label) {
this.label = label;
this.mark = mark;
this.file = file;
}
public String toString() {
return label;
}
}