diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java index fdee79b4a3..285d0e295c 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexHandler.java @@ -32,11 +32,6 @@ public class ApexHandler extends AbstractPmdLanguageVersionHandler { return ApexRuleViolationFactory.INSTANCE; } - @Override - public ParserOptions getDefaultParserOptions() { - return new ApexParserOptions(); - } - @Override public Parser getParser(ParserOptions parserOptions) { return new ApexParser(); diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java deleted file mode 100644 index 8d41b5d1ba..0000000000 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/ApexParserOptions.java +++ /dev/null @@ -1,18 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.apex; - -import net.sourceforge.pmd.lang.ParserOptions; - -/** - * @deprecated Not useful - */ -@Deprecated -public class ApexParserOptions extends ParserOptions { - - // empty class for now, since we don't have extra options for Apex - // Once you add something here, make sure to override hashCode and equals - -} diff --git a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/AbstractApexRule.java b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/AbstractApexRule.java index 6c8ca348c6..0606311632 100644 --- a/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/AbstractApexRule.java +++ b/pmd-apex/src/main/java/net/sourceforge/pmd/lang/apex/rule/AbstractApexRule.java @@ -6,9 +6,7 @@ package net.sourceforge.pmd.lang.apex.rule; import net.sourceforge.pmd.RuleContext; import net.sourceforge.pmd.lang.LanguageRegistry; -import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.apex.ApexLanguageModule; -import net.sourceforge.pmd.lang.apex.ApexParserOptions; import net.sourceforge.pmd.lang.apex.ast.ApexParserVisitor; import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.rule.AbstractRule; @@ -20,11 +18,6 @@ public abstract class AbstractApexRule extends AbstractRule super.setLanguage(LanguageRegistry.getLanguage(ApexLanguageModule.NAME)); } - @Override - public ParserOptions getParserOptions() { - return new ApexParserOptions(); - } - @Override public void apply(Node target, RuleContext ctx) { target.acceptVisitor(this, ctx); 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 5224cb7f38..e0bed7e008 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/PMD.java @@ -22,7 +22,6 @@ import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; -import net.sourceforge.pmd.annotation.InternalApi; import net.sourceforge.pmd.benchmark.TextTimingReportRenderer; import net.sourceforge.pmd.benchmark.TimeTracker; import net.sourceforge.pmd.benchmark.TimedOperation; @@ -36,9 +35,6 @@ import net.sourceforge.pmd.lang.Language; import net.sourceforge.pmd.lang.LanguageFilenameFilter; import net.sourceforge.pmd.lang.LanguageVersion; import net.sourceforge.pmd.lang.LanguageVersionDiscoverer; -import net.sourceforge.pmd.lang.LanguageVersionHandler; -import net.sourceforge.pmd.lang.ParserOptions; -import net.sourceforge.pmd.lang.ast.Parser; import net.sourceforge.pmd.processor.AbstractPMDProcessor; import net.sourceforge.pmd.processor.MonoThreadProcessor; import net.sourceforge.pmd.processor.MultiThreadProcessor; @@ -160,31 +156,6 @@ public class PMD { return dataSources; } - /** - * Helper method to get a configured parser for the requested language. The - * parser is configured based on the given {@link PMDConfiguration}. - * - * @param languageVersion - * the requested language - * @param configuration - * the given configuration - * @return the pre-configured parser - * - * @deprecated This is internal - */ - @Deprecated - @InternalApi - public static Parser parserFor(LanguageVersion languageVersion, PMDConfiguration configuration) { - - // TODO Handle Rules having different parser options. - LanguageVersionHandler languageVersionHandler = languageVersion.getLanguageVersionHandler(); - ParserOptions options = languageVersionHandler.getDefaultParserOptions(); - if (configuration != null) { - options.setSuppressMarker(configuration.getSuppressMarker()); - } - return languageVersionHandler.getParser(options); - } - /** * Get the runtime configuration. The configuration can be modified to * affect how PMD behaves. diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/SourceCodeProcessor.java b/pmd-core/src/main/java/net/sourceforge/pmd/SourceCodeProcessor.java index bf6599f520..fec1de009d 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/SourceCodeProcessor.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/SourceCodeProcessor.java @@ -176,10 +176,11 @@ public class SourceCodeProcessor { languageVersion, filename, sourceCode, - SemanticErrorReporter.noop(), // TODO - configuration.getSuppressMarker() + SemanticErrorReporter.noop() // TODO ); + task.getProperties().setProperty(ParserTask.COMMENT_MARKER, configuration.getSuppressMarker()); + Parser parser = languageVersion.getLanguageVersionHandler().getParser(); RootNode rootNode = parse(parser, task); diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractPmdLanguageVersionHandler.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractPmdLanguageVersionHandler.java index 572492d864..0444155638 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractPmdLanguageVersionHandler.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/AbstractPmdLanguageVersionHandler.java @@ -6,10 +6,13 @@ package net.sourceforge.pmd.lang; import java.util.Collections; import java.util.List; +import java.util.Locale; import org.apache.commons.lang3.EnumUtils; import net.sourceforge.pmd.lang.ast.AstProcessingStage; +import net.sourceforge.pmd.properties.PropertyDescriptor; +import net.sourceforge.pmd.properties.PropertySource; /** @@ -53,4 +56,48 @@ public abstract class AbstractPmdLanguageVersionHandler extends AbstractLanguage } + + /** + * Returns the environment variable name that a user can set in order to override the default value. + */ + String getEnvironmentVariableName(String langTerseName, PropertyDescriptor propertyDescriptor) { + if (langTerseName == null) { + throw new IllegalStateException("Language is null"); + } + return "PMD_" + langTerseName.toUpperCase(Locale.ROOT) + "_" + + propertyDescriptor.name().toUpperCase(Locale.ROOT); + } + + /** + * @return environment variable that overrides the PropertyDesciptors default value. Returns null if no environment + * variable has been set. + */ + + String getEnvValue(String langTerseName, PropertyDescriptor propertyDescriptor) { + // note: since we use environent variables and not system properties, + // tests override this method. + return System.getenv(getEnvironmentVariableName(langTerseName, propertyDescriptor)); + } + + /** + * Overrides the default PropertyDescriptors with values found in environment variables. + * TODO: Move this to net.sourceforge.pmd.PMD#parserFor when CLI options are implemented + */ + @Deprecated + protected final void overridePropertiesFromEnv(String langTerseName, PropertySource source) { + for (PropertyDescriptor propertyDescriptor : source.getPropertyDescriptors()) { + String propertyValue = getEnvValue(langTerseName, propertyDescriptor); + + if (propertyValue != null) { + setPropertyCapture(source, propertyDescriptor, propertyValue); + } + } + } + + @Deprecated + private void setPropertyCapture(PropertySource source, PropertyDescriptor propertyDescriptor, String propertyValue) { + T value = propertyDescriptor.valueFrom(propertyValue); + source.setProperty(propertyDescriptor, value); + } + } diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/LanguageVersionHandler.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/LanguageVersionHandler.java index 834eaa36f4..d353230e77 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/LanguageVersionHandler.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/LanguageVersionHandler.java @@ -15,6 +15,7 @@ import net.sourceforge.pmd.lang.metrics.LanguageMetricsProvider; import net.sourceforge.pmd.lang.rule.RuleViolationFactory; import net.sourceforge.pmd.lang.rule.impl.DefaultRuleViolationFactory; import net.sourceforge.pmd.lang.rule.xpath.impl.XPathHandler; +import net.sourceforge.pmd.properties.PropertySource; import net.sourceforge.pmd.util.designerbindings.DesignerBindings; import net.sourceforge.pmd.util.designerbindings.DesignerBindings.DefaultDesignerBindings; @@ -56,6 +57,10 @@ public interface LanguageVersionHandler { return new ParserOptions(); } + default void declareParserTaskProperties(PropertySource source) { + // do nothing + } + /** * Get the Parser. diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ParserOptions.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ParserOptions.java index b92d9c7b67..5028589bc0 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ParserOptions.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ParserOptions.java @@ -4,15 +4,12 @@ package net.sourceforge.pmd.lang; -import java.util.Locale; import java.util.Objects; -import org.checkerframework.checker.nullness.qual.NonNull; - import net.sourceforge.pmd.PMD; +import net.sourceforge.pmd.lang.ast.Parser; import net.sourceforge.pmd.properties.AbstractPropertySource; import net.sourceforge.pmd.properties.PropertyDescriptor; -import net.sourceforge.pmd.lang.ast.Parser; /** * Represents a set of configuration options for a {@link Parser}. For each @@ -40,15 +37,6 @@ public class ParserOptions { this.parserOptionsProperties = new ParserOptionsProperties(); } - public final @NonNull String getSuppressMarker() { - return suppressMarker; - } - - public final void setSuppressMarker(@NonNull String suppressMarker) { - Objects.requireNonNull(suppressMarker); - this.suppressMarker = suppressMarker; - } - protected final void defineProperty(PropertyDescriptor propertyDescriptor) { parserOptionsProperties.definePropertyDescriptor(propertyDescriptor); } @@ -85,45 +73,6 @@ public class ParserOptions { return Objects.hash(suppressMarker, languageId, parserOptionsProperties); } - /** - * Returns the environment variable name that a user can set in order to override the default value. - */ - String getEnvironmentVariableName(PropertyDescriptor propertyDescriptor) { - if (languageId == null) { - throw new IllegalStateException("Language is null"); - } - return "PMD_" + languageId.toUpperCase(Locale.ROOT) + "_" - + propertyDescriptor.name().toUpperCase(Locale.ROOT); - } - - /** - * @return environment variable that overrides the PropertyDesciptors default value. Returns null if no environment - * variable has been set. - */ - String getEnvValue(PropertyDescriptor propertyDescriptor) { - // note: since we use environent variables and not system properties, - // tests override this method. - return System.getenv(getEnvironmentVariableName(propertyDescriptor)); - } - - /** - * Overrides the default PropertyDescriptors with values found in environment variables. - * TODO: Move this to net.sourceforge.pmd.PMD#parserFor when CLI options are implemented - */ - protected final void overridePropertiesFromEnv() { - for (PropertyDescriptor propertyDescriptor : parserOptionsProperties.getPropertyDescriptors()) { - String propertyValue = getEnvValue(propertyDescriptor); - - if (propertyValue != null) { - setPropertyCapture(propertyDescriptor, propertyValue); - } - } - } - - private void setPropertyCapture(PropertyDescriptor propertyDescriptor, String propertyValue) { - T value = propertyDescriptor.valueFrom(propertyValue); - parserOptionsProperties.setProperty(propertyDescriptor, value); - } private final class ParserOptionsProperties extends AbstractPropertySource { diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Parser.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Parser.java index bd125169a1..9aa9fbdb77 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Parser.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/ast/Parser.java @@ -10,6 +10,10 @@ import org.checkerframework.checker.nullness.qual.NonNull; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.lang.LanguageVersion; +import net.sourceforge.pmd.properties.AbstractPropertySource; +import net.sourceforge.pmd.properties.PropertyDescriptor; +import net.sourceforge.pmd.properties.PropertyFactory; +import net.sourceforge.pmd.properties.PropertySource; /** * Produces an AST from a source file. Instances of this interface must @@ -47,7 +51,7 @@ public interface Parser { private final String sourceText; private final SemanticErrorReporter reporter; - private final String commentMarker; + private final PropertySource propertySource; public ParserTask(LanguageVersion lv, String filepath, String sourceText, SemanticErrorReporter reporter) { @@ -59,7 +63,20 @@ public interface Parser { this.filepath = Objects.requireNonNull(filepath, "filepath was null"); this.sourceText = Objects.requireNonNull(sourceText, "sourceText was null"); this.reporter = Objects.requireNonNull(reporter, "reporter was null"); - this.commentMarker = Objects.requireNonNull(commentMarker, "commentMarker was null"); + + this.propertySource = new ParserTaskProperties(); + propertySource.definePropertyDescriptor(COMMENT_MARKER); + } + + public static final PropertyDescriptor COMMENT_MARKER = + PropertyFactory.stringProperty("suppressionCommentMarker") + .desc("deprecated! NOPMD") + .defaultValue(PMD.SUPPRESS_MARKER) + .build(); + + @Deprecated // transitional until language properties are implemented + public PropertySource getProperties() { + return propertySource; } @@ -93,7 +110,39 @@ public interface Parser { * The suppression marker for comments. */ public @NonNull String getCommentMarker() { - return commentMarker; + return getProperties().getProperty(COMMENT_MARKER); + } + + + private static final class ParserTaskProperties extends AbstractPropertySource { + + @Override + protected String getPropertySourceType() { + return "ParserOptions"; + } + + @Override + public String getName() { + return "n/a"; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof ParserTaskProperties)) { + return false; + } + final ParserTaskProperties that = (ParserTaskProperties) obj; + return Objects.equals(getPropertiesByPropertyDescriptor(), + that.getPropertiesByPropertyDescriptor()); + } + + @Override + public int hashCode() { + return getPropertiesByPropertyDescriptor().hashCode(); + } } } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java index 80424834d3..e04e9726fe 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/ExcludeLinesTest.java @@ -9,7 +9,7 @@ import static net.sourceforge.pmd.lang.ast.test.TestUtilsKt.assertSuppressed; import org.junit.Test; -import net.sourceforge.pmd.lang.ParserOptions; +import net.sourceforge.pmd.lang.ast.Parser.ParserTask; import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; import net.sourceforge.pmd.lang.java.symboltable.BaseNonParserTest; @@ -38,9 +38,7 @@ public class ExcludeLinesTest extends BaseNonParserTest { @Test public void testAlternateMarker() { - ParserOptions options = new ParserOptions(); - options.setSuppressMarker("FOOBAR"); - Report rpt = java.withParserOptions(options).executeRule(getRule(), TEST3); + Report rpt = java.withParserConfig(p -> p.setProperty(ParserTask.COMMENT_MARKER, "FOOBAR")).executeRule(getRule(), TEST3); assertSize(rpt, 0); assertSuppressed(rpt, 1); } diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptHandler.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptHandler.java index 100e47054a..e9b6091c03 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptHandler.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/EcmascriptHandler.java @@ -19,7 +19,7 @@ class EcmascriptHandler extends AbstractPmdLanguageVersionHandler { @Override public Parser getParser(ParserOptions parserOptions) { - return new EcmascriptParser(rhinoVersion, parserOptions.getSuppressMarker()); + return new EcmascriptParser(rhinoVersion); } } diff --git a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParser.java b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParser.java index 7c0e911099..f1c86ada3d 100644 --- a/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParser.java +++ b/pmd-javascript/src/main/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParser.java @@ -16,7 +16,6 @@ import org.mozilla.javascript.ast.Comment; import org.mozilla.javascript.ast.ErrorCollector; import org.mozilla.javascript.ast.ParseProblem; -import net.sourceforge.pmd.internal.util.AssertionUtil; import net.sourceforge.pmd.lang.ast.AstInfo; import net.sourceforge.pmd.lang.ast.FileAnalysisException; import net.sourceforge.pmd.lang.ast.ParseException; @@ -24,11 +23,9 @@ import net.sourceforge.pmd.lang.ast.RootNode; public final class EcmascriptParser implements net.sourceforge.pmd.lang.ast.Parser { private final int esVersion; - private final String suppressMarker; - public EcmascriptParser(int version, String suppressMarker) { + public EcmascriptParser(int version) { this.esVersion = version; - this.suppressMarker = AssertionUtil.requireParamNotNull("suppression marker", suppressMarker); } private AstRoot parseEcmascript(final String sourceCode, final List parseProblems) throws ParseException { @@ -61,6 +58,7 @@ public final class EcmascriptParser implements net.sourceforge.pmd.lang.ast.Pars final EcmascriptTreeBuilder treeBuilder = new EcmascriptTreeBuilder(sourceCode, parseProblems); final ASTAstRoot tree = (ASTAstRoot) treeBuilder.build(astRoot); + String suppressMarker = task.getCommentMarker(); Map suppressMap = new HashMap<>(); if (astRoot.getComments() != null) { for (Comment comment : astRoot.getComments()) { diff --git a/pmd-javascript/src/test/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParserTest.java b/pmd-javascript/src/test/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParserTest.java index 91b849dc29..3e9331913f 100644 --- a/pmd-javascript/src/test/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParserTest.java +++ b/pmd-javascript/src/test/java/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptParserTest.java @@ -16,8 +16,8 @@ import org.mozilla.javascript.ast.AstRoot; import net.sourceforge.pmd.PMD; import net.sourceforge.pmd.Report; -import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.ast.Node; +import net.sourceforge.pmd.lang.ast.Parser.ParserTask; import net.sourceforge.pmd.lang.ecmascript.rule.AbstractEcmascriptRule; public class EcmascriptParserTest extends EcmascriptParserTestBase { @@ -150,9 +150,8 @@ public class EcmascriptParserTest extends EcmascriptParserTestBase { assertEquals(" I know what I'm doing", root.getAstInfo().getSuppressionComments().get(2)); assertEquals(1, root.getAstInfo().getSuppressionComments().size()); - ParserOptions parserOptions = new ParserOptions(); - parserOptions.setSuppressMarker("FOOOO"); - root = js.withParserOptions(parserOptions).parse("function(x) {\n" + "y = y; //NOPMD xyz\n" + "x = x; //FOOOO I know what I'm doing\n" + "}\n"); + root = js.withParserConfig(p -> p.setProperty(ParserTask.COMMENT_MARKER, "FOOOO")) + .parse("function(x) {\n" + "y = y; //NOPMD xyz\n" + "x = x; //FOOOO I know what I'm doing\n" + "}\n"); assertEquals(" I know what I'm doing", root.getAstInfo().getSuppressionComments().get(3)); assertEquals(1, root.getAstInfo().getSuppressionComments().size()); } diff --git a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/BaseParsingHelper.kt b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/BaseParsingHelper.kt index 0fa6ec2b80..bae3c45066 100644 --- a/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/BaseParsingHelper.kt +++ b/pmd-lang-test/src/main/kotlin/net/sourceforge/pmd/lang/ast/test/BaseParsingHelper.kt @@ -6,12 +6,14 @@ package net.sourceforge.pmd.lang.ast.test import net.sourceforge.pmd.* import net.sourceforge.pmd.lang.* import net.sourceforge.pmd.lang.ast.* +import net.sourceforge.pmd.properties.PropertySource import net.sourceforge.pmd.util.datasource.DataSource import org.apache.commons.io.IOUtils import java.io.File import java.io.InputStream import java.io.StringReader import java.nio.charset.StandardCharsets +import java.util.function.Consumer /** * Language-independent base for a parser utils class. @@ -28,7 +30,8 @@ abstract class BaseParsingHelper, T : RootNode val defaultVerString: String?, val resourceLoader: Class<*>?, val resourcePrefix: String, - val parserOptions: ParserOptions? = null + val parserOptions: ParserOptions? = null, + val configureParser: (PropertySource) -> Unit = {}, ) { companion object { @@ -98,6 +101,10 @@ abstract class BaseParsingHelper, T : RootNode clone(params.copy(parserOptions = parserOptions)) + fun withParserConfig(configFun: Consumer): Self = + clone(params.copy(configureParser = { configFun.accept(it) })) + + fun getHandler(version: String): LanguageVersionHandler { return getVersion(version).languageVersionHandler } @@ -123,7 +130,11 @@ abstract class BaseParsingHelper, T : RootNode val parser = handler.getParser(options) val source = DataSource.forString(sourceCode, FileAnalysisException.NO_FILE_NAME) val toString = DataSource.readToString(source, StandardCharsets.UTF_8) - val task = Parser.ParserTask(lversion, FileAnalysisException.NO_FILE_NAME, toString, SemanticErrorReporter.noop(), options.suppressMarker) + val task = Parser.ParserTask(lversion, FileAnalysisException.NO_FILE_NAME, toString, SemanticErrorReporter.noop()) + task.properties.also { + handler.declareParserTaskProperties(it) + params.configureParser(it) + } val rootNode = rootClass.cast(parser.parse(task)) if (params.doProcess) { postProcessing(handler, lversion, rootNode) @@ -148,7 +159,7 @@ abstract class BaseParsingHelper, T : RootNode override fun getLanguageVersion(): LanguageVersion = lversion } - val stages = selectProcessingStages(handler).sortedWith(Comparator { o1, o2 -> o1.compare(o2) }) + val stages = selectProcessingStages(handler).sortedWith { o1, o2 -> o1.compare(o2) } stages.forEach { it.processAST(rootNode, astAnalysisContext) @@ -212,7 +223,7 @@ abstract class BaseParsingHelper, T : RootNode @JvmOverloads fun executeRule(rule: Rule, code: String, filename: String = "testfile.${language.extensions[0]}"): Report { val p = PMD() - p.configuration.suppressMarker = this.params.parserOptions?.suppressMarker ?: PMD.SUPPRESS_MARKER + // p.configuration.suppressMarker = this.params.parserOptions?.suppressMarker ?: PMD.SUPPRESS_MARKER val ctx = RuleContext() val report = Report() ctx.report = report diff --git a/pmd-test/src/main/java/net/sourceforge/pmd/lang/ParserOptionsTest.java b/pmd-test/src/main/java/net/sourceforge/pmd/lang/ParserOptionsTest.java index 131c369b1e..dc85fc706e 100644 --- a/pmd-test/src/main/java/net/sourceforge/pmd/lang/ParserOptionsTest.java +++ b/pmd-test/src/main/java/net/sourceforge/pmd/lang/ParserOptionsTest.java @@ -4,9 +4,6 @@ package net.sourceforge.pmd.lang; -import org.junit.Assert; -import org.junit.Test; - /** * Unit tests for {@link ParserOptions}. * @deprecated for removal in PMD 7.0. Use {@link ParserOptionsTestUtils}. @@ -14,22 +11,6 @@ import org.junit.Test; @Deprecated public class ParserOptionsTest { - /** - * Verify that the equals and hashCode methods work as expected. - */ - @Test - public void testEqualsHashcode() { - ParserOptions options1 = new ParserOptions(); - options1.setSuppressMarker("foo"); - ParserOptions options2 = new ParserOptions(); - options2.setSuppressMarker("bar"); - ParserOptions options3 = new ParserOptions(); - options3.setSuppressMarker("foo"); - ParserOptions options4 = new ParserOptions(); - options4.setSuppressMarker("bar"); - verifyOptionsEqualsHashcode(options1, options2, options3, options4); - } - /** * Verify equals and hashCode for 4 {@link ParserOptions} instances. The * given options should be as follows: 1 and 3 are equals, as are 2 and 4. diff --git a/pmd-test/src/test/java/net/sourceforge/pmd/lang/ParserOptionsUnitTest.java b/pmd-test/src/test/java/net/sourceforge/pmd/lang/ParserOptionsUnitTest.java deleted file mode 100644 index 8fc99fe8d5..0000000000 --- a/pmd-test/src/test/java/net/sourceforge/pmd/lang/ParserOptionsUnitTest.java +++ /dev/null @@ -1,206 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.junit.Assert; -import org.junit.Test; - -import net.sourceforge.pmd.PMD; -import net.sourceforge.pmd.properties.PropertyDescriptor; -import net.sourceforge.pmd.properties.PropertyFactory; -import net.sourceforge.pmd.test.lang.DummyLanguageModule; - -/** - * Unit tests for {@link ParserOptions}. - * This class is located in the pmd-test project instead of pmd-core so that it can invoke - * {@link ParserOptionsTestUtils#verifyOptionsEqualsHashcode} - * - * TODO: 7.0.0: Rename to ParserOptionsTest when {@link ParserOptionsTest} is removed. - */ -public class ParserOptionsUnitTest { - private static final List DEFAULT_LIST = Arrays.asList("value1", "value2"); - private static final String DEFAULT_STRING = "value3"; - private static final List OVERRIDDEN_LIST = Arrays.asList("override1", "override2"); - private static final String OVERRIDDEN_STRING = "override3"; - - private static class TestParserOptions extends ParserOptions { - private static final PropertyDescriptor> LIST_DESCRIPTOR = - PropertyFactory.stringListProperty("listOfStringValues") - .desc("A list of values for testing.") - .defaultValue(DEFAULT_LIST) - .delim(',') - .build(); - - private static final PropertyDescriptor STRING_DESCRIPTOR = - PropertyFactory.stringProperty("stringValue") - .desc("A single value for testing.") - .defaultValue(DEFAULT_STRING) - .build(); - - private TestParserOptions() { - super(DummyLanguageModule.TERSE_NAME); - defineProperty(LIST_DESCRIPTOR); - defineProperty(STRING_DESCRIPTOR); - overridePropertiesFromEnv(); - } - } - - /** - * SuppressMarker should be initially null and changeable. - */ - @Test - public void testSuppressMarker() { - ParserOptions parserOptions = new ParserOptions(); - Assert.assertEquals(PMD.SUPPRESS_MARKER, parserOptions.getSuppressMarker()); - parserOptions.setSuppressMarker("foo"); - Assert.assertEquals("foo", parserOptions.getSuppressMarker()); - } - - @Test - public void testDefaultPropertyDescriptors() { - TestParserOptions parserOptions = new TestParserOptions(); - assertEquals(DEFAULT_LIST, parserOptions.getProperty(TestParserOptions.LIST_DESCRIPTOR)); - assertEquals(DEFAULT_STRING, parserOptions.getProperty(TestParserOptions.STRING_DESCRIPTOR)); - } - - @Test - public void testOverriddenPropertyDescriptors() { - TestParserOptions parserOptions = new TestParserOptions(); - parserOptions.setProperty(TestParserOptions.LIST_DESCRIPTOR, OVERRIDDEN_LIST); - parserOptions.setProperty(TestParserOptions.STRING_DESCRIPTOR, OVERRIDDEN_STRING); - - assertEquals(OVERRIDDEN_LIST, parserOptions.getProperty(TestParserOptions.LIST_DESCRIPTOR)); - assertEquals(OVERRIDDEN_STRING, parserOptions.getProperty(TestParserOptions.STRING_DESCRIPTOR)); - } - - @Test - public void testEnvOverriddenPropertyDescriptors() { - TestParserOptions parserOptions = new TestParserOptions() { - @Override - protected String getEnvValue(PropertyDescriptor propertyDescriptor) { - if (propertyDescriptor.equals(TestParserOptions.LIST_DESCRIPTOR)) { - return StringUtils.join(OVERRIDDEN_LIST, ","); - } else if (propertyDescriptor.equals(TestParserOptions.STRING_DESCRIPTOR)) { - return OVERRIDDEN_STRING; - } else { - throw new RuntimeException("Should not happen"); - } - } - }; - - assertEquals(OVERRIDDEN_LIST, parserOptions.getProperty(TestParserOptions.LIST_DESCRIPTOR)); - assertEquals(OVERRIDDEN_STRING, parserOptions.getProperty(TestParserOptions.STRING_DESCRIPTOR)); - } - - @Test - public void testEmptyPropertyDescriptors() { - TestParserOptions vfParserOptions = new TestParserOptions() { - @Override - protected String getEnvValue(PropertyDescriptor propertyDescriptor) { - if (propertyDescriptor.equals(TestParserOptions.LIST_DESCRIPTOR) - || propertyDescriptor.equals(TestParserOptions.STRING_DESCRIPTOR)) { - return ""; - } else { - throw new RuntimeException("Should not happen"); - } - } - }; - - assertEquals(Collections.emptyList(), vfParserOptions.getProperty(TestParserOptions.LIST_DESCRIPTOR)); - assertEquals("", vfParserOptions.getProperty(TestParserOptions.STRING_DESCRIPTOR)); - } - - /** - * Verify that the equals and hashCode methods work as expected. - * TODO: Consider using Guava's EqualsTester - */ - @Test - public void testSuppressMarkerEqualsHashCode() { - ParserOptions options1; - ParserOptions options2; - ParserOptions options3; - ParserOptions options4; - - // SuppressMarker - options1 = new ParserOptions(); - options2 = new ParserOptions(); - options3 = new ParserOptions(); - options4 = new ParserOptions(); - options1.setSuppressMarker("foo"); - options2.setSuppressMarker("bar"); - options3.setSuppressMarker("foo"); - options4.setSuppressMarker("bar"); - ParserOptionsTestUtils.verifyOptionsEqualsHashcode(options1, options2, options3, options4); - - // PropertyDescriptor - options1 = new ParserOptions(); - options2 = new ParserOptions(); - options3 = new ParserOptions(); - options4 = new ParserOptions(); - options1.defineProperty(TestParserOptions.LIST_DESCRIPTOR); - options2.defineProperty(TestParserOptions.STRING_DESCRIPTOR); - options3.defineProperty(TestParserOptions.LIST_DESCRIPTOR); - options4.defineProperty(TestParserOptions.STRING_DESCRIPTOR); - ParserOptionsTestUtils.verifyOptionsEqualsHashcode(options1, options2, options3, options4); - - // PropertyValue - options1 = new ParserOptions(); - options2 = new ParserOptions(); - options3 = new ParserOptions(); - options4 = new ParserOptions(); - options1.defineProperty(TestParserOptions.STRING_DESCRIPTOR, DEFAULT_STRING); - options2.defineProperty(TestParserOptions.STRING_DESCRIPTOR, OVERRIDDEN_STRING); - options3.defineProperty(TestParserOptions.STRING_DESCRIPTOR, DEFAULT_STRING); - options4.defineProperty(TestParserOptions.STRING_DESCRIPTOR, OVERRIDDEN_STRING); - ParserOptionsTestUtils.verifyOptionsEqualsHashcode(options1, options2, options3, options4); - - // Language - options1 = new ParserOptions(DummyLanguageModule.TERSE_NAME); - options2 = new ParserOptions(); - options3 = new ParserOptions(DummyLanguageModule.TERSE_NAME); - options4 = new ParserOptions(); - ParserOptionsTestUtils.verifyOptionsEqualsHashcode(options1, options2, options3, options4); - - // SuppressMarker, PropertyDescriptor, PropertyValue, Language - options1 = new ParserOptions(DummyLanguageModule.TERSE_NAME); - options2 = new ParserOptions(); - options3 = new ParserOptions(DummyLanguageModule.TERSE_NAME); - options4 = new ParserOptions(); - options1.setSuppressMarker("foo"); - options2.setSuppressMarker("bar"); - options3.setSuppressMarker("foo"); - options4.setSuppressMarker("bar"); - options1.defineProperty(TestParserOptions.LIST_DESCRIPTOR, DEFAULT_LIST); - options2.defineProperty(TestParserOptions.STRING_DESCRIPTOR, OVERRIDDEN_STRING); - options3.defineProperty(TestParserOptions.LIST_DESCRIPTOR, DEFAULT_LIST); - options4.defineProperty(TestParserOptions.STRING_DESCRIPTOR, OVERRIDDEN_STRING); - ParserOptionsTestUtils.verifyOptionsEqualsHashcode(options1, options2, options3, options4); - - assertFalse(options1.equals(null)); - } - - @Test - public void testGetEnvironmentVariableName() { - ParserOptions parserOptions = new TestParserOptions(); - assertEquals("PMD_DUMMY_LISTOFSTRINGVALUES", - parserOptions.getEnvironmentVariableName(TestParserOptions.LIST_DESCRIPTOR)); - assertEquals("PMD_DUMMY_STRINGVALUE", - parserOptions.getEnvironmentVariableName(TestParserOptions.STRING_DESCRIPTOR)); - } - - @Test(expected = IllegalStateException.class) - public void testGetEnvironmentVariableNameThrowsExceptionIfLanguageIsNull() { - ParserOptions parserOptions = new ParserOptions(); - parserOptions.getEnvironmentVariableName(TestParserOptions.LIST_DESCRIPTOR); - } -} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java index 34b9f1ab2c..97248ffeaa 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfHandler.java @@ -4,20 +4,56 @@ package net.sourceforge.pmd.lang.vf; +import java.io.File; +import java.util.Collections; +import java.util.List; + import net.sourceforge.pmd.lang.AbstractPmdLanguageVersionHandler; import net.sourceforge.pmd.lang.ParserOptions; import net.sourceforge.pmd.lang.ast.Parser; import net.sourceforge.pmd.lang.vf.ast.VfParser; +import net.sourceforge.pmd.properties.PropertyDescriptor; +import net.sourceforge.pmd.properties.PropertyFactory; +import net.sourceforge.pmd.properties.PropertySource; public class VfHandler extends AbstractPmdLanguageVersionHandler { + static final List DEFAULT_APEX_DIRECTORIES = Collections.singletonList(".." + File.separator + "classes"); + static final List DEFAULT_OBJECT_DIRECTORIES = Collections.singletonList(".." + File.separator + "objects"); + + /** + * Directory that contains Apex classes that may be referenced from a Visualforce page. + * + *

Env variable is {@code PMD_VF_APEXDIRECTORIES}. + */ + public static final PropertyDescriptor> APEX_DIRECTORIES_DESCRIPTOR = + PropertyFactory.stringListProperty("apexDirectories") + .desc("Location of Apex Class directories. Absolute or relative to the Visualforce directory.") + .defaultValue(DEFAULT_APEX_DIRECTORIES) + .delim(',') + .build(); + + /** + * Directory that contains Object definitions that may be referenced from a Visualforce page. + * + *

Env variable is {@code PMD_VF_OBJECTSDIRECTORIES}. + */ + public static final PropertyDescriptor> OBJECTS_DIRECTORIES_DESCRIPTOR = + PropertyFactory.stringListProperty("objectsDirectories") + .desc("Location of Custom Object directories. Absolute or relative to the Visualforce directory.") + .defaultValue(DEFAULT_OBJECT_DIRECTORIES) + .delim(',') + .build(); + @Override public Parser getParser(ParserOptions parserOptions) { return new VfParser(); } @Override - public ParserOptions getDefaultParserOptions() { - return new VfParserOptions(); + public void declareParserTaskProperties(PropertySource source) { + source.definePropertyDescriptor(APEX_DIRECTORIES_DESCRIPTOR); + source.definePropertyDescriptor(OBJECTS_DIRECTORIES_DESCRIPTOR); + overridePropertiesFromEnv(VfLanguageModule.TERSE_NAME, source); } } diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParserOptions.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParserOptions.java deleted file mode 100644 index 16ba794e88..0000000000 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/VfParserOptions.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.vf; - -import java.io.File; -import java.util.Collections; -import java.util.List; - -import net.sourceforge.pmd.lang.ParserOptions; -import net.sourceforge.pmd.properties.PropertyDescriptor; -import net.sourceforge.pmd.properties.PropertyFactory; - -public class VfParserOptions extends ParserOptions { - static final List DEFAULT_APEX_DIRECTORIES = Collections.singletonList(".." + File.separator + "classes"); - static final List DEFAULT_OBJECT_DIRECTORIES = Collections.singletonList(".." + File.separator + "objects"); - - /** - * Directory that contains Apex classes that may be referenced from a Visualforce page. - * - *

Env variable is {@code PMD_VF_APEXDIRECTORIES}. - */ - public static final PropertyDescriptor> APEX_DIRECTORIES_DESCRIPTOR = - PropertyFactory.stringListProperty("apexDirectories") - .desc("Location of Apex Class directories. Absolute or relative to the Visualforce directory.") - .defaultValue(DEFAULT_APEX_DIRECTORIES) - .delim(',') - .build(); - - /** - * Directory that contains Object definitions that may be referenced from a Visualforce page. - * - *

Env variable is {@code PMD_VF_OBJECTSDIRECTORIES}. - */ - public static final PropertyDescriptor> OBJECTS_DIRECTORIES_DESCRIPTOR = - PropertyFactory.stringListProperty("objectsDirectories") - .desc("Location of Custom Object directories. Absolute or relative to the Visualforce directory.") - .defaultValue(DEFAULT_OBJECT_DIRECTORIES) - .delim(',') - .build(); - - public VfParserOptions() { - super(VfLanguageModule.TERSE_NAME); - defineProperty(APEX_DIRECTORIES_DESCRIPTOR); - defineProperty(OBJECTS_DIRECTORIES_DESCRIPTOR); - overridePropertiesFromEnv(); - } -} diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfExpressionTypeVisitor.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfExpressionTypeVisitor.java index 532c0f0eb4..b7a097c305 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfExpressionTypeVisitor.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfExpressionTypeVisitor.java @@ -13,8 +13,9 @@ import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; +import net.sourceforge.pmd.lang.ast.Parser.ParserTask; import net.sourceforge.pmd.lang.vf.DataType; -import net.sourceforge.pmd.lang.vf.VfParserOptions; +import net.sourceforge.pmd.lang.vf.VfHandler; /** * Visits {@link ASTExpression} nodes and stores type information for @@ -43,10 +44,10 @@ class VfExpressionTypeVisitor extends VfParserVisitorAdapter { private final List apexDirectories; private final List objectsDirectories; - VfExpressionTypeVisitor(String fileName, VfParserOptions propertySource) { - this.fileName = fileName; - this.apexDirectories = propertySource.getProperty(VfParserOptions.APEX_DIRECTORIES_DESCRIPTOR); - this.objectsDirectories = propertySource.getProperty(VfParserOptions.OBJECTS_DIRECTORIES_DESCRIPTOR); + VfExpressionTypeVisitor(ParserTask task) { + this.fileName = task.getFileDisplayName(); + this.apexDirectories = task.getProperties().getProperty(VfHandler.APEX_DIRECTORIES_DESCRIPTOR); + this.objectsDirectories = task.getProperties().getProperty(VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR); this.apexClassNames = new ArrayList<>(); this.apexClassPropertyTypes = new ApexClassPropertyTypes(); this.objectFieldTypes = new ObjectFieldTypes(); diff --git a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParser.java b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParser.java index 571b7bf37c..f50d4bbeec 100644 --- a/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParser.java +++ b/pmd-visualforce/src/main/java/net/sourceforge/pmd/lang/vf/ast/VfParser.java @@ -10,7 +10,6 @@ import net.sourceforge.pmd.lang.ast.CharStream; import net.sourceforge.pmd.lang.ast.ParseException; import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument; import net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter; -import net.sourceforge.pmd.lang.vf.VfParserOptions; /** * Parser for the VisualForce language. diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserOptionsTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserOptionsTest.java deleted file mode 100644 index 5c238b1157..0000000000 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/VfParserOptionsTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/** - * BSD-style license; for more info see http://pmd.sourceforge.net/license.html - */ - -package net.sourceforge.pmd.lang.vf; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -public class VfParserOptionsTest { - - @Test - public void testDefaultPropertyDescriptors() { - VfParserOptions vfParserOptions = new VfParserOptions(); - assertEquals(VfParserOptions.DEFAULT_APEX_DIRECTORIES, - vfParserOptions.getProperty(VfParserOptions.APEX_DIRECTORIES_DESCRIPTOR)); - assertEquals(VfParserOptions.DEFAULT_OBJECT_DIRECTORIES, - vfParserOptions.getProperty(VfParserOptions.OBJECTS_DIRECTORIES_DESCRIPTOR)); - } - -} diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ApexClassPropertyTypesTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ApexClassPropertyTypesTest.java index d8e14a70b8..ca0204d928 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ApexClassPropertyTypesTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ApexClassPropertyTypesTest.java @@ -17,7 +17,7 @@ import org.junit.Test; import net.sourceforge.pmd.lang.vf.DataType; import net.sourceforge.pmd.lang.vf.VFTestUtils; -import net.sourceforge.pmd.lang.vf.VfParserOptions; +import net.sourceforge.pmd.lang.vf.VfHandler; public class ApexClassPropertyTypesTest { private static final Map EXPECTED_DATA_TYPES; @@ -58,7 +58,7 @@ public class ApexClassPropertyTypesTest { ApexClassPropertyTypes apexClassPropertyTypes = new ApexClassPropertyTypes(); ObjectFieldTypesTest.validateDataTypes(EXPECTED_DATA_TYPES, apexClassPropertyTypes, vfPagePath, - VfParserOptions.APEX_DIRECTORIES_DESCRIPTOR.defaultValue()); + VfHandler.APEX_DIRECTORIES_DESCRIPTOR.defaultValue()); } @Test diff --git a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ObjectFieldTypesTest.java b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ObjectFieldTypesTest.java index 899b2f7012..26de0aac96 100644 --- a/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ObjectFieldTypesTest.java +++ b/pmd-visualforce/src/test/java/net/sourceforge/pmd/lang/vf/ast/ObjectFieldTypesTest.java @@ -19,7 +19,7 @@ import org.junit.Test; import net.sourceforge.pmd.lang.vf.DataType; import net.sourceforge.pmd.lang.vf.VFTestUtils; -import net.sourceforge.pmd.lang.vf.VfParserOptions; +import net.sourceforge.pmd.lang.vf.VfHandler; public class ObjectFieldTypesTest { private static final Map EXPECTED_SFDX_DATA_TYPES; @@ -57,7 +57,7 @@ public class ObjectFieldTypesTest { Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.SFDX, VFTestUtils.MetadataType.Vf).resolve("SomePage.page"); ObjectFieldTypes objectFieldTypes = new ObjectFieldTypes(); - validateSfdxAccount(objectFieldTypes, vfPagePath, VfParserOptions.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue()); + validateSfdxAccount(objectFieldTypes, vfPagePath, VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue()); } /** @@ -68,7 +68,7 @@ public class ObjectFieldTypesTest { Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.MDAPI, VFTestUtils.MetadataType.Vf).resolve("SomePage.page"); ObjectFieldTypes objectFieldTypes = new ObjectFieldTypes(); - validateMDAPIAccount(objectFieldTypes, vfPagePath, VfParserOptions.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue()); + validateMDAPIAccount(objectFieldTypes, vfPagePath, VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue()); } /** @@ -80,7 +80,7 @@ public class ObjectFieldTypesTest { Path vfPagePath = VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.SFDX, VFTestUtils.MetadataType.Vf) .resolve("SomePage.page"); - List paths = Arrays.asList(VfParserOptions.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue().get(0), + List paths = Arrays.asList(VfHandler.OBJECTS_DIRECTORIES_DESCRIPTOR.defaultValue().get(0), VFTestUtils.getMetadataPath(this, VFTestUtils.MetadataFormat.MDAPI, VFTestUtils.MetadataType.Objects).toString()); objectFieldTypes = new ObjectFieldTypes(); validateSfdxAccount(objectFieldTypes, vfPagePath, paths); diff --git a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java index b752d32b90..61c11c6692 100644 --- a/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java +++ b/pmd-xml/src/main/java/net/sourceforge/pmd/lang/xml/XmlParserOptions.java @@ -5,7 +5,6 @@ package net.sourceforge.pmd.lang.xml; import java.io.ByteArrayInputStream; -import java.util.Objects; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; @@ -199,8 +198,7 @@ public class XmlParserOptions extends ParserOptions { return false; } final XmlParserOptions that = (XmlParserOptions) obj; - return Objects.equals(this.getSuppressMarker(), that.getSuppressMarker()) - && this.coalescing == that.coalescing && this.expandEntityReferences == that.expandEntityReferences + return this.coalescing == that.coalescing && this.expandEntityReferences == that.expandEntityReferences && this.ignoringComments == that.ignoringComments && this.ignoringElementContentWhitespace == that.ignoringElementContentWhitespace && this.namespaceAware == that.namespaceAware && this.validating == that.validating diff --git a/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlParserOptionsTest.java b/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlParserOptionsTest.java index 547ea01bbe..6c571aec7c 100644 --- a/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlParserOptionsTest.java +++ b/pmd-xml/src/test/java/net/sourceforge/pmd/lang/xml/XmlParserOptionsTest.java @@ -6,7 +6,6 @@ package net.sourceforge.pmd.lang.xml; import static net.sourceforge.pmd.lang.ParserOptionsTestUtils.verifyOptionsEqualsHashcode; import static net.sourceforge.pmd.util.CollectionUtil.listOf; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -86,9 +85,6 @@ public class XmlParserOptionsTest { public void testSetters() { XmlParserOptions options = new XmlParserOptions(); - options.setSuppressMarker("foo"); - assertEquals("foo", options.getSuppressMarker()); - options.setCoalescing(true); assertTrue(options.isCoalescing()); options.setCoalescing(false); @@ -148,15 +144,6 @@ public class XmlParserOptionsTest { verifyOptionsEqualsHashcode(options1, options2, options3, options4); } - XmlParserOptions options1 = new XmlParserOptions(); - options1.setSuppressMarker("foo"); - XmlParserOptions options2 = new XmlParserOptions(); - options2.setSuppressMarker("bar"); - XmlParserOptions options3 = new XmlParserOptions(); - options3.setSuppressMarker("foo"); - XmlParserOptions options4 = new XmlParserOptions(); - options4.setSuppressMarker("bar"); - verifyOptionsEqualsHashcode(options1, options2, options3, options4); } private static final class MyRule extends AbstractXmlRule {