modified PMD to accept an InputStream as well as a File

git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@50 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
Tom Copeland
2002-06-25 14:16:19 +00:00
parent 37a7eedfdc
commit 05425083cb
5 changed files with 68 additions and 66 deletions

View File

@@ -3,6 +3,7 @@
<property name="lib" value="lib\"/>
<property name="src" value="src\"/>
<property name="build" value="build\"/>
<property name="test-data" value="test-data\"/>
<property name="regress" value="regress\"/>
<property name="reports" value="reports\"/>
@@ -29,6 +30,7 @@
<target name="pmd">
<taskdef name="pmd" classname="net.sourceforge.pmd.PMDTask"/>
<pmd reportFile="c:\jdk.xml" verbose="false" rulesettype="general" format="xml">
<!--<fileset dir="c:\data\pmd\pmd\src">-->
<fileset dir="c:\j2sdk1.4.0\src">
<include name="**/*.java"/>
</fileset>
@@ -39,6 +41,7 @@
<junit printsummary="yes" haltonfailure="yes">
<classpath>
<pathelement location="${build}" />
<pathelement location="${test-data}" />
<pathelement path="${java.class.path}" />
</classpath>

View File

@@ -2,4 +2,5 @@ set CVSROOT=:ext:tomcopeland@cvs.pmd.sourceforge.net:/cvsroot/pmd
set HOME=c:
set CVS_RSH=c:\bin\ssh\ssh
set CLASSPATH=../build/
set CLASSPATH=%CLASSPATH%;../test-data/
set CLASSPATH=%CLASSPATH%;c:\javacc2.1\bin\lib\JavaCC.zip

View File

@@ -9,6 +9,7 @@ import junit.framework.TestCase;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import net.sourceforge.pmd.*;
@@ -20,52 +21,52 @@ public class FunctionalTest extends TestCase{
}
public void testUnusedLocal1() {
Report report = process(new File(root() + "Unused1.java"));
Report report = process("Unused1.java");
assertEquals(1, report.getSize());
assertEquals(new UnusedLocalVariableRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedLocal2() {
Report report = process(new File(root() + "Unused2.java"));
Report report = process("Unused2.java");
assertEquals(1, report.getSize());
assertEquals(new UnusedLocalVariableRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedLocal3() {
Report report = process(new File(root() + "Unused3.java"));
Report report = process("Unused3.java");
assertEquals(1, report.getSize());
assertEquals(new UnusedLocalVariableRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedLocal4() {
Report report = process(new File(root() + "Unused4.java"));
Report report = process("Unused4.java");
assertTrue(report.empty());
}
public void testUnusedLocal5() {
Report report = process(new File(root() + "Unused5.java"));
Report report = process("Unused5.java");
assertEquals(1, report.getSize());
assertEquals(new UnusedLocalVariableRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedLocal6() {
Report report = process(new File(root() + "Unused6.java"));
Report report = process("Unused6.java");
assertTrue(report.empty());
}
public void testUnusedLocal7() {
Report report = process(new File(root() + "Unused7.java"));
Report report = process("Unused7.java");
assertTrue(report.empty());
}
public void testUnusedLocal8() {
Report report = process(new File(root() + "Unused8.java"));
Report report = process("Unused8.java");
assertEquals(1, report.getSize());
assertEquals(new SystemPropsRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedLocal9() {
Report report = process(new File(root() + "Unused9.java"));
Report report = process("Unused9.java");
assertEquals(2, report.getSize());
Iterator i = report.iterator();
assertEquals(new UnusedLocalVariableRule(), ((RuleViolation)i.next()).getRule());
@@ -73,113 +74,109 @@ public class FunctionalTest extends TestCase{
}
public void testUnusedLocal10() {
Report report = process(new File(root() + "Unused10.java"));
Report report = process("Unused10.java");
assertTrue(report.empty());
}
public void testEmptyCatchBlock() {
Report report = process(new File(root() + "EmptyCatchBlock.java"));
Report report = process("EmptyCatchBlock.java");
assertEquals(1, report.getSize());
assertEquals(new EmptyCatchBlockRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnnecessaryTemporaries() {
Report report = process(new File(root() + "UnnecessaryTemporary.java"));
Report report = process("UnnecessaryTemporary.java");
assertEquals(6, report.getSize());
assertEquals(new UnnecessaryConversionTemporaryRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testProps() {
Report report = process(new File(root() + "ContainsSystemGetProps.java"));
Report report = process("ContainsSystemGetProps.java");
assertEquals(3, report.getSize());
assertEquals(new SystemPropsRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testSystemIn() {
Report report = process(new File(root() + "ContainsSystemIn.java"));
Report report = process("ContainsSystemIn.java");
assertEquals(3, report.getSize());
assertEquals(new SystemOutRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testSystemOut() {
Report report = process(new File(root() + "ContainsSystemOut.java"));
Report report = process("ContainsSystemOut.java");
assertEquals(1, report.getSize());
assertEquals(new SystemOutRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testCreateAThread() {
Report report = process(new File(root() + "CreatesAThread.java"));
Report report = process("CreatesAThread.java");
assertEquals(1, report.getSize());
assertEquals(new DontCreateThreadsRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testCreateATimer() {
Report report = process(new File(root() + "CreatesATimer.java"));
Report report = process("CreatesATimer.java");
assertEquals(1, report.getSize());
assertEquals(new DontCreateTimersRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testEmptyIf() {
Report report = process(new File(root() + "EmptyIfStmtRule.java"));
Report report = process("EmptyIfStmtRule.java");
assertEquals(1, report.getSize());
assertEquals(new EmptyIfStmtRule(), ((RuleViolation)report.iterator().next()).getRule());
}
public void testUnusedPrivateInstanceVar1() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar1.java"));
Report report = process("UnusedPrivateInstanceVar1.java");
assertEquals(1, report.getSize());
Iterator i = report.iterator();
assertEquals(new UnusedPrivateInstanceVariableRule(), ((RuleViolation)i.next()).getRule());
}
public void testUnusedPrivateInstanceVar2() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar2.java"));
Report report = process("UnusedPrivateInstanceVar2.java");
assertTrue(report.empty());
}
public void testUnusedPrivateInstanceVar3() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar3.java"));
Report report = process("UnusedPrivateInstanceVar3.java");
assertEquals(1, report.getSize());
Iterator i = report.iterator();
assertEquals(new UnusedPrivateInstanceVariableRule(), ((RuleViolation)i.next()).getRule());
}
public void testUnusedPrivateInstanceVar4() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar4.java"));
Report report = process("UnusedPrivateInstanceVar4.java");
assertTrue(report.empty());
}
public void testUnusedPrivateInstanceVar6() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar6.java"));
Report report = process("UnusedPrivateInstanceVar6.java");
assertTrue(report.empty());
}
public void testUnusedPrivateInstanceVar7() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar7.java"));
Report report = process("UnusedPrivateInstanceVar7.java");
assertTrue(report.empty());
}
public void testUnusedPrivateInstanceVar8() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar8.java"));
Report report = process("UnusedPrivateInstanceVar8.java");
assertTrue(report.empty());
}
/*
TODO - this tests unused variables in nested classes
public void testUnusedPrivateInstanceVar9() {
Report report = process(new File(root() + "UnusedPrivateInstanceVar9.java"));
Report report = process("UnusedPrivateInstanceVar9.java");
assertEquals(1, report.getSize());
}
TODO - this tests unused variables in nested classes
*/
private Report process(File file) {
PMD p = new PMD();
return p.processFile(file, RuleFactory.ALL);
}
private String root() {
if (System.getProperty("os.name").indexOf("Linux") != -1) {
return "/home/build/hourly/working/pmd/test-data" + System.getProperty("file.separator");
private Report process(String file) {
try {
PMD p = new PMD();
return p.processFile(file, getClass().getClassLoader().getResourceAsStream(file), RuleFactory.ALL);
} catch (FileNotFoundException fnfe) {
throw new RuntimeException("File " + file + " not found");
}
return "c:\\data\\pmd\\pmd\\test-data" + System.getProperty("file.separator");
}
}

View File

@@ -16,19 +16,12 @@ import java.util.Iterator;
public class PMD {
public Report processFile(InputStream is) {
return null;
}
public Report processFile(FileReader fr) {
return null; }
public Report processFile(File file, String ruleSetType) {
Report report = new Report(file.getAbsolutePath());
public Report processFile(String filename, InputStream is, String ruleSetType) throws FileNotFoundException {
Report report = new Report(filename);
List rules = RuleFactory.createRules(ruleSetType);
try {
Reader reader = new BufferedReader(new FileReader(file));
InputStreamReader reader = new InputStreamReader(is);
JavaParser parser = new JavaParser(reader);
ASTCompilationUnit c = parser.CompilationUnit();
//c.dump("");
@@ -37,17 +30,17 @@ public class PMD {
c.childrenAccept(rule, report);
}
reader.close();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (ParseException pe) {
System.out.println("Error while parsing " + file.getAbsolutePath() + " at line " + pe.currentToken.beginLine + "; continuing...");
} catch (IOException ioe) {
ioe.printStackTrace();
System.out.println("Error while parsing " + filename + " at line " + pe.currentToken.beginLine + "; continuing...");
} catch (Throwable t) {
System.out.println("Error while parsing " + file.getAbsolutePath() + "; "+ t.getMessage() + "; continuing...");
System.out.println("Error while parsing " + filename + "; "+ t.getMessage() + "; continuing...");
//t.printStackTrace();
}
return report;
}
public Report processFile(File file, String ruleSetType) throws FileNotFoundException{
return processFile(file.getAbsolutePath(), new FileInputStream(file), ruleSetType);
}
public static void main(String[] args) {
@@ -59,7 +52,11 @@ public class PMD {
throw new RuntimeException("File " + args[0] + " doesn't exist");
}
PMD pmd = new PMD();
Report report = pmd.processFile(input, RuleFactory.ALL);
System.out.println("<pmd>" + report.renderToXML() + "</pmd>");
try {
Report report = pmd.processFile(input, RuleFactory.ALL);
System.out.println("<pmd>" + report.renderToXML() + "</pmd>");
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
}
}

View File

@@ -60,19 +60,23 @@ public class PMDTask extends Task {
DirectoryScanner ds = fs.getDirectoryScanner(project);
String[] srcFiles = ds.getIncludedFiles();
for (int j=0; j<srcFiles.length; j++) {
File file = new File(ds.getBasedir() + System.getProperty("file.separator") + srcFiles[j]);
if (verbose) System.out.println(file.getAbsoluteFile());
PMD pmd = new PMD();
Report report = pmd.processFile(file, ruleSetType);
if (!report.empty()) {
if (format.equals("xml")) {
buf.append(report.renderToXML());
} else if (format.equals("text")) {
buf.append(report.renderToText());
} else {
throw new BuildException("Report format must be either 'text' or 'xml'; you specified " + format);
try {
File file = new File(ds.getBasedir() + System.getProperty("file.separator") + srcFiles[j]);
if (verbose) System.out.println(file.getAbsoluteFile());
PMD pmd = new PMD();
Report report = pmd.processFile(file, ruleSetType);
if (!report.empty()) {
if (format.equals("xml")) {
buf.append(report.renderToXML());
} else if (format.equals("text")) {
buf.append(report.renderToText());
} else {
throw new BuildException("Report format must be either 'text' or 'xml'; you specified " + format);
}
buf.append(System.getProperty("line.separator"));
}
buf.append(System.getProperty("line.separator"));
} catch (FileNotFoundException fnfe) {
throw new BuildException(fnfe);
}
}
}