pmd-jdeveloper: Add missing files

This commit is contained in:
Torsten Kleiber committed 2013-09-03 20:18:01 +02:00
1 parent 2cce739814
commit 91c0502178
3 files changed
+256

No files matched your search

@@ -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}));
}
}
@@ -0,0 +1,162 @@
package net.sourceforge.pmd.jdeveloper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sourceforge.pmd.PMD;
import net.sourceforge.pmd.PMDConfiguration;
import net.sourceforge.pmd.PMDException;
import net.sourceforge.pmd.Report;
import net.sourceforge.pmd.RuleContext;
import net.sourceforge.pmd.RuleSetNotFoundException;
import net.sourceforge.pmd.RuleSets;
import net.sourceforge.pmd.RuleViolation;
import net.sourceforge.pmd.SourceCodeProcessor;
import oracle.ide.Context;
import oracle.ide.Ide;
import oracle.ide.ceditor.CodeEditor;
import oracle.ide.controller.Command;
import oracle.ide.extension.RegisteredByExtension;
import oracle.ide.log.LogManager;
import oracle.ide.log.LogPage;
import oracle.ide.log.LogWindow;
import oracle.ide.model.DataContainer;
import oracle.ide.model.Element;
import oracle.ide.model.Node;
import oracle.ide.model.Project;
import oracle.ide.model.RelativeDirectoryContextFolder;
import oracle.ide.model.Workspace;
import oracle.jdeveloper.compiler.IdeLog;
import oracle.jdeveloper.compiler.IdeStorage;
import oracle.jdeveloper.model.JavaSourceNode;
@RegisteredByExtension("net.sourceforge.pmd.jdeveloper")
public class PmdCommand extends Command {
public static final int RUN_PMD_CMD_ID = Ide.findCmdID("net.sourceforge.pmd.jdeveloper.CheckPmd");
private transient Map pmdFileToNodeMap = new HashMap(); // whew, this is kludgey
public PmdCommand() {
super(RUN_PMD_CMD_ID);
}
@Override
public int doit() {
if (!PmdAddin.added) {
addLogPage();
}
runPmd(context);
return OK;
}
private void runPmd(final Context context) {
try {
pmdFileToNodeMap.clear();
final PMD pmd = new PMD();
// TODO ? Version.setJavaVersion(context, pmd);
final PmdSelectedRules rules = new PmdSelectedRules(PmdSettingsPanel.createSettingsStorage());
final RuleContext ctx = new RuleContext();
ctx.setReport(new Report());
// Util.logMessage(context.getElement().getLongLabel());
if (context.getElement() instanceof RelativeDirectoryContextFolder) {
final RelativeDirectoryContextFolder folder = (RelativeDirectoryContextFolder)context.getElement();
checkTree(folder.getChildren(), pmd, rules, ctx);
render(ctx);
} else if (context.getElement() instanceof Workspace) {
final Workspace workspace = (Workspace)context.getElement();
checkTree(workspace.getChildren(), pmd, rules, ctx);
render(ctx);
} else if (context.getElement() instanceof Project) {
final Project project = (Project)context.getElement();
checkTree(project.getChildren(), pmd, rules, ctx);
render(ctx);
} else if (context.getElement() instanceof JavaSourceNode || context.getView() instanceof CodeEditor) {
final Node candidate = context.getNode();
processFile(rules, ctx, candidate);
render(ctx);
}
} catch (IOException e) {
Util.logMessage(e.getStackTrace());
Util.showError(e, PmdAddin.PMD_TITLE);
} catch (PMDException e) {
Util.logMessage(e.getStackTrace());
Util.showError(e, PmdAddin.PMD_TITLE);
} catch (RuleSetNotFoundException e) {
Util.logMessage(e.getStackTrace());
Util.showError(e, PmdAddin.PMD_TITLE);
}
}
private void processFile(final PmdSelectedRules rules, final RuleContext ctx,
final Node candidate) throws net.sourceforge.pmd.PMDException, java.io.IOException {
pmdFileToNodeMap.put(candidate.getLongLabel(), candidate);
ctx.setSourceCodeFilename(candidate.getLongLabel());
SourceCodeProcessor scp = new SourceCodeProcessor(new PMDConfiguration());
RuleSets rss = new RuleSets();
rss.addRuleSet(rules.getSelectedRules());
scp.processSourceCode(candidate.getInputStream(), rss, ctx);
}
private void addLogPage() {
LogManager.getLogManager().addPage(PmdAddin.pmdViolationPage);
LogManager.getLogManager().showLog();
PmdAddin.added = true;
}
private void checkTree(final Iterator iter, final PMD pmd, final PmdSelectedRules rules,
final RuleContext ctx) throws IOException, PMDException {
while (iter.hasNext()) {
final Object obj = iter.next();
final Element el = (Element)obj;
DataContainer dataContainer;
// Util.logMessage(el.getLongLabel() + ":: " + obj.getClass().getName());
try {
dataContainer = ((DataContainer)obj);
Iterator children = dataContainer.getChildren();
if (!children.equals(null)) {
checkTree(children, pmd, rules, ctx);
}
} catch (ClassCastException e) {
if ((obj instanceof JavaSourceNode)) {
final JavaSourceNode candidate = (JavaSourceNode)obj;
processFile(rules, ctx, candidate);
} else {
continue;
}
}
}
}
private void render(final RuleContext ctx) {
PmdAddin.pmdViolationPage.show();
PmdAddin.pmdViolationPage.clearAll();
if (ctx.getReport().isEmpty()) {
JOptionPane.showMessageDialog(null, "No problems found", PmdAddin.PMD_TITLE,
JOptionPane.INFORMATION_MESSAGE);
final LogPage page = LogManager.getLogManager().getMsgPage();
if (page instanceof LogWindow) {
((LogWindow)page).show();
}
} else {
final List list = new ArrayList();
for (final Iterator i = ctx.getReport().iterator(); i.hasNext(); ) {
final RuleViolation viol = (RuleViolation)i.next();
final Node node = (Node)pmdFileToNodeMap.get(viol.getFilename());
list.add(new IdeLog.Message(Ide.getActiveWorkspace(), Ide.getActiveProject(), new IdeStorage(node),
viol.getDescription(), 2, viol.getBeginLine(), viol.getBeginColumn()));
}
PmdAddin.pmdViolationPage.add(list);
}
}
}
@@ -0,0 +1,7 @@
package net.sourceforge.pmd.jdeveloper;
public class SettingsException extends Exception {
public SettingsException(final String exc) {
super(exc);
}
}