diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java
index 91c4564e96..f9c502b8c7 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java
@@ -67,6 +67,9 @@ public class CPDConfiguration extends AbstractConfiguration {
@Parameter(names = "--ignore-annotations", description = "Ignore language annotations when comparing text", required = false)
private boolean ignoreAnnotations;
+ @Parameter(names = "--ignore-usings", description = "Ignore using directives in C#", required = false)
+ private boolean ignoreUsings;
+
@Parameter(names = "--skip-lexical-errors", description = "Skip files which can't be tokenized due to invalid characters instead of aborting CPD", required = false)
private boolean skipLexicalErrors = false;
@@ -224,6 +227,11 @@ public class CPDConfiguration extends AbstractConfiguration {
} else {
properties.remove(Tokenizer.IGNORE_ANNOTATIONS);
}
+ if (configuration.isIgnoreUsings()) {
+ properties.setProperty(Tokenizer.IGNORE_USINGS, "true");
+ } else {
+ properties.remove(Tokenizer.IGNORE_USINGS);
+ }
properties.setProperty(Tokenizer.OPTION_SKIP_BLOCKS, Boolean.toString(!configuration.isNoSkipBlocks()));
properties.setProperty(Tokenizer.OPTION_SKIP_BLOCKS_PATTERN, configuration.getSkipBlocksPattern());
configuration.getLanguage().setProperties(properties);
@@ -335,6 +343,14 @@ public class CPDConfiguration extends AbstractConfiguration {
this.ignoreAnnotations = ignoreAnnotations;
}
+ public boolean isIgnoreUsings() {
+ return ignoreUsings;
+ }
+
+ public void setIgnoreUsings(boolean ignoreUsings) {
+ this.ignoreUsings = ignoreUsings;
+ }
+
public boolean isSkipLexicalErrors() {
return skipLexicalErrors;
}
diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Tokenizer.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Tokenizer.java
index 132886c266..8b19132613 100644
--- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Tokenizer.java
+++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/Tokenizer.java
@@ -9,6 +9,13 @@ public interface Tokenizer {
String IGNORE_LITERALS = "ignore_literals";
String IGNORE_IDENTIFIERS = "ignore_identifiers";
String IGNORE_ANNOTATIONS = "ignore_annotations";
+
+ /**
+ * Ignore using directives in C#.
+ * The default value is false
.
+ */
+ String IGNORE_USINGS = "ignore_usings";
+
/**
* Enables or disabled skipping of blocks like a pre-processor.
* It is a boolean property.
diff --git a/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsTokenizer.java b/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsTokenizer.java
index ae68ce1a0d..c9dcce4a4e 100644
--- a/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsTokenizer.java
+++ b/pmd-cs/src/main/java/net/sourceforge/pmd/cpd/CsTokenizer.java
@@ -20,8 +20,6 @@ import org.apache.commons.lang3.RandomStringUtils;
*/
public class CsTokenizer implements Tokenizer {
- public static final String IGNORE_USINGS = "ignore_usings";
-
private boolean ignoreUsings = false;
public void setProperties(Properties properties) {
diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md
index d622b84123..5758cc4618 100644
--- a/src/site/markdown/overview/changelog.md
+++ b/src/site/markdown/overview/changelog.md
@@ -6,6 +6,8 @@
**Feature Request and Improvements:**
+* CPD: New command line parameter `--ignore-usings`: Ignore using directives in C# when comparing text.
+
**New/Modified/Deprecated Rules:**
**Pull Requests:**
diff --git a/src/site/markdown/usage/cpd-usage.md b/src/site/markdown/usage/cpd-usage.md
index 5c4da7554f..8270fe3ee4 100644
--- a/src/site/markdown/usage/cpd-usage.md
+++ b/src/site/markdown/usage/cpd-usage.md
@@ -147,6 +147,12 @@ The options "minimum-tokens" and "files" are the two required options; there are