From 9fcf146241e70194bb47900dc73f00b550f48e51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Tue, 6 Mar 2018 23:01:33 +0100 Subject: [PATCH] Add RegexMultiProperty --- .../pmd/properties/RegexMultiProperty.java | 90 +++++++++++++++++++ .../pmd/properties/RegexProperty.java | 2 +- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexMultiProperty.java diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexMultiProperty.java b/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexMultiProperty.java new file mode 100644 index 0000000000..4f19084310 --- /dev/null +++ b/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexMultiProperty.java @@ -0,0 +1,90 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.properties; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +import net.sourceforge.pmd.properties.builders.MultiValuePropertyBuilder; +import net.sourceforge.pmd.properties.builders.PropertyDescriptorBuilderConversionWrapper.MultiValue; + + +/** + * Property which takes a collection of regex patterns as its value. + * + * @author Clément Fournier + * @since 6.1.0 + */ +public final class RegexMultiProperty extends AbstractMultiValueProperty { + RegexMultiProperty(String theName, String theDescription, List theDefault, float theUIOrder, char delimiter, boolean isDefinedExternally) { + super(theName, theDescription, theDefault, theUIOrder, delimiter, isDefinedExternally); + } + + + @Override + protected Pattern createFrom(String toParse) { + return Pattern.compile(toParse); + } + + + @Override + public Class type() { + return Pattern.class; + } + + + static MultiValue extractor() { + return new MultiValue(Pattern.class, ValueParserConstants.REGEX_PARSER) { + @Override + protected RegexMultiPBuilder newBuilder(String name) { + return new RegexMultiPBuilder(name); + } + }; + } + + + /** + * Creates a new builder for a regex multi property. + * + * @param name The name of the property + * + * @return A new builder + */ + public static RegexMultiPBuilder named(String name) { + return new RegexMultiPBuilder(name); + } + + + /** Builder for a {@link RegexMultiProperty}. */ + public static final class RegexMultiPBuilder extends MultiValuePropertyBuilder { + private RegexMultiPBuilder(String name) { + super(name); + } + + + /** + * Specify default patterns for the property. + * The arguments must be valid regex patterns. + * + * @param val Regex patterns + * + * @return The same builder + */ + public RegexMultiPBuilder defaultValues(String... val) { + List ps = new ArrayList<>(); + for (String s : val) { + ps.add(Pattern.compile(s)); + } + return super.defaultValues(ps); + } + + + @Override + public RegexMultiProperty build() { + return new RegexMultiProperty(this.name, this.description, this.defaultValues, this.uiOrder, this.multiValueDelimiter, isDefinedInXML); + } + } +} diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexProperty.java b/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexProperty.java index 9682e48637..5f61cd3aa9 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexProperty.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/properties/RegexProperty.java @@ -66,7 +66,7 @@ public final class RegexProperty extends AbstractSingleValueProperty { /** * Specify a default pattern for the property. - * The string value must be a valid regex pattern. + * The argument must be a valid regex pattern. * * @param val Regex pattern *