initial checkin

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@269 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
David Craine
2002-07-10 14:05:48 +00:00
parent 682e7ed684
commit 314ebbab98
6 changed files with 282 additions and 0 deletions

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--JBuilder XML Project-->
<project>
<property category="idl" name="ProcessIDL" value="false"/>
<property category="runtime" name="DefaultConfiguration" value="-1"/>
<property category="runtime.0" name="BuildTargetOnRun" value="com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make"/>
<property category="runtime.0" name="ConfigurationName" value="Untitled Runtime Configuration"/>
<property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner"/>
<property category="runtime.0" name="application.class" value="pmdopentool.PMDOpenTool"/>
<property category="runtime.0" name="appserver.parameters" value=""/>
<property category="runtime.0" name="appserver.servername" value=""/>
<property category="runtime.0" name="appserver.vmparameters" value=""/>
<property category="runtime.0" name="server.arguments" value=""/>
<property category="runtime.0" name="server.disableServerClassTracing" value="0"/>
<property category="runtime.0" name="server.instance.name" value=""/>
<property category="runtime.0" name="server.name" value="Tomcat 4.0"/>
<property category="runtime.0" name="server.vmparameters" value=""/>
<property category="runtime.0" name="test.harness" value="com.borland.jbuilder.unittest.JBTestRunner"/>
<property category="serverservices" name="single.server.name" value="Tomcat 4.0"/>
<property category="sys" name="AuthorLabel" value="@author"/>
<property category="sys" name="BackupPath" value="bak"/>
<property category="sys" name="CheckStable" value="1"/>
<property category="sys" name="Company" value="InfoEther"/>
<property category="sys" name="CompanyLabel" value="Company:"/>
<property category="sys" name="Copyright" value="Copyright (c) 2002"/>
<property category="sys" name="CopyrightLabel" value="Copyright:"/>
<property category="sys" name="DefaultPath" value="src"/>
<property category="sys" name="Description" value="Provides an environemnt for using the PMD aplication from within JBuilder"/>
<property category="sys" name="DescriptionLabel" value="Description:"/>
<property category="sys" name="DocPath" value="doc"/>
<property category="sys" name="ExcludeClassEnabled" value="0"/>
<property category="sys" name="IncludeTestPath" value="1"/>
<property category="sys" name="InstanceVisibility" value="2"/>
<property category="sys" name="JDK" value="java 1.3.1-b24"/>
<property category="sys" name="LastTag" value="0"/>
<property category="sys" name="Libraries" value="Open Tools SDK;PMD;Ant;Xerces"/>
<property category="sys" name="MakeStable" value="0"/>
<property category="sys" name="OutPath" value="classes"/>
<property category="sys" name="SourcePath" value="src;test;../PMD/src"/>
<property category="sys" name="TestPath" value="test"/>
<property category="sys" name="Title" value="JBuilder OpenTool for PMD"/>
<property category="sys" name="TitleLabel" value="Title:"/>
<property category="sys" name="Version" value="1.0"/>
<property category="sys" name="VersionLabel" value="@version"/>
<property category="sys" name="WorkingDirectory" value="."/>
<node name="PMDOpenTool" type="Archive">
<property category="archiving" name="archiverClass" value="com.borland.jbuilder.wizard.archive.OpenToolArchiver"/>
<property category="archiving" name="extraDeployRoots.1" value="C:pmdopentool.PMDOpenTool"/>
<property category="archiving" name="overrideManifestPath" value="classes.opentools"/>
<property category="archiving" name="targetPath" value="C%|/JBuilder7/lib/ext/PMDOpenTool.jar"/>
</node>
<file path="classes.opentools"/>
<file path="src/net/sourceforge/pmd/jbuilder/PMDOpenTool.java"/>
</project>

View File

@ -0,0 +1,33 @@
build.menu.1[0]=com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make
build.menu.2[0]=com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;rebuild
debug.NoTracingClasses.1[0]=23 com.borland.datastore.*1 1 -1
debug.NoTracingClasses.10[0]=7 javax.*1 1 -1
debug.NoTracingClasses.11[0]=5 sun.*1 1 -1
debug.NoTracingClasses.12[0]=23 com.borland.appclient.*1 1 -1
debug.NoTracingClasses.13[0]=21 com.borland.console.*1 1 -1
debug.NoTracingClasses.14[0]=17 com.borland.ejb.*1 1 -1
debug.NoTracingClasses.15[0]=24 com.borland.enterprise.*1 1 -1
debug.NoTracingClasses.16[0]=18 com.borland.jafa.*1 1 -1
debug.NoTracingClasses.17[0]=17 com.borland.jss.*1 1 -1
debug.NoTracingClasses.18[0]=24 com.borland.management.*1 1 -1
debug.NoTracingClasses.19[0]=23 com.borland.primetime.*1 1 -1
debug.NoTracingClasses.2[0]=21 com.borland.dbswing.*1 1 -1
debug.NoTracingClasses.20[0]=22 com.borland.security.*1 1 -1
debug.NoTracingClasses.21[0]=18 com.borland.util.*1 1 -1
debug.NoTracingClasses.22[0]=17 com.borland.xml.*1 1 -1
debug.NoTracingClasses.23[0]=13 com.inprise.*1 1 -1
debug.NoTracingClasses.24[0]=15 com.visigenic.*1 1 -1
debug.NoTracingClasses.25[0]=9 org.omg.*1 1 -1
debug.NoTracingClasses.3[0]=16 com.borland.dx.*1 1 -1
debug.NoTracingClasses.4[0]=16 com.borland.jb.*1 1 -1
debug.NoTracingClasses.5[0]=18 com.borland.jbcl.*1 1 -1
debug.NoTracingClasses.6[0]=30 com.borland.jbuilder.runtime.*1 1 -1
debug.NoTracingClasses.7[0]=17 com.borland.sql.*1 1 -1
debug.NoTracingClasses.8[0]=9 com.sun.*1 1 -1
debug.NoTracingClasses.9[0]=6 java.*1 1 -1
history.files.active[0]=C%|/JBuilder7/lib/ext/PMDOpenTool.jar
history.files.open.1[0]=C%|/JBuilder7/lib/ext/PMDOpenTool.jar
history.files.open.2[0]=src/net/sourceforge/pmd/jbuilder/PMDOpenTool.java,F;0,0
sys.Author[0]=David Craine
sys.DefaultPackage[0]=pmdopentool
wizard.package.package_history.1[0]=pmdopentool

View File

@ -0,0 +1 @@
OpenTools-UI: pmdopentool.PMDOpenTool

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,194 @@
package net.sourceforge.pmd.jbuilder;
import java.io.*;
import java.util.*;
import javax.swing.text.*;
import com.borland.jbuilder.*;
import com.borland.jbuilder.node.*;
import com.borland.primetime.*;
import com.borland.primetime.ide.*;
import com.borland.primetime.node.*;
import com.borland.primetime.viewer.*;
import net.sourceforge.pmd.*;
import net.sourceforge.pmd.reports.*;
import com.borland.primetime.actions.DelegateHandler;
import com.borland.primetime.actions.DelegateAction;
import javax.swing.Action;
import com.borland.primetime.editor.LineMark;
import com.borland.primetime.editor.EditorPane;
import com.borland.primetime.editor.EditorManager;
import com.borland.primetime.editor.MasterStyleContext;
import java.awt.Color;
/**
* <p>Title: JBuilder OpenTool for PMD</p>
* <p>Description: Provides an environemnACTION_PMDCheckt for using the PMD aplication from within JBuilder</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: InfoEther</p>
* @author David Craine
* @version 1.0
*/
public class PMDOpenTool {
static MessageCategory msgCat = new MessageCategory("PMD Results");
public PMDOpenTool() {
int i;
int a;
}
public static void initOpenTool(byte majorVersion, byte minorVersion) {
if (majorVersion == PrimeTime.CURRENT_MAJOR_VERSION) {
JBuilderMenu.GROUP_Tools.add(ACTION_PMDCheck);
registerWithContentManager();
}
}
/**
* Registers an "PMD Checker" action with the ContentManager (Tabs)
* The action will not be visible if multiple nodes are selected
*/
private static void registerWithContentManager()
{
ContextActionProvider cap = new ContextActionProvider()
{
public Action getContextAction(Browser browser, Node[] nodes)
{
return ACTION_PMDCheck;
}
};
ContentManager.registerContextActionProvider(cap);
}
public static Report instanceCheck(String text) {
PMD pmd = new PMD();
ReportFactory rf = new ReportFactory();
RuleContext ctx = new RuleContext();
RuleSetFactory ruleSetFactory = new RuleSetFactory();
RuleSet rules = ruleSetFactory.createRuleSet(pmd.getClass().getClassLoader().getResourceAsStream("rulesets/unusedcode.xml"));
ctx.setReport(rf.createReport("xml"));
ctx.setSourceCodeFilename("this");
try {
// TODO switch to use StringReader once PMD 0.4 gets released
pmd.processFile(new StringBufferInputStream(text), rules, ctx);
return ctx.getReport();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
return null;
}
public static /*final*/ BrowserAction ACTION_PMDCheck =
// A new action with short menu string, mnemonic, and long menu string
new BrowserAction("PMD Checker", 'P', "Displays PMD statistics about a Java File") {
// The function called when the menu is selected
public void actionPerformed(Browser browser) {
Node node = Browser.getActiveBrowser().getActiveNode();
if (node instanceof JavaFileNode) {
TextNodeViewer viewer = (TextNodeViewer)Browser.getActiveBrowser().getViewerOfType(node, TextNodeViewer.class);
if (viewer != null) {
Document doc = viewer.getEditor().getDocument();
try {
Report rpt = instanceCheck(doc.getText(0, doc.getLength()));
Browser.getActiveBrowser().getMessageView().clearMessages(msgCat);//clear the message window
if (rpt == null) {
Browser.getActiveBrowser().getMessageView().addMessage(msgCat, "Error Processing File");
}
else if (rpt.size() == 0) {
Browser.getActiveBrowser().getMessageView().addMessage(msgCat, "No violations detexted.");
}
else {
for (Iterator i = rpt.iterator(); i.hasNext(); ) {
RuleViolation rv = (RuleViolation)i.next();
PMDMessage pmdMsg = new PMDMessage(rv.getDescription() + " at line " + rv.getLine(), rv.getLine(), (JavaFileNode)node);
Browser.getActiveBrowser().getMessageView().addMessage(msgCat, pmdMsg);//add the result message
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
};
/**
* Main method for testing purposes
* @param args standard arguments
*/
public static void main(String[] args) {
Report ret = PMDOpenTool.instanceCheck("package abc; \npublic class foo {\npublic void bar() {int i;}\n}");
System.out.println("PMD: " + ret);
}
}
class PMDMessage extends Message {
final LineMark MARK = new HighlightMark();
JavaFileNode javaNode;
int line=0;
int column=0;
public PMDMessage(String msg, int line, JavaFileNode node) {
super(msg);
this.line = line;
this.javaNode = node;
}
public void selectAction(Browser browser) {
displayResult(browser, false);
}
public void messageAction(Browser browser) {
displayResult(browser, true);
}
private void displayResult(Browser browser, boolean requestFocus) {
try {
if (requestFocus || browser.isOpenNode(javaNode)) {
browser.setActiveNode(javaNode, requestFocus);
TextNodeViewer viewer = (TextNodeViewer)browser.getViewerOfType(javaNode, TextNodeViewer.class);
browser.setActiveViewer(javaNode, viewer, requestFocus);
EditorPane editor = viewer.getEditor();
editor.gotoPosition(line, column, false, EditorPane.CENTER_IF_NEAR_EDGE);
if (requestFocus)
editor.requestFocus();
else
editor.setTemporaryMark(line, MARK);
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
class HighlightMark extends LineMark {
static Style highlightStyle;
static {
StyleContext context = EditorManager.getStyleContext();
highlightStyle = context.addStyle("line_highlight", null);
highlightStyle.addAttribute(MasterStyleContext.DISPLAY_NAME, "Line highlight");
StyleConstants.setBackground(highlightStyle, Color.yellow);
StyleConstants.setForeground(highlightStyle, Color.black);
}
public HighlightMark() {
super(highlightStyle);
}
}