diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 6af90a277d..e77c2d16bd 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -39,6 +39,9 @@ Both are bugfixing releases. ### API Changes +* The static method `PMDParameters.transformParametersIntoConfiguration(PMDParameters)` is now deprecated, + for removal in 7.0.0. The new instance method `PMDParameters.toConfiguration()` replaces it. + ### External Contributions * [#941](https://github.com/pmd/pmd/pull/941): \[java] Use char notation to represent a character to improve performance - [reudismam](https://github.com/reudismam) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java b/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java index 30b55985b3..0532864b5d 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java @@ -203,6 +203,13 @@ public class PMD { return 0; } + // Log warning only once, if not explicitly disabled + if (!configuration.isIgnoreIncrementalAnalysis() && LOG.isLoggable(Level.WARNING)) { + final String version = PMDVersion.isUnknown() || PMDVersion.isSnapshot() ? "latest" : "pmd-" + PMDVersion.VERSION; + LOG.warning("This analysis could be faster, please consider using Incremental Analysis: " + + "https://pmd.github.io/" + version + "/pmd_userdocs_getting_started.html#incremental-analysis"); + } + Set languages = getApplicableLanguages(configuration, ruleSets); List files = getApplicableFiles(configuration, languages); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/PMDConfiguration.java b/pmd-core/src/main/java/net/sourceforge/pmd/PMDConfiguration.java index e3f5b786c9..ed2fb35b6f 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/PMDConfiguration.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/PMDConfiguration.java @@ -9,7 +9,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Properties; -import java.util.logging.Level; import java.util.logging.Logger; import net.sourceforge.pmd.cache.AnalysisCache; @@ -110,7 +109,7 @@ public class PMDConfiguration extends AbstractConfiguration { private boolean stressTest; private boolean benchmark; - private AnalysisCache analysisCache; + private AnalysisCache analysisCache = new NoopAnalysisCache(); private boolean ignoreIncrementalAnalysis; /** @@ -558,8 +557,7 @@ public class PMDConfiguration extends AbstractConfiguration { /** * Sets the rule set factory compatibility feature enabled/disabled. * - * @param ruleSetFactoryCompatibilityEnabled - * true if the feature should be enabled + * @param ruleSetFactoryCompatibilityEnabled {@code true} if the feature should be enabled * * @see RuleSetFactoryCompatibility */ @@ -576,7 +574,7 @@ public class PMDConfiguration extends AbstractConfiguration { // Make sure we are not null if (analysisCache == null || isIgnoreIncrementalAnalysis() && isAnalysisCacheFunctional()) { // sets a noop cache - setAnalysisCache(null); + setAnalysisCache(new NoopAnalysisCache()); } return analysisCache; @@ -587,22 +585,17 @@ public class PMDConfiguration extends AbstractConfiguration { * value of {@code null} will cause a Noop AnalysisCache to be used. * If incremental analysis was explicitly disabled ({@link #isIgnoreIncrementalAnalysis()}), * then this method is a noop. - * + * * @param cache The analysis cache to be used. */ public void setAnalysisCache(final AnalysisCache cache) { if (cache == null && isAnalysisCacheFunctional()) { analysisCache = new NoopAnalysisCache(); - - // Log warning only once, if not explicitly disabled - if (!isIgnoreIncrementalAnalysis() && LOG.isLoggable(Level.WARNING)) { - final String version = PMDVersion.isUnknown() || PMDVersion.isSnapshot() ? "latest" : "pmd-" + PMDVersion.VERSION; - LOG.warning("This analysis could be faster, please consider using Incremental Analysis: " - + "https://pmd.github.io/" + version + "/pmd_userdocs_getting_started.html#incremental-analysis"); - } - } else if (!isIgnoreIncrementalAnalysis()) { // ignore new value if incr. analysis is disabled + } else { analysisCache = cache; } + // the doc says it's a noop if incremental analysis was disabled, + // but it's actually the getter that enforces that } /** @@ -612,11 +605,9 @@ public class PMDConfiguration extends AbstractConfiguration { * @param cacheLocation The location of the analysis cache to be used. */ public void setAnalysisCacheLocation(final String cacheLocation) { - if (cacheLocation == null) { - setAnalysisCache(null); - } else { - setAnalysisCache(new FileAnalysisCache(new File(cacheLocation))); - } + setAnalysisCache(cacheLocation == null + ? new NoopAnalysisCache() + : new FileAnalysisCache(new File(cacheLocation))); } /** Returns true if the current analysis cache isn't noop. */ diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDParameters.java b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDParameters.java index cae4b1b908..03e80c5ce8 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDParameters.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cli/PMDParameters.java @@ -152,8 +152,43 @@ public class PMDParameters { * @throws IllegalArgumentException if the parameters are inconsistent or incomplete */ public PMDConfiguration toConfiguration() { - // the static method could probably be deprecated in favour of this one - return transformParametersIntoConfiguration(this); + if (null == this.getSourceDir() && null == this.getUri() && null == this.getFileListPath()) { + throw new IllegalArgumentException( + "Please provide a parameter for source root directory (-dir or -d), database URI (-uri or -u), or file list path (-filelist)."); + } + PMDConfiguration configuration = new PMDConfiguration(); + configuration.setInputPaths(this.getSourceDir()); + configuration.setInputFilePath(this.getFileListPath()); + configuration.setInputUri(this.getUri()); + configuration.setReportFormat(this.getFormat()); + configuration.setBenchmark(this.isBenchmark()); + configuration.setDebug(this.isDebug()); + configuration.setMinimumPriority(this.getMinimumPriority()); + configuration.setReportFile(this.getReportfile()); + configuration.setReportProperties(this.getProperties()); + configuration.setReportShortNames(this.isShortnames()); + configuration.setRuleSets(this.getRulesets()); + configuration.setRuleSetFactoryCompatibilityEnabled(!this.noRuleSetCompatibility); + configuration.setShowSuppressedViolations(this.isShowsuppressed()); + configuration.setSourceEncoding(this.getEncoding()); + configuration.setStressTest(this.isStress()); + configuration.setSuppressMarker(this.getSuppressmarker()); + configuration.setThreads(this.getThreads()); + configuration.setFailOnViolation(this.isFailOnViolation()); + configuration.setAnalysisCacheLocation(this.cacheLocation); + configuration.setIgnoreIncrementalAnalysis(this.isIgnoreIncrementalAnalysis()); + + LanguageVersion languageVersion = LanguageRegistry + .findLanguageVersionByTerseName(this.getLanguage() + ' ' + this.getVersion()); + if (languageVersion != null) { + configuration.getLanguageVersionDiscoverer().setDefaultLanguageVersion(languageVersion); + } + try { + configuration.prependClasspath(this.getAuxclasspath()); + } catch (IOException e) { + throw new IllegalArgumentException("Invalid auxiliary classpath: " + e.getMessage(), e); + } + return configuration; } @@ -162,44 +197,13 @@ public class PMDParameters { } + /** + * {@link #toConfiguration()}. + * @deprecated To be removed in 7.0.0. Use the instance method {@link #toConfiguration()}. + */ + @Deprecated public static PMDConfiguration transformParametersIntoConfiguration(PMDParameters params) { - if (null == params.getSourceDir() && null == params.getUri() && null == params.getFileListPath()) { - throw new IllegalArgumentException( - "Please provide a parameter for source root directory (-dir or -d), database URI (-uri or -u), or file list path (-filelist)."); - } - PMDConfiguration configuration = new PMDConfiguration(); - configuration.setInputPaths(params.getSourceDir()); - configuration.setInputFilePath(params.getFileListPath()); - configuration.setInputUri(params.getUri()); - configuration.setReportFormat(params.getFormat()); - configuration.setBenchmark(params.isBenchmark()); - configuration.setDebug(params.isDebug()); - configuration.setMinimumPriority(params.getMinimumPriority()); - configuration.setReportFile(params.getReportfile()); - configuration.setReportProperties(params.getProperties()); - configuration.setReportShortNames(params.isShortnames()); - configuration.setRuleSets(params.getRulesets()); - configuration.setRuleSetFactoryCompatibilityEnabled(!params.noRuleSetCompatibility); - configuration.setShowSuppressedViolations(params.isShowsuppressed()); - configuration.setSourceEncoding(params.getEncoding()); - configuration.setStressTest(params.isStress()); - configuration.setSuppressMarker(params.getSuppressmarker()); - configuration.setThreads(params.getThreads()); - configuration.setFailOnViolation(params.isFailOnViolation()); - configuration.setAnalysisCacheLocation(params.cacheLocation); - configuration.setIgnoreIncrementalAnalysis(params.isIgnoreIncrementalAnalysis()); - - LanguageVersion languageVersion = LanguageRegistry - .findLanguageVersionByTerseName(params.getLanguage() + ' ' + params.getVersion()); - if (languageVersion != null) { - configuration.getLanguageVersionDiscoverer().setDefaultLanguageVersion(languageVersion); - } - try { - configuration.prependClasspath(params.getAuxclasspath()); - } catch (IOException e) { - throw new IllegalArgumentException("Invalid auxiliary classpath: " + e.getMessage(), e); - } - return configuration; + return params.toConfiguration(); } public boolean isDebug() {