diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/core/rulesets/impl/RuleSetsManagerImpl.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/core/rulesets/impl/RuleSetsManagerImpl.java index 6931c35557..1b74d2cfe8 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/core/rulesets/impl/RuleSetsManagerImpl.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/core/rulesets/impl/RuleSetsManagerImpl.java @@ -42,7 +42,6 @@ import java.io.OutputStream; import java.io.StringWriter; import java.net.URL; import java.util.Collection; -import java.util.Iterator; import net.sourceforge.pmd.RuleSetFactory; import net.sourceforge.pmd.RuleSetNotFoundException; @@ -97,12 +96,12 @@ public class RuleSetsManagerImpl implements IRuleSetsManager { try { final RuleSet ruleSet = new RuleSet(); - for (int i = 0; i < ruleSetUrls.length; i++) { + for (String ruleSetUrl : ruleSetUrls) { final RuleSetFactory factory = new RuleSetFactory(); // NOPMD by Herlin on 21/06/06 23:25 - final Collection rules = factory.createSingleRuleSet(ruleSetUrls[i]).getRules(); + final Collection rules = factory.createRuleSet(ruleSetUrl).getRules(); for (final net.sourceforge.pmd.Rule pmdRule: rules) { final Rule rule = new Rule(); // NOPMD by Herlin on 21/06/06 23:29 - rule.setRef(ruleSetUrls[i] + '/' + pmdRule.getName()); + rule.setRef(ruleSetUrl + '/' + pmdRule.getName()); rule.setPmdRule(pmdRule); ruleSet.addRule(rule); } diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/AbstractDefaultCommand.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/AbstractDefaultCommand.java index 622dad6566..6e17511053 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/AbstractDefaultCommand.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/AbstractDefaultCommand.java @@ -37,10 +37,10 @@ package net.sourceforge.pmd.eclipse.runtime.cmd; import name.herlin.command.AbstractProcessableCommand; import name.herlin.command.CommandException; -import net.sourceforge.pmd.PMD; -import net.sourceforge.pmd.SourceType; import net.sourceforge.pmd.eclipse.plugin.PMDPlugin; import net.sourceforge.pmd.eclipse.runtime.preferences.IPreferences; +import net.sourceforge.pmd.lang.Language; +import net.sourceforge.pmd.lang.LanguageVersion; import org.apache.log4j.Logger; import org.eclipse.core.resources.IProject; @@ -73,6 +73,7 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @return Returns the readOnly. */ + @Override public boolean isReadOnly() { return readOnly; } @@ -87,6 +88,7 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @return Returns the description. */ + @Override public String getDescription() { return description; } @@ -101,6 +103,7 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @return Returns the name. */ + @Override public String getName() { return name; } @@ -122,6 +125,7 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @return Returns the outputProperties. */ + @Override public boolean hasOutputProperties() { return outputProperties; } @@ -129,6 +133,7 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @return Returns the readyToExecute. */ + @Override public boolean isReadyToExecute() { return readyToExecute; } @@ -185,11 +190,13 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand /** * @see name.herlin.command.AbstractProcessableCommand#execute() */ + @Override public abstract void execute() throws CommandException; /** * @see name.herlin.command.Command#reset() */ + @Override public abstract void reset(); /** @@ -259,19 +266,20 @@ public abstract class AbstractDefaultCommand extends AbstractProcessableCommand * @param project * @return */ - protected PMD getPmdEngineForProject(final IProject project) throws CommandException { + protected PMDEngine getPmdEngineForProject(final IProject project) throws CommandException { final IJavaProject javaProject = JavaCore.create(project); - final PMD pmdEngine = new PMD(); + final PMDEngine pmdEngine = new PMDEngine(); if (javaProject.exists()) { final String compilerCompliance = javaProject.getOption(JavaCore.COMPILER_COMPLIANCE, true); log.debug("compilerCompliance = " + compilerCompliance); - final SourceType s = SourceType.getSourceTypeForId("java " + compilerCompliance); - if (s != null) { - pmdEngine.setJavaVersion(s); - } else { - throw new CommandException("The target JDK, " + compilerCompliance + " is not yet supported"); // TODO NLS + + LanguageVersion languageVersion = Language.JAVA.getVersion(compilerCompliance); + if ( languageVersion == null ) { + throw new CommandException("The target JDK, " + compilerCompliance + " is not supported"); // TODO NLS } + pmdEngine.setLanguageVersion(languageVersion); + final IPreferences preferences = PMDPlugin.getDefault().loadPreferences(); if (preferences.isProjectBuildPathEnabled()) { pmdEngine.setClassLoader(new JavaProjectClassLoader(pmdEngine.getClassLoader(), javaProject)); diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/BaseVisitor.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/BaseVisitor.java index 6be54c762c..1765aae3fb 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/BaseVisitor.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/BaseVisitor.java @@ -69,7 +69,7 @@ public class BaseVisitor { private IProgressMonitor monitor; private boolean useTaskMarker = false; private Map> accumulator; - private PMD pmdEngine; + private PMDEngine pmdEngine; private RuleSet ruleSet; private int filesCount; private long pmdDuration; @@ -173,7 +173,7 @@ public class BaseVisitor { /** * @return Returns the pmdEngine. */ - public PMD getPmdEngine() { + public PMDEngine getPmdEngine() { return this.pmdEngine; } @@ -181,7 +181,7 @@ public class BaseVisitor { * @param pmdEngine * The pmdEngine to set. */ - public void setPmdEngine(final PMD pmdEngine) { + public void setPmdEngine(final PMDEngine pmdEngine) { this.pmdEngine = pmdEngine; } diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/PMDEngine.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/PMDEngine.java new file mode 100644 index 0000000000..1069f8a284 --- /dev/null +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/PMDEngine.java @@ -0,0 +1,48 @@ +package net.sourceforge.pmd.eclipse.runtime.cmd; + +import java.io.Reader; + +import net.sourceforge.pmd.Configuration; +import net.sourceforge.pmd.PMD; +import net.sourceforge.pmd.PMDException; +import net.sourceforge.pmd.RuleContext; +import net.sourceforge.pmd.RuleSet; +import net.sourceforge.pmd.RuleSets; +import net.sourceforge.pmd.lang.LanguageVersion; + +/** + * Temporary class to handle PMD 4.2.x compatibility issues. + * + * This should be removed once the Configuration class is working in PMD 5.0. + * + */ +@Deprecated +public class PMDEngine { + + private Configuration configuration = new Configuration(); + + // FIXME: PMD 5.0 + private LanguageVersion languageVersion; + + public void setLanguageVersion(LanguageVersion languageVersion) { + this.languageVersion = languageVersion; + } + + public void setClassLoader(ClassLoader classLoader) { + configuration.setClassLoader(classLoader); + } + + public ClassLoader getClassLoader() { + return configuration.getClassLoader(); + } + + public void processFile(Reader input, RuleSet ruleSet, RuleContext context) throws PMDException { + RuleSets set = new RuleSets(); + set.addRuleSet(ruleSet); + + PMD pmd = new PMD(); + pmd.setConfiguration(configuration); + pmd.processFile(input, set, context); + } + +} diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java index c8380c6e0f..e84fdd112a 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewCodeCmd.java @@ -44,7 +44,6 @@ import java.util.Set; import name.herlin.command.CommandException; import name.herlin.command.Timer; -import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.RuleSet; import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants; import net.sourceforge.pmd.eclipse.plugin.PMDPlugin; @@ -112,6 +111,7 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { /** * @see name.herlin.command.AbstractProcessableCommand#execute() */ + @Override public void execute() throws CommandException { log.info("ReviewCode command starting."); try { @@ -227,6 +227,7 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { /** * @see name.herlin.command.Command#reset() */ + @Override public void reset() { this.resources.clear(); this.markers = new HashMap>(); @@ -237,6 +238,7 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { /** * @see name.herlin.command.Command#isReadyToExecute() */ + @Override public boolean isReadyToExecute() { return this.resources.size() != 0 || this.resourceDelta != null; } @@ -289,7 +291,7 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { final IProject project = resource.getProject(); final IProjectProperties properties = PMDPlugin.getDefault().loadProjectProperties(project); final RuleSet ruleSet = properties.getProjectRuleSet(); - final PMD pmdEngine = getPmdEngineForProject(project); + final PMDEngine pmdEngine = getPmdEngineForProject(project); setStepsCount(countResourceElement(resource)); log.debug("Visiting resource " + resource.getName() + " : " + getStepsCount()); @@ -328,8 +330,8 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { final IJavaProject javaProject = JavaCore.create(project); final IClasspathEntry[] entries = javaProject.getRawClasspath(); - for (int i = 0; i < entries.length; i++) { - if (entries[i].getEntryKind() == IClasspathEntry.CPE_SOURCE) { + for (IClasspathEntry entrie : entries) { + if (entrie.getEntryKind() == IClasspathEntry.CPE_SOURCE) { // phherlin note: this code is ugly but I don't how to do otherwise. // The IWorkspaceRoot getContainerLocation(IPath) always return null. @@ -337,12 +339,12 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { // to know if the entry is a folder or a project ! IContainer sourceContainer = null; try { - sourceContainer = ResourcesPlugin.getWorkspace().getRoot().getFolder(entries[i].getPath()); + sourceContainer = ResourcesPlugin.getWorkspace().getRoot().getFolder(entrie.getPath()); } catch (IllegalArgumentException e) { - sourceContainer = ResourcesPlugin.getWorkspace().getRoot().getProject(entries[i].getPath().toString()); + sourceContainer = ResourcesPlugin.getWorkspace().getRoot().getProject(entrie.getPath().toString()); } if (sourceContainer == null) { - log.warn("Source container " + entries[i].getPath() + " for project " + project.getName() + " is not valid"); + log.warn("Source container " + entrie.getPath() + " for project " + project.getName() + " is not valid"); } else { processResource(sourceContainer); } @@ -362,7 +364,7 @@ public class ReviewCodeCmd extends AbstractDefaultCommand { final IProject project = this.resourceDelta.getResource().getProject(); final IProjectProperties properties = PMDPlugin.getDefault().loadProjectProperties(project); final RuleSet ruleSet = properties.getProjectRuleSet(); - final PMD pmdEngine = getPmdEngineForProject(project); + final PMDEngine pmdEngine = getPmdEngineForProject(project); this.setStepsCount(countDeltaElement(this.resourceDelta)); log.debug("Visit of resource delta : " + getStepsCount()); diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewResourceForRuleCommand.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewResourceForRuleCommand.java index c886c75c6b..322a38ffe8 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewResourceForRuleCommand.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/runtime/cmd/ReviewResourceForRuleCommand.java @@ -40,11 +40,9 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import name.herlin.command.CommandException; -import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.PMDException; import net.sourceforge.pmd.Report; import net.sourceforge.pmd.Rule; @@ -130,7 +128,7 @@ public class ReviewResourceForRuleCommand extends AbstractDefaultCommand { && file.getFileExtension().equals("java")) { final RuleSet ruleSet = new RuleSet(); ruleSet.addRule(rule); - final PMD pmdEngine = getPmdEngineForProject(project); + final PMDEngine pmdEngine = getPmdEngineForProject(project); try { this.context = new RuleContext(); diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowAnomalyTableContentProvider.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowAnomalyTableContentProvider.java index 00c4059312..7769d21d12 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowAnomalyTableContentProvider.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowAnomalyTableContentProvider.java @@ -22,7 +22,7 @@ public class DataflowAnomalyTableContentProvider implements IStructuredContentPr public Object[] getElements(Object inputElement) { Object[] result = new Object[0]; if (inputElement instanceof Iterator) { - final Iterator violationsIterator = (Iterator)inputElement; + final Iterator violationsIterator = (Iterator)inputElement; final List violations = new ArrayList(); for (int count = 0; violationsIterator.hasNext() && count < MAX_ROWS; count++) { final DaaRuleViolation violation = violationsIterator.next(); diff --git a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowViewPage.java b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowViewPage.java index 6b9f563845..cbe48ada4b 100644 --- a/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowViewPage.java +++ b/pmd-eclipse-plugin/plugins/net.sourceforge.pmd.eclipse.plugin/src/net/sourceforge/pmd/eclipse/ui/views/DataflowViewPage.java @@ -7,15 +7,14 @@ import java.util.List; import name.herlin.command.CommandException; import net.sourceforge.pmd.RuleViolation; -import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.PMDException; import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.RuleSet; import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; -import net.sourceforge.pmd.dfa.DaaRule; -import net.sourceforge.pmd.lang.dfa.DataFlowNode; +import net.sourceforge.pmd.lang.java.rule.controversial.DataflowAnomalyAnalysisRule; import net.sourceforge.pmd.eclipse.runtime.PMDRuntimeConstants; import net.sourceforge.pmd.eclipse.runtime.cmd.ReviewResourceForRuleCommand; +import net.sourceforge.pmd.eclipse.runtime.cmd.PMDEngine; import net.sourceforge.pmd.eclipse.plugin.PMDPlugin; import net.sourceforge.pmd.eclipse.ui.model.FileRecord; import net.sourceforge.pmd.eclipse.ui.nls.StringKeys; @@ -271,7 +270,7 @@ public class DataflowViewPage extends Page implements IPropertyListener, ISelect // run PMD using the DFAGraphRule // and the Text of the Resource - new PMD().processFile(reader, rs, ctx); + new PMDEngine().processFile(reader, rs, ctx); // the Rule then can give us the Methods methodList.addAll(dfaGraphRule.getMethods()); @@ -423,7 +422,7 @@ public class DataflowViewPage extends Page implements IPropertyListener, ISelect this.isTableRefreshed = true; try { final ReviewResourceForRuleCommand cmd = new ReviewResourceForRuleCommand(); - final DaaRule rule = new DaaRule(); + final DataflowAnomalyAnalysisRule rule = new DataflowAnomalyAnalysisRule(); rule.setUsesDFA(); cmd.setUserInitiated(false); cmd.setRule(rule);