diff --git a/pmd/etc/changelog.txt b/pmd/etc/changelog.txt index a21588e3d9..97841b33ba 100644 --- a/pmd/etc/changelog.txt +++ b/pmd/etc/changelog.txt @@ -28,6 +28,7 @@ ArrayIsStoredDirectly rule now checks Constructors undo/redo added to text areas in Designer. Better 'create rule XML' panel in Designer. use of entrySet to iterate over Maps. +1.6 added as a valid option for targetjdk. October 4, 2006 - 3.8: New rules: diff --git a/pmd/regress/test/net/sourceforge/pmd/CommandLineOptionsTest.java b/pmd/regress/test/net/sourceforge/pmd/CommandLineOptionsTest.java index b8c62f4dff..76978a5b4e 100644 --- a/pmd/regress/test/net/sourceforge/pmd/CommandLineOptionsTest.java +++ b/pmd/regress/test/net/sourceforge/pmd/CommandLineOptionsTest.java @@ -43,6 +43,8 @@ public class CommandLineOptionsTest extends TestCase { assertEquals("1.3", opt.getTargetJDK()); opt = new CommandLineOptions(new String[]{"file", "format", "ruleset", "-targetjdk", "1.5"}); assertEquals("1.5", opt.getTargetJDK()); + opt = new CommandLineOptions(new String[]{"file", "format", "ruleset", "-targetjdk", "1.6"}); + assertEquals("1.6", opt.getTargetJDK()); } public void testDebug() { diff --git a/pmd/regress/test/net/sourceforge/pmd/ant/PMDTaskTest.java b/pmd/regress/test/net/sourceforge/pmd/ant/PMDTaskTest.java index 2a6b9223d4..b4f6e51c8b 100644 --- a/pmd/regress/test/net/sourceforge/pmd/ant/PMDTaskTest.java +++ b/pmd/regress/test/net/sourceforge/pmd/ant/PMDTaskTest.java @@ -62,10 +62,10 @@ public class PMDTaskTest extends TestCase { public void testInvalidJDK() { PMDTask task = new PMDTask(); - task.setTargetJDK("1.6"); + task.setTargetJDK("1.7"); try { task.execute(); - throw new RuntimeException("Should have thrown a BuildException - JDK 1.6 targeted"); + throw new RuntimeException("Should have thrown a BuildException - JDK 1.7 targeted"); } catch (BuildException be) { // cool } diff --git a/pmd/src/net/sourceforge/pmd/CommandLineOptions.java b/pmd/src/net/sourceforge/pmd/CommandLineOptions.java index ef712064c0..9fee077d99 100644 --- a/pmd/src/net/sourceforge/pmd/CommandLineOptions.java +++ b/pmd/src/net/sourceforge/pmd/CommandLineOptions.java @@ -168,7 +168,7 @@ public class CommandLineOptions { PMD.EOL + "Optional arguments that may be put after the mandatory arguments are: " + PMD.EOL + "-debug: prints debugging information " + PMD.EOL + - "-targetjdk: specifies a language version to target - 1.3, 1.4, or 1.5" + PMD.EOL + + "-targetjdk: specifies a language version to target - 1.3, 1.4, 1.5 or 1.6" + PMD.EOL + "-encoding: specifies the character set encoding of the source code files PMD is reading (i.e., UTF-8)" + PMD.EOL + "-excludemarker: specifies the String that marks the a line which PMD should ignore; default is NOPMD" + PMD.EOL + "-shortnames: prints shortened filenames in the report" + PMD.EOL + diff --git a/pmd/src/net/sourceforge/pmd/PMD.java b/pmd/src/net/sourceforge/pmd/PMD.java index b392e09846..6798a0acfc 100644 --- a/pmd/src/net/sourceforge/pmd/PMD.java +++ b/pmd/src/net/sourceforge/pmd/PMD.java @@ -233,6 +233,10 @@ public class PMD { if (opts.debugEnabled()) System.out.println("In JDK 1.5 mode"); pmd.setJavaVersion(SourceType.JAVA_15); + } else if (opts.getTargetJDK().equals("1.6")) { + if (opts.debugEnabled()) + System.out.println("In JDK 1.6 mode"); + pmd.setJavaVersion(SourceType.JAVA_16); } else { if (opts.debugEnabled()) System.out.println("In JDK 1.4 mode"); diff --git a/pmd/src/net/sourceforge/pmd/SourceType.java b/pmd/src/net/sourceforge/pmd/SourceType.java index b46065577b..0579f33149 100644 --- a/pmd/src/net/sourceforge/pmd/SourceType.java +++ b/pmd/src/net/sourceforge/pmd/SourceType.java @@ -9,6 +9,7 @@ public final class SourceType implements Comparable { public static final SourceType JAVA_13 = new SourceType("java 1.3"); public static final SourceType JAVA_14 = new SourceType("java 1.4"); public static final SourceType JAVA_15 = new SourceType("java 1.5"); + public static final SourceType JAVA_16 = new SourceType("java 1.6"); public static final SourceType JSP = new SourceType("jsp"); private String id; diff --git a/pmd/src/net/sourceforge/pmd/TargetJDK1_6.java b/pmd/src/net/sourceforge/pmd/TargetJDK1_6.java new file mode 100644 index 0000000000..4463e0efcf --- /dev/null +++ b/pmd/src/net/sourceforge/pmd/TargetJDK1_6.java @@ -0,0 +1,41 @@ +/* + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ +package net.sourceforge.pmd; + +import net.sourceforge.pmd.ast.JavaCharStream; +import net.sourceforge.pmd.ast.JavaParser; + +import java.io.InputStream; +import java.io.Reader; + +/** + * This is an implementation of {@link net.sourceforge.pmd.TargetJDKVersion} for + * JDK 1.6. + * + */ +public class TargetJDK1_6 implements TargetJDKVersion { + + /** + * @see net.sourceforge.pmd.TargetJDKVersion#createParser(InputStream) + */ + public JavaParser createParser(InputStream in) { + JavaParser jp = new JavaParser(new JavaCharStream(in)); + jp.setJDK15(); + return jp; + } + + /** + * @see net.sourceforge.pmd.TargetJDKVersion#createParser(Reader) + */ + public JavaParser createParser(Reader in) { + JavaParser jp = new JavaParser(new JavaCharStream(in)); + jp.setJDK15(); + return jp; + } + + public String getVersionString() { + return "1.6"; + } + +} diff --git a/pmd/src/net/sourceforge/pmd/ant/PMDTask.java b/pmd/src/net/sourceforge/pmd/ant/PMDTask.java index 57a03e453d..9cbf4af2cf 100644 --- a/pmd/src/net/sourceforge/pmd/ant/PMDTask.java +++ b/pmd/src/net/sourceforge/pmd/ant/PMDTask.java @@ -142,6 +142,10 @@ public class PMDTask extends Task { log("Targeting Java language version 1.5", Project.MSG_VERBOSE); pmd = new PMD(); pmd.setJavaVersion(SourceType.JAVA_15); + } else if (targetJDK.equals("1.6")) { + log("Targeting Java language version 1.6", Project.MSG_VERBOSE); + pmd = new PMD(); + pmd.setJavaVersion(SourceType.JAVA_16); } else if(targetJDK.equals("jsp")){ log("Targeting JSP", Project.MSG_VERBOSE); pmd = new PMD(); @@ -242,8 +246,8 @@ public class PMDTask extends Task { ruleSetFiles = getNestedRuleSetFiles(); } - if (!targetJDK.equals("1.3") && !targetJDK.equals("1.4") && !targetJDK.equals("1.5") && !targetJDK.equals("jsp")) { - throw new BuildException("The targetjdk attribute, if used, must be set to either '1.3', '1.4', or '1.5', or 'jsp'"); + if (!targetJDK.equals("1.3") && !targetJDK.equals("1.4") && !targetJDK.equals("1.5") && !targetJDK.equals("1.6") && !targetJDK.equals("jsp")) { + throw new BuildException("The targetjdk attribute, if used, must be set to either '1.3', '1.4', '1.5', '1.6' or 'jsp'"); } } diff --git a/pmd/src/net/sourceforge/pmd/parsers/Java16Parser.java b/pmd/src/net/sourceforge/pmd/parsers/Java16Parser.java new file mode 100644 index 0000000000..6b32b35fb1 --- /dev/null +++ b/pmd/src/net/sourceforge/pmd/parsers/Java16Parser.java @@ -0,0 +1,34 @@ +package net.sourceforge.pmd.parsers; + +import net.sourceforge.pmd.ast.JavaCharStream; +import net.sourceforge.pmd.ast.JavaParser; +import net.sourceforge.pmd.ast.ParseException; + +import java.io.Reader; +import java.util.Map; + +/** + * Adapter for the JavaParser, using Java 1.6 grammar. + * + */ +public class Java16Parser implements Parser { + + private JavaParser parser; + private String marker; + + public Object parse(Reader source) throws ParseException { + parser = new JavaParser(new JavaCharStream(source)); + parser.setJDK15(); + parser.setExcludeMarker(marker); + return parser.CompilationUnit(); + } + + public Map getExcludeMap() { + return parser.getExcludeMap(); + } + + public void setExcludeMarker(String marker) { + this.marker = marker; + } + +} diff --git a/pmd/src/net/sourceforge/pmd/sourcetypehandlers/Java16Handler.java b/pmd/src/net/sourceforge/pmd/sourcetypehandlers/Java16Handler.java new file mode 100644 index 0000000000..4c51d0132a --- /dev/null +++ b/pmd/src/net/sourceforge/pmd/sourcetypehandlers/Java16Handler.java @@ -0,0 +1,12 @@ +package net.sourceforge.pmd.sourcetypehandlers; + +import net.sourceforge.pmd.parsers.Java16Parser; +import net.sourceforge.pmd.parsers.Parser; + +public class Java16Handler extends JavaTypeHandler { + + public Parser getParser() { + return new Java16Parser(); + } + +} diff --git a/pmd/src/net/sourceforge/pmd/sourcetypehandlers/SourceTypeHandlerBroker.java b/pmd/src/net/sourceforge/pmd/sourcetypehandlers/SourceTypeHandlerBroker.java index 867cb5b140..6012e59bc4 100644 --- a/pmd/src/net/sourceforge/pmd/sourcetypehandlers/SourceTypeHandlerBroker.java +++ b/pmd/src/net/sourceforge/pmd/sourcetypehandlers/SourceTypeHandlerBroker.java @@ -31,6 +31,7 @@ public class SourceTypeHandlerBroker { mapSourceTypeOnSourceTypeHandler.put(SourceType.JAVA_13, new Java13Handler()); mapSourceTypeOnSourceTypeHandler.put(SourceType.JAVA_14, new Java14Handler()); mapSourceTypeOnSourceTypeHandler.put(SourceType.JAVA_15, new Java15Handler()); + mapSourceTypeOnSourceTypeHandler.put(SourceType.JAVA_16, new Java16Handler()); mapSourceTypeOnSourceTypeHandler.put(SourceType.JSP, new JspTypeHandler()); } diff --git a/pmd/src/net/sourceforge/pmd/util/Benchmark.java b/pmd/src/net/sourceforge/pmd/util/Benchmark.java index e90da4c874..c591a444e3 100644 --- a/pmd/src/net/sourceforge/pmd/util/Benchmark.java +++ b/pmd/src/net/sourceforge/pmd/util/Benchmark.java @@ -13,6 +13,7 @@ import net.sourceforge.pmd.SourceType; import net.sourceforge.pmd.TargetJDK1_3; import net.sourceforge.pmd.TargetJDK1_4; import net.sourceforge.pmd.TargetJDK1_5; +import net.sourceforge.pmd.TargetJDK1_6; import net.sourceforge.pmd.TargetJDKVersion; import net.sourceforge.pmd.ast.JavaParser; import net.sourceforge.pmd.cpd.FileFinder; @@ -75,8 +76,13 @@ public class Benchmark { List files = new FileFinder().findFilesFrom(srcDir, new SourceFileOrDirectoryFilter(new SourceFileSelector()), true); SourceType jdk = SourceType.JAVA_14; - if (findOptionalStringValue(args, "--targetjdk", "1.4").equals("1.5")) { + String targetjdk = findOptionalStringValue(args, "--targetjdk", "1.4"); + if (targetjdk.equals("1.3")) { + jdk = SourceType.JAVA_13; + } else if (targetjdk.equals("1.5")) { jdk = SourceType.JAVA_15; + } else if (targetjdk.equals("1.6")) { + jdk = SourceType.JAVA_16; } boolean debug = findBooleanSwitch(args, "--debug"); boolean parseOnly = findBooleanSwitch(args, "--parse-only"); @@ -124,8 +130,10 @@ public class Benchmark { jdk = new TargetJDK1_3(); } else if (t.equals(SourceType.JAVA_14)) { jdk = new TargetJDK1_4(); - } else { + } else if (t.equals(SourceType.JAVA_15)) { jdk = new TargetJDK1_5(); + } else { + jdk = new TargetJDK1_6(); } JavaParser parser = jdk.createParser(new FileReader(file)); parser.CompilationUnit(); diff --git a/pmd/src/net/sourceforge/pmd/util/designer/Designer.java b/pmd/src/net/sourceforge/pmd/util/designer/Designer.java index 8008f5db7b..1bf6b1f96b 100644 --- a/pmd/src/net/sourceforge/pmd/util/designer/Designer.java +++ b/pmd/src/net/sourceforge/pmd/util/designer/Designer.java @@ -10,6 +10,7 @@ import net.sourceforge.pmd.SourceType; import net.sourceforge.pmd.TargetJDK1_3; import net.sourceforge.pmd.TargetJDK1_4; import net.sourceforge.pmd.TargetJDK1_5; +import net.sourceforge.pmd.TargetJDK1_6; import net.sourceforge.pmd.ast.Node; import net.sourceforge.pmd.ast.ParseException; import net.sourceforge.pmd.ast.SimpleNode; @@ -78,6 +79,10 @@ public class Designer implements ClipboardOwner { public SimpleNode parse(StringReader sr) { return new TargetJDK1_5().createParser(sr).CompilationUnit(); }; }; + private static final Parser jdkParser1_6 = new Parser() { + public SimpleNode parse(StringReader sr) { return new TargetJDK1_6().createParser(sr).CompilationUnit(); }; + }; + private static final Parser jspParser = new Parser() { public SimpleNode parse(StringReader sr) { return new JspParser(new JspCharStream(sr)).CompilationUnit(); }; }; @@ -86,6 +91,7 @@ public class Designer implements ClipboardOwner { { "JDK 1.3", SourceType.JAVA_13, jdkParser1_3 }, { "JDK 1.4", SourceType.JAVA_14, jdkParser1_4 }, { "JDK 1.5", SourceType.JAVA_15, jdkParser1_5 }, + { "JDK 1.6", SourceType.JAVA_16, jdkParser1_6 }, { "JSP", SourceType.JSP, jspParser } }; diff --git a/pmd/src/net/sourceforge/pmd/util/viewer/gui/MainFrame.java b/pmd/src/net/sourceforge/pmd/util/viewer/gui/MainFrame.java index 10600cf2c2..c940eea11b 100644 --- a/pmd/src/net/sourceforge/pmd/util/viewer/gui/MainFrame.java +++ b/pmd/src/net/sourceforge/pmd/util/viewer/gui/MainFrame.java @@ -3,6 +3,7 @@ package net.sourceforge.pmd.util.viewer.gui; import net.sourceforge.pmd.TargetJDK1_3; import net.sourceforge.pmd.TargetJDK1_4; import net.sourceforge.pmd.TargetJDK1_5; +import net.sourceforge.pmd.TargetJDK1_6; import net.sourceforge.pmd.TargetJDKVersion; import net.sourceforge.pmd.ast.ParseException; import net.sourceforge.pmd.util.viewer.model.ViewerModel; @@ -37,6 +38,7 @@ public class MainFrame private JRadioButtonMenuItem jdk13MenuItem; private JRadioButtonMenuItem jdk14MenuItem; private JRadioButtonMenuItem jdk15MenuItem; + private JRadioButtonMenuItem jdk16MenuItem; /** * constructs and shows the frame @@ -89,6 +91,10 @@ public class MainFrame jdk15MenuItem.setSelected(false); group.add(jdk15MenuItem); menu.add(jdk15MenuItem); + jdk16MenuItem = new JRadioButtonMenuItem("JDK 1.6"); + jdk16MenuItem.setSelected(false); + group.add(jdk16MenuItem); + menu.add(jdk16MenuItem); menuBar.add(menu); setJMenuBar(menuBar); @@ -103,6 +109,8 @@ public class MainFrame return new TargetJDK1_4(); } else if (jdk13MenuItem.isSelected()) { return new TargetJDK1_3(); + } else if (jdk16MenuItem.isSelected()) { + return new TargetJDK1_6(); } return new TargetJDK1_5(); } diff --git a/pmd/xdocs/ant-task.xml b/pmd/xdocs/ant-task.xml index 937d7ad05e..3d9fada458 100644 --- a/pmd/xdocs/ant-task.xml +++ b/pmd/xdocs/ant-task.xml @@ -47,7 +47,7 @@
-debug
- prints a stacktrace if an error is encountered-shortnames
- puts shortened names in the report. This only works if the filename argument is a single directory-targetjdk [1.3|1.4|1.5]
- selects either JDK 1.3, 1.4 or 1.5 language compatibility; default is 1.4-targetjdk [1.3|1.4|1.5|1.6]
- selects either JDK 1.3, 1.4, 1.5 or 1.6 language compatibility; default is 1.4-encoding Cp1252
- uses the specified encoding for reading the source code files-excludemarker NOPMDFORME
- uses the specified string of characters as the marker for PMD to ignore. The default string is "NOPMD".-linkprefix
- path to HTML source, for summary html renderer only.