implement BV 2.0 against existing BVal unit tests
Project: http://git-wip-us.apache.org/repos/asf/bval/repo Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/3f287a7a Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/3f287a7a Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/3f287a7a Branch: refs/heads/bv2 Commit: 3f287a7aff06ac0eaa10711d55afa5d79b8d9dbd Parents: cd050cf Author: Matt Benson <[email protected]> Authored: Wed Nov 15 14:47:45 2017 -0600 Committer: Matt Benson <[email protected]> Committed: Wed Feb 21 14:23:23 2018 -0600 ---------------------------------------------------------------------- bundle/pom.xml | 2 +- bval-core/pom.xml | 2 +- .../bval/routines/EMailValidationUtils.java | 7 +- .../java/org/apache/bval/util/BValVersion.java | 12 +- .../java/org/apache/bval/util/Exceptions.java | 125 ++++ .../main/java/org/apache/bval/util/Lazy.java | 62 ++ .../main/java/org/apache/bval/util/LazyInt.java | 49 ++ .../java/org/apache/bval/util/ObjectUtils.java | 20 +- .../org/apache/bval/util/ObjectWrapper.java | 50 ++ .../java/org/apache/bval/util/StringUtils.java | 67 +- .../java/org/apache/bval/util/Validate.java | 29 +- .../apache/bval/util/reflection/Reflection.java | 173 ++++- .../apache/bval/util/reflection/TypeUtils.java | 65 +- bval-extras/pom.xml | 4 +- .../constraints/checkdigit/ABANumber.java | 4 +- .../extras/constraints/checkdigit/CUSIP.java | 4 +- .../extras/constraints/checkdigit/EAN13.java | 4 +- .../extras/constraints/checkdigit/IBAN.java | 4 +- .../constraints/checkdigit/IBANValidator.java | 8 +- .../extras/constraints/checkdigit/ISBN10.java | 4 +- .../extras/constraints/checkdigit/Luhn.java | 4 +- .../checkdigit/ModulusValidator.java | 4 +- .../extras/constraints/checkdigit/Sedol.java | 4 +- .../extras/constraints/checkdigit/Verhoeff.java | 4 +- .../checkdigit/VerhoeffValidator.java | 4 +- .../constraints/creditcard/AmericanExpress.java | 4 +- .../extras/constraints/creditcard/Diners.java | 4 +- .../extras/constraints/creditcard/Discover.java | 4 +- .../constraints/creditcard/Mastercard.java | 4 +- .../constraints/file/DirectoryValidator.java | 2 +- .../constraints/file/SymlinkValidator.java | 2 +- .../extras/constraints/net/DomainValidator.java | 33 +- .../constraints/net/InetAddressValidator.java | 4 +- .../checkdigit/ABANumberValidatorTest.java | 2 +- .../checkdigit/AbstractCheckDigitTest.java | 4 +- .../checkdigit/CUSIPValidatorTest.java | 2 +- .../checkdigit/EAN13CheckDigitTest.java | 2 +- .../checkdigit/IBANCheckDigitTest.java | 2 +- .../checkdigit/ISBN10CheckDigitTest.java | 2 +- .../checkdigit/LuhnCheckDigitTest.java | 2 +- .../checkdigit/SedolCheckDigitTest.java | 2 +- .../checkdigit/VerhoeffCheckDigitTest.java | 2 +- .../net/InetAddressValidatorTest.java | 2 +- bval-json/pom.xml | 2 +- bval-jsr/pom.xml | 19 +- .../java/org/apache/bval/cdi/AnyLiteral.java | 3 +- .../org/apache/bval/cdi/BValAnnotatedType.java | 33 +- .../java/org/apache/bval/cdi/BValExtension.java | 18 +- .../org/apache/bval/cdi/BValInterceptor.java | 28 +- .../apache/bval/cdi/BValInterceptorBean.java | 6 +- .../org/apache/bval/cdi/DefaultLiteral.java | 3 +- .../apache/bval/cdi/EmptyAnnotationLiteral.java | 24 +- .../java/org/apache/bval/cdi/ValidatorBean.java | 6 +- .../apache/bval/cdi/ValidatorFactoryBean.java | 6 +- .../bval/constraints/AssertFalseValidator.java | 6 +- .../bval/constraints/AssertTrueValidator.java | 6 +- .../DecimalMaxValidatorForNumber.java | 12 +- .../DecimalMaxValidatorForString.java | 2 +- .../DecimalMinValidatorForNumber.java | 12 +- .../DecimalMinValidatorForString.java | 2 +- .../java/org/apache/bval/constraints/Email.java | 15 +- .../apache/bval/constraints/EmailValidator.java | 7 +- .../constraints/FutureOrPresentValidator.java | 138 ++++ .../bval/constraints/FutureValidator.java | 138 ++++ .../bval/constraints/MaxValidatorForNumber.java | 4 +- .../bval/constraints/MaxValidatorForString.java | 2 +- .../bval/constraints/MinValidatorForNumber.java | 4 +- .../bval/constraints/MinValidatorForString.java | 2 +- .../bval/constraints/NotBlankValidator.java | 34 + .../org/apache/bval/constraints/NotEmpty.java | 28 +- .../bval/constraints/NotEmptyValidator.java | 19 +- .../NotEmptyValidatorForCharSequence.java | 34 + .../NotEmptyValidatorForCollection.java | 7 +- .../constraints/NotEmptyValidatorForMap.java | 6 +- .../constraints/NotEmptyValidatorForString.java | 37 - .../bval/constraints/NotNullValidator.java | 4 - .../apache/bval/constraints/NullValidator.java | 5 - .../bval/constraints/NumberSignValidator.java | 68 ++ .../constraints/PastOrPresentValidator.java | 138 ++++ .../apache/bval/constraints/PastValidator.java | 138 ++++ .../bval/constraints/PatternValidator.java | 4 +- .../apache/bval/constraints/TimeValidator.java | 44 ++ .../apache/bval/context/ValidationContext.java | 125 ++++ .../main/java/org/apache/bval/el/ELFacade.java | 16 +- .../bval/jsr/AbstractConstraintDescriptor.java | 32 + .../bval/jsr/AnnotationConstraintBuilder.java | 38 +- .../apache/bval/jsr/AnnotationProcessor.java | 24 +- .../apache/bval/jsr/ApacheFactoryContext.java | 83 +- .../bval/jsr/ApacheValidatorConfiguration.java | 7 +- .../apache/bval/jsr/ApacheValidatorFactory.java | 171 +++-- .../bval/jsr/BootstrapConfigurationImpl.java | 29 +- .../bval/jsr/CascadingPropertyValidator.java | 96 ++- .../org/apache/bval/jsr/ConfigurationImpl.java | 128 ++-- .../jsr/ConstraintAnnotationAttributes.java | 46 +- .../org/apache/bval/jsr/ConstraintCached.java | 143 +++- .../org/apache/bval/jsr/ConstraintDefaults.java | 103 +-- .../bval/jsr/ConstraintDescriptorImpl.java | 13 + .../apache/bval/jsr/ConstraintValidation.java | 33 +- .../jsr/ConstraintValidatorContextImpl.java | 20 +- .../bval/jsr/ConstraintValidatorIdentity.java | 9 +- .../bval/jsr/ConstraintViolationImpl.java | 94 +-- .../jsr/DefaultConstraintValidatorFactory.java | 12 +- .../bval/jsr/DefaultMessageInterpolator.java | 35 +- .../jsr/DefaultValidationProviderResolver.java | 50 +- .../org/apache/bval/jsr/GraphBeanIdentity.java | 28 +- .../java/org/apache/bval/jsr/GraphContext.java | 95 +++ .../jsr/NodeBuilderCustomizableContextImpl.java | 89 +++ .../apache/bval/jsr/NodeContextBuilderImpl.java | 88 +++ .../bval/jsr/ParameterDescriptorImpl.java | 7 + .../apache/bval/jsr/PropertyDescriptorImpl.java | 9 + .../bval/jsr/ReturnValueDescriptorImpl.java | 8 + .../java/org/apache/bval/jsr/ValidatorImpl.java | 141 ++++ .../org/apache/bval/jsr/descriptor/BeanD.java | 128 ++++ .../jsr/descriptor/CascadableContainerD.java | 88 +++ .../apache/bval/jsr/descriptor/ComposedD.java | 123 +++ .../ComputeConstraintValidatorClass.java | 183 +++++ .../apache/bval/jsr/descriptor/ConstraintD.java | 276 +++++++ .../bval/jsr/descriptor/ConstructorD.java | 41 + .../jsr/descriptor/ContainerElementTypeD.java | 119 +++ .../bval/jsr/descriptor/CrossParameterD.java | 18 + .../bval/jsr/descriptor/DescriptorManager.java | 74 ++ .../apache/bval/jsr/descriptor/ElementD.java | 122 +++ .../apache/bval/jsr/descriptor/ExecutableD.java | 84 +++ .../org/apache/bval/jsr/descriptor/Finder.java | 103 +++ .../bval/jsr/descriptor/GroupConversion.java | 85 +++ .../bval/jsr/descriptor/MetadataReader.java | 291 +++++++ .../org/apache/bval/jsr/descriptor/MethodD.java | 49 ++ .../apache/bval/jsr/descriptor/ParameterD.java | 62 ++ .../apache/bval/jsr/descriptor/PropertyD.java | 106 +++ .../bval/jsr/descriptor/ReturnValueD.java | 36 + .../java/org/apache/bval/jsr/groups/Group.java | 13 +- .../groups/GroupConversionDescriptorImpl.java | 3 +- .../java/org/apache/bval/jsr/groups/Groups.java | 67 +- .../apache/bval/jsr/groups/GroupsComputer.java | 111 ++- .../jsr/job/ConstraintValidatorContextImpl.java | 195 +++++ .../org/apache/bval/jsr/job/ValidateBean.java | 60 ++ .../apache/bval/jsr/job/ValidateParameters.java | 188 +++++ .../apache/bval/jsr/job/ValidateProperty.java | 522 +++++++++++++ .../bval/jsr/job/ValidateReturnValue.java | 126 ++++ .../org/apache/bval/jsr/job/ValidationJob.java | 380 ++++++++++ .../bval/jsr/job/ValidationJobFactory.java | 112 +++ .../bval/jsr/metadata/AnnotationBehavior.java | 35 + .../AnnotationBehaviorMergeStrategy.java | 54 ++ ...otationDeclaredValidatorMappingProvider.java | 42 ++ .../ClassLoadingValidatorMappingProvider.java | 48 ++ .../bval/jsr/metadata/CompositeBuilder.java | 227 ++++++ .../CompositeValidatorMappingProvider.java | 42 ++ .../bval/jsr/metadata/ContainerElementKey.java | 175 +++++ .../apache/bval/jsr/metadata/DualBuilder.java | 243 ++++++ .../metadata/DualValidationMappingProvider.java | 50 ++ .../apache/bval/jsr/metadata/EmptyBuilder.java | 183 +++++ .../jsr/metadata/HasAnnotationBehavior.java | 24 + .../bval/jsr/metadata/HierarchyBuilder.java | 235 ++++++ .../bval/jsr/metadata/MetadataBuilder.java | 98 +++ .../bval/jsr/metadata/MetadataBuilders.java | 41 + .../org/apache/bval/jsr/metadata/Metas.java | 324 ++++++++ .../bval/jsr/metadata/ReflectionBuilder.java | 272 +++++++ .../org/apache/bval/jsr/metadata/Signature.java | 75 ++ .../bval/jsr/metadata/ValidatorMapping.java | 121 +++ .../jsr/metadata/ValidatorMappingProvider.java | 51 ++ .../apache/bval/jsr/metadata/XmlBuilder.java | 694 +++++++++++++++++ .../metadata/XmlValidationMappingProvider.java | 64 ++ .../parameter/DefaultParameterNameProvider.java | 25 +- .../resolver/CachingTraversableResolver.java | 26 +- .../bval/jsr/util/AnnotationsManager.java | 359 +++++++++ .../org/apache/bval/jsr/util/ClassHelper.java | 10 +- ...ementNodeBuilderCustomizableContextImpl.java | 77 ++ ...nerElementNodeBuilderDefinedContextImpl.java | 65 ++ .../ContainerElementNodeContextBuilderImpl.java | 85 +++ .../main/java/org/apache/bval/jsr/util/IOs.java | 11 +- .../java/org/apache/bval/jsr/util/LRUCache.java | 41 + .../LeafNodeBuilderCustomizableContextImpl.java | 23 +- .../java/org/apache/bval/jsr/util/Methods.java | 45 ++ .../NodeBuilderCustomizableContextImpl.java | 55 +- .../jsr/util/NodeBuilderDefinedContextImpl.java | 32 +- .../bval/jsr/util/NodeContextBuilderImpl.java | 52 +- .../java/org/apache/bval/jsr/util/NodeImpl.java | 118 +-- .../java/org/apache/bval/jsr/util/PathImpl.java | 91 +-- .../apache/bval/jsr/util/PathNavigation.java | 102 ++- .../java/org/apache/bval/jsr/util/Proxies.java | 2 +- .../apache/bval/jsr/util/ToUnmodifiable.java | 34 + .../bval/jsr/valueextraction/FxExtractor.java | 96 +++ .../IterableElementExtractor.java | 30 + .../valueextraction/ListElementExtractor.java | 34 + .../bval/jsr/valueextraction/MapExtractor.java | 42 ++ .../jsr/valueextraction/OptionalExtractor.java | 65 ++ .../jsr/valueextraction/ValueExtractors.java | 181 +++++ .../apache/bval/jsr/xml/AnnotationProxy.java | 59 +- .../bval/jsr/xml/AnnotationProxyBuilder.java | 104 ++- .../org/apache/bval/jsr/xml/SchemaManager.java | 286 +++++++ .../bval/jsr/xml/ValidationMappingParser.java | 749 ++----------------- .../apache/bval/jsr/xml/ValidationParser.java | 330 ++++---- .../java/org/apache/bval/jsr/xml/XmlUtils.java | 67 ++ .../bval/jsr/DefaultConstraints.properties | 81 +- .../DefaultExtractors.properties | 25 + bval-jsr/src/main/xjb/binding-customization.xjb | 4 +- .../main/xsd/validation-configuration-2.0.xsd | 75 ++ .../src/main/xsd/validation-mapping-2.0.xsd | 297 ++++++++ .../org/apache/bval/jsr/BeanDescriptorTest.java | 3 + .../bval/jsr/CustomValidatorFactoryTest.java | 6 + .../java/org/apache/bval/jsr/Jsr303Test.java | 24 +- .../org/apache/bval/jsr/ValidationTest.java | 2 + .../org/apache/bval/jsr/example/Engine.java | 8 +- .../jsr/extensions/MethodValidatorImplTest.java | 4 +- .../jsr/groups/GroupSequenceIsolationTest.java | 10 +- .../bval/jsr/groups/GroupsComputerTest.java | 88 +-- .../test/java/org/apache/bval/jsr/xml/Demo.java | 40 + .../bval/jsr/xml/ValidationParserTest.java | 18 +- .../src/test/resources/sample-validation11.xml | 30 + .../src/test/resources/sample-validation2.xml | 30 + bval-tck11/pom.xml | 8 +- bval-xstream/pom.xml | 2 +- pom.xml | 39 +- 213 files changed, 12302 insertions(+), 2281 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bundle/pom.xml ---------------------------------------------------------------------- diff --git a/bundle/pom.xml b/bundle/pom.xml index 80cd95d..2f57116 100644 --- a/bundle/pom.xml +++ b/bundle/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>org.apache.bval</groupId> <artifactId>bval-parent</artifactId> - <version>1.1.3-SNAPSHOT</version> + <version>2.0.0-SNAPSHOT</version> </parent> <!-- use fully qualified naming for OSGi bundles --> http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/pom.xml ---------------------------------------------------------------------- diff --git a/bval-core/pom.xml b/bval-core/pom.xml index 48026d4..b7a7f8b 100644 --- a/bval-core/pom.xml +++ b/bval-core/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>org.apache.bval</groupId> <artifactId>bval-parent</artifactId> - <version>1.1.3-SNAPSHOT</version> + <version>2.0.0-SNAPSHOT</version> </parent> <artifactId>bval-core</artifactId> http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java b/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java index 1158c7f..0835bae 100644 --- a/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java +++ b/bval-core/src/main/java/org/apache/bval/routines/EMailValidationUtils.java @@ -29,12 +29,11 @@ public class EMailValidationUtils { private static String ATOM = "[^\\x00-\\x1F\\(\\)\\<\\>\\@\\,\\;\\:\\\\\\\"\\.\\[\\]\\s]"; private static String DOMAIN = "(" + ATOM + "+(\\." + ATOM + "+)*"; private static String IP_DOMAIN = "\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\]"; - public static final java.util.regex.Pattern DEFAULT_EMAIL_PATTERN; + public static final Pattern DEFAULT_EMAIL_PATTERN; static { - DEFAULT_EMAIL_PATTERN = - java.util.regex.Pattern.compile("^" + ATOM + "+(\\." + ATOM + "+)*@" + DOMAIN + "|" + IP_DOMAIN + ")$", - java.util.regex.Pattern.CASE_INSENSITIVE); + DEFAULT_EMAIL_PATTERN = Pattern.compile("^" + ATOM + "+(\\." + ATOM + "+)*@" + DOMAIN + "|" + IP_DOMAIN + ")$", + Pattern.CASE_INSENSITIVE); } /** http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/BValVersion.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/BValVersion.java b/bval-core/src/main/java/org/apache/bval/util/BValVersion.java index b0c451f..13d1fa3 100644 --- a/bval-core/src/main/java/org/apache/bval/util/BValVersion.java +++ b/bval-core/src/main/java/org/apache/bval/util/BValVersion.java @@ -54,21 +54,17 @@ public class BValVersion { static { Properties revisionProps = new Properties(); - try { - InputStream in = BValVersion.class.getResourceAsStream("/META-INF/org.apache.bval.revision.properties"); + try (InputStream in = BValVersion.class.getResourceAsStream("/META-INF/org.apache.bval.revision.properties")) { if (in != null) { - try { - revisionProps.load(in); - } finally { - in.close(); - } + revisionProps.load(in); } } catch (IOException ioe) { } String vers = revisionProps.getProperty("project.version"); - if (vers == null || "".equals(vers.trim())) + if (vers == null || "".equals(vers.trim())) { vers = "0.0.0"; + } VERSION_NUMBER = vers; StringTokenizer tok = new StringTokenizer(VERSION_NUMBER, ".-"); http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/Exceptions.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/Exceptions.java b/bval-core/src/main/java/org/apache/bval/util/Exceptions.java new file mode 100644 index 0000000..9487cde --- /dev/null +++ b/bval-core/src/main/java/org/apache/bval/util/Exceptions.java @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bval.util; + +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Stream; + +/** + * Utility class for the creation and throwing of Exceptions. + */ +public class Exceptions { + + public static <E extends Exception> E create(Function<? super String, ? extends E> fn, String format, + Object... args) { + return create(fn, () -> String.format(format, args)); + } + + public static <E extends Exception, C extends Throwable> E create( + BiFunction<? super String, ? super C, ? extends E> fn, C cause, String format, Object... args) { + return create(fn, cause, () -> String.format(format, args)); + } + + public static <E extends Exception> E create(Function<? super String, ? extends E> fn, Supplier<String> message) { + return elideStackTrace(fn.apply(message.get())); + } + + public static <E extends Exception, C extends Throwable> E create( + BiFunction<? super String, ? super C, ? extends E> fn, C cause, Supplier<String> message) { + return elideStackTrace(fn.apply(message.get(), cause)); + } + + public static <E extends Exception, R> R raise(Function<? super String, ? extends E> fn, String format, + Object... args) throws E { + throw create(fn, format, args); + } + + public static <E extends Exception> void raiseIf(boolean condition, Function<? super String, ? extends E> fn, + String format, Object... args) throws E { + if (condition) { + raise(fn, format, args); + } + } + + public static <E extends Exception> void raiseUnless(boolean condition, Function<? super String, ? extends E> fn, + String format, Object... args) throws E { + raiseIf(!condition, fn, format, args); + } + + public static <E extends Exception, R> R raise(Function<? super String, ? extends E> fn, Supplier<String> message) + throws E { + throw create(fn, message); + } + + public static <E extends Exception> void raiseIf(boolean condition, Function<? super String, ? extends E> fn, + Supplier<String> message) throws E { + if (condition) { + raise(fn, message); + } + } + + public static <E extends Exception> void raiseUnless(boolean condition, Function<? super String, ? extends E> fn, + Supplier<String> message) throws E { + raiseIf(!condition, fn, message); + } + + public static <E extends Exception, C extends Throwable, R> R raise( + BiFunction<? super String, ? super C, ? extends E> fn, C cause, String format, Object... args) throws E { + throw create(fn, cause, format, args); + } + + public static <E extends Exception, C extends Throwable> void raiseIf(boolean condition, + BiFunction<? super String, ? super C, ? extends E> fn, C cause, String format, Object... args) throws E { + if (condition) { + raise(fn, cause, format, args); + } + } + + public static <E extends Exception, C extends Throwable> void raiseUnless(boolean condition, + BiFunction<? super String, ? super C, ? extends E> fn, C cause, String format, Object... args) throws E { + raiseIf(!condition, fn, cause, format, args); + } + + public static <E extends Exception, C extends Throwable, R> R raise( + BiFunction<? super String, ? super C, ? extends E> fn, C cause, Supplier<String> message) throws E { + throw create(fn, cause, message); + } + + public static <E extends Exception, C extends Throwable> void raiseIf(boolean condition, + BiFunction<? super String, ? super C, ? extends E> fn, C cause, Supplier<String> message) throws E { + if (condition) { + raise(fn, cause, message); + } + } + + public static <E extends Exception, C extends Throwable> void raiseUnless(boolean condition, + BiFunction<? super String, ? super C, ? extends E> fn, C cause, Supplier<String> message) throws E { + raiseIf(!condition, fn, cause, message); + } + + private static <T extends Throwable> T elideStackTrace(T t) { + final StackTraceElement[] stackTrace = t.fillInStackTrace().getStackTrace(); + t.setStackTrace(Stream.of(stackTrace).filter(e -> !Exceptions.class.getName().equals(e.getClassName())) + .toArray(StackTraceElement[]::new)); + return t; + } + + private Exceptions() { + } +} http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/Lazy.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/Lazy.java b/bval-core/src/main/java/org/apache/bval/util/Lazy.java new file mode 100644 index 0000000..4796de3 --- /dev/null +++ b/bval-core/src/main/java/org/apache/bval/util/Lazy.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bval.util; + +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * @since 2.0 + * + * @param <T> + */ +public class Lazy<T> implements Supplier<T> { + private T value; + private volatile Supplier<T> init; + + public Lazy(Supplier<T> init) { + reset(init); + } + + public Lazy<T> reset(Supplier<T> init) { + this.init = Validate.notNull(init); + return this; + } + + @Override + public T get() { + if (init != null) { + synchronized (this) { + if (init != null) { + value = init.get(); + init = null; + } + } + } + return value; + } + + public Optional<T> optional() { + return Optional.ofNullable(value); + } + + public <U> Consumer<U> consumer(BiConsumer<? super T, ? super U> delegate) { + return u -> delegate.accept(get(), u); + } +} http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/LazyInt.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/LazyInt.java b/bval-core/src/main/java/org/apache/bval/util/LazyInt.java new file mode 100644 index 0000000..44e09dd --- /dev/null +++ b/bval-core/src/main/java/org/apache/bval/util/LazyInt.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bval.util; + +import java.util.OptionalInt; +import java.util.function.IntSupplier; + +/** + * @since 2.0 + */ +public class LazyInt implements IntSupplier { + private int value; + private IntSupplier init; + + public LazyInt(IntSupplier init) { + this.init = Validate.notNull(init); + } + + @Override + public int getAsInt() { + if (init != null) { + synchronized (this) { + if (init != null) { + value = init.getAsInt(); + init = null; + } + } + } + return value; + } + + public synchronized OptionalInt optional() { + return init == null ? OptionalInt.of(value) : OptionalInt.empty(); + } +} http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java b/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java index 0464eeb..b7f2fac 100644 --- a/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java +++ b/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java @@ -18,6 +18,8 @@ package org.apache.bval.util; import java.lang.annotation.Annotation; import java.lang.reflect.Array; +import java.util.function.Predicate; +import java.util.stream.Stream; public final class ObjectUtils { public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0]; @@ -44,7 +46,7 @@ public final class ObjectUtils { * @return {@code object} if it is not {@code null}, defaultValue otherwise */ public static <T> T defaultIfNull(final T object, final T defaultValue) { - return object != null ? object : defaultValue; + return object == null ? defaultValue : object; } public static <T> boolean isNotEmpty(final T[] array) { @@ -68,29 +70,19 @@ public final class ObjectUtils { if (array == null) { return false; } - for (Object o : array) { - if (o.equals(objectToFind)) { - return true; - } - } - return false; + return Stream.of(array).anyMatch(Predicate.isEqual(objectToFind)); } public static <T> T[] arrayAdd(T[] array, T objectToAdd) { - Class<?> type; - if (array != null) { - type = array.getClass().getComponentType(); - } else if (objectToAdd != null) { - type = objectToAdd.getClass(); - } else { + if (array == null && objectToAdd == null) { throw new IllegalArgumentException("Arguments cannot both be null"); } final int arrayLength = Array.getLength(array); + @SuppressWarnings("unchecked") T[] newArray = (T[]) Array.newInstance(array.getClass().getComponentType(), arrayLength + 1); System.arraycopy(array, 0, newArray, 0, arrayLength); newArray[newArray.length - 1] = objectToAdd; return newArray; - } } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/ObjectWrapper.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/ObjectWrapper.java b/bval-core/src/main/java/org/apache/bval/util/ObjectWrapper.java new file mode 100644 index 0000000..8483745 --- /dev/null +++ b/bval-core/src/main/java/org/apache/bval/util/ObjectWrapper.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.bval.util; + +import java.util.Optional; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ObjectWrapper<T> implements Consumer<T>, Supplier<T> { + private T value; + + public ObjectWrapper() { + this(null); + } + + public ObjectWrapper(T value) { + super(); + this.value = value; + } + + @Override + public void accept(T value) { + this.value = value; + } + + @Override + public T get() { + return value; + } + + public Optional<T> optional() { + return Optional.ofNullable(value); + } +} http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/StringUtils.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/StringUtils.java b/bval-core/src/main/java/org/apache/bval/util/StringUtils.java index f7add27..6b9c25d 100644 --- a/bval-core/src/main/java/org/apache/bval/util/StringUtils.java +++ b/bval-core/src/main/java/org/apache/bval/util/StringUtils.java @@ -17,8 +17,6 @@ package org.apache.bval.util; import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; import java.util.List; public final class StringUtils { @@ -93,49 +91,24 @@ public final class StringUtils { return true; } - public static String join(Collection<?> values, String joinToken) { - if (values == null) { - return null; - } - if (values.size() == 0) { - return ""; - } - if (values.size() == 1) { - return values.iterator().next().toString(); - } - if (joinToken == null) { - joinToken = "null"; // backward compat with commons-lang StringUtils... - } - - StringBuilder sb = new StringBuilder(values.size() * (16 + joinToken.length())); - Iterator<?> it = values.iterator(); - sb.append(it.next()); - while (it.hasNext()) { - sb.append(joinToken).append(it.next()); - } - return sb.toString(); - } - - public static String joinArray(Object[] values, String joinToken) { - if (values == null) { - return null; - } - if (values.length == 0) { - return ""; - } - if (values.length == 1) { - return values[0].toString(); - } - if (joinToken == null) { - joinToken = "null"; // backward compat with commons-lang StringUtils... - } - - StringBuilder sb = new StringBuilder(values.length * (16 + joinToken.length())); - sb.append(values[0]); - for (int i = 1; i < values.length; i++) { - sb.append(joinToken).append(values[i]); - } - return sb.toString(); + /** + * Taken from commons-lang3. + * <p>Checks if a CharSequence is not empty (""), not null and not whitespace only.</p> + * + * <pre> + * StringUtils.isNotBlank(null) = false + * StringUtils.isNotBlank("") = false + * StringUtils.isNotBlank(" ") = false + * StringUtils.isNotBlank("bob") = true + * StringUtils.isNotBlank(" bob ") = true + * </pre> + * + * @param cs the CharSequence to check, may be null + * @return {@code true} if the CharSequence is + * not empty and not null and not whitespace + */ + public static boolean isNotBlank(final CharSequence cs) { + return !isBlank(cs); } /** @@ -149,12 +122,12 @@ public final class StringUtils { * <p>Splits the provided text into an array, separator is whitespace. */ public static String[] split(String str, Character token) { - if (str == null || str.length() == 0) { + if (str == null || str.isEmpty()) { return ObjectUtils.EMPTY_STRING_ARRAY; } // split on token - List<String> ret = new ArrayList<String>(); + List<String> ret = new ArrayList<>(); StringBuilder sb = new StringBuilder(str.length()); for (int pos = 0; pos < str.length(); pos++) { char c = str.charAt(pos); http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/Validate.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/Validate.java b/bval-core/src/main/java/org/apache/bval/util/Validate.java index f0e0611..042dc1b 100644 --- a/bval-core/src/main/java/org/apache/bval/util/Validate.java +++ b/bval-core/src/main/java/org/apache/bval/util/Validate.java @@ -16,9 +16,10 @@ */ package org.apache.bval.util; +import java.util.function.Function; + /** - * Some used Validate from commons. - * + * Some used validations from commons. */ public final class Validate { private Validate() { @@ -29,16 +30,30 @@ public final class Validate { } public static <T> T notNull(final T object, final String message, final Object... values) { - if (object == null) { - throw new NullPointerException(String.format(message, values)); - } + return notNull(object, NullPointerException::new, message, values); + } + + public static <E extends Exception, T> T notNull(final T object, Function<? super String, ? extends E> fn, + final String message, final Object... values) throws E { + Exceptions.raiseIf(object == null, fn, message, values); return object; } public static void isTrue(final boolean expression, final String message, final Object... values) { - if (expression == false) { - throw new IllegalArgumentException(String.format(message, values)); + Exceptions.raiseUnless(expression, IllegalArgumentException::new, message, values); + } + + public static <T> T[] noNullElements(final T[] array, final String message, final Object... values) { + Validate.notNull(array); + + for (int i = 0; i < array.length; i++) { + Exceptions.raiseIf(array[i] == null, IllegalArgumentException::new, message, + ObjectUtils.arrayAdd(values, Integer.valueOf(i))); } + return array; } + public static void validState(final boolean expression, final String message, final Object... values) { + Exceptions.raiseUnless(expression, IllegalStateException::new, message, values); + } } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java b/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java index 674cf94..221a277 100644 --- a/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java +++ b/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java @@ -24,8 +24,16 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; import org.apache.commons.weaver.privilizer.Privilizing; @@ -33,36 +41,44 @@ import org.apache.commons.weaver.privilizer.Privilizing; * Security-agnostic "blueprint" class for reflection-related operations. Intended for use by Apache BVal code. */ public class Reflection { + /** + * Inclusivity literals for {@link #hierarchy(Class, Interfaces)}. + * Taken from commons-lang3. + */ + public enum Interfaces { + INCLUDE, EXCLUDE + } + private static final Object[][] NATIVE_CODES = new Object[][]{ - {byte.class, "byte", "B"}, - {char.class, "char", "C"}, - {double.class, "double", "D"}, - {float.class, "float", "F"}, - {int.class, "int", "I"}, - {long.class, "long", "J"}, - {short.class, "short", "S"}, - {boolean.class, "boolean", "Z"}, - {void.class, "void", "V"} + { byte.class, "byte", "B" }, + { char.class, "char", "C" }, + { double.class, "double", "D" }, + { float.class, "float", "F" }, + { int.class, "int", "I" }, + { long.class, "long", "J" }, + { short.class, "short", "S" }, + { boolean.class, "boolean", "Z" }, + { void.class, "void", "V" } }; /** * Maps primitive {@code Class}es to their corresponding wrapper {@code Class}. */ - private static final Map<Class<?>, Class<?>> PRIMITIVE_WRAPPER_MAP = new HashMap<Class<?>, Class<?>>(); + private static final Map<Class<?>, Class<?>> PRIMITIVE_WRAPPER_MAP; static { - PRIMITIVE_WRAPPER_MAP.put(Boolean.TYPE, Boolean.class); - PRIMITIVE_WRAPPER_MAP.put(Byte.TYPE, Byte.class); - PRIMITIVE_WRAPPER_MAP.put(Character.TYPE, Character.class); - PRIMITIVE_WRAPPER_MAP.put(Short.TYPE, Short.class); - PRIMITIVE_WRAPPER_MAP.put(Integer.TYPE, Integer.class); - PRIMITIVE_WRAPPER_MAP.put(Long.TYPE, Long.class); - PRIMITIVE_WRAPPER_MAP.put(Double.TYPE, Double.class); - PRIMITIVE_WRAPPER_MAP.put(Float.TYPE, Float.class); - PRIMITIVE_WRAPPER_MAP.put(Void.TYPE, Void.TYPE); + final Map<Class<?>, Class<?>> m = new HashMap<>(); + m.put(Boolean.TYPE, Boolean.class); + m.put(Byte.TYPE, Byte.class); + m.put(Character.TYPE, Character.class); + m.put(Short.TYPE, Short.class); + m.put(Integer.TYPE, Integer.class); + m.put(Long.TYPE, Long.class); + m.put(Double.TYPE, Double.class); + m.put(Float.TYPE, Float.class); + m.put(Void.TYPE, Void.TYPE); + PRIMITIVE_WRAPPER_MAP = Collections.unmodifiableMap(m); } - - /** * <p>Converts the specified primitive Class object to its corresponding * wrapper Class object.</p> @@ -129,8 +145,7 @@ public class Reflection { return cl == null ? clazz.getClassLoader() : cl; } - public static Class<?> toClass(String className) throws ClassNotFoundException - { + public static Class<?> toClass(String className) throws ClassNotFoundException { ClassLoader cl = getClassLoader(Reflection.class); return toClass(className, cl); } @@ -142,7 +157,7 @@ public class Reflection { * * @throws RuntimeException on load error */ - public static Class toClass(String className, ClassLoader loader) throws ClassNotFoundException { + public static Class<?> toClass(String className, ClassLoader loader) throws ClassNotFoundException { return toClass(className, false, loader); } @@ -153,7 +168,7 @@ public class Reflection { * * @throws RuntimeException on load error */ - public static Class toClass(String className, boolean resolve, ClassLoader loader) throws ClassNotFoundException { + public static Class<?> toClass(String className, boolean resolve, ClassLoader loader) throws ClassNotFoundException { if (className == null) { throw new NullPointerException("className == null"); } @@ -171,7 +186,7 @@ public class Reflection { for (int i = 0; !primitive && (i < NATIVE_CODES.length); i++) { if (NATIVE_CODES[i][1].equals(className)) { if (dims == 0) { - return (Class) NATIVE_CODES[i][0]; + return (Class<?>) NATIVE_CODES[i][0]; } className = (String) NATIVE_CODES[i][2]; primitive = true; @@ -296,6 +311,22 @@ public class Reflection { } /** + * Perform a search against the class hierarchy. + * @param clazz + * @param search + * @return T or {@code null} + */ + public static <T> T find(final Class<?> clazz, Function<Class<?>, T> search) { + for (Class<?> t : hierarchy(clazz, Interfaces.INCLUDE)) { + final T value = search.apply(t); + if (value != null) { + return value; + } + } + return null; + } + + /** * Construct a new instance of {@code cls} using its default constructor. * @param cls * @return T @@ -333,4 +364,94 @@ public class Reflection { return true; } + /** + * Get an {@link Iterable} that can iterate over a class hierarchy in ascending (subclass to superclass) order. + * Taken from commons-lang3. + * + * @param type the type to get the class hierarchy from + * @param interfacesBehavior switch indicating whether to include or exclude interfaces + * @return Iterable an Iterable over the class hierarchy of the given class + */ + public static Iterable<Class<?>> hierarchy(final Class<?> type, final Interfaces interfacesBehavior) { + if (type == null) { + return Collections.emptySet(); + } + final Iterable<Class<?>> classes = new Iterable<Class<?>>() { + + @Override + public Iterator<Class<?>> iterator() { + return new Iterator<Class<?>>() { + Optional<Class<?>> next; + { + next = Optional.of(type); + } + + @Override + public boolean hasNext() { + return next.isPresent(); + } + + @Override + public Class<?> next() { + final Class<?> result = next.orElseThrow(NoSuchElementException::new); + next = Optional.ofNullable(result.getSuperclass()); + return result; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } + }; + if (interfacesBehavior != Interfaces.INCLUDE) { + return classes; + } + return new Iterable<Class<?>>() { + + @Override + public Iterator<Class<?>> iterator() { + final Set<Class<?>> seenInterfaces = new HashSet<Class<?>>(); + final Iterator<Class<?>> wrapped = classes.iterator(); + + return new Iterator<Class<?>>() { + Iterator<Class<?>> interfaces = Collections.emptyIterator(); + + @Override + public boolean hasNext() { + return interfaces.hasNext() || wrapped.hasNext(); + } + + @Override + public Class<?> next() { + if (interfaces.hasNext()) { + final Class<?> nextInterface = interfaces.next(); + seenInterfaces.add(nextInterface); + return nextInterface; + } + final Class<?> nextSuperclass = wrapped.next(); + final Set<Class<?>> currentInterfaces = new LinkedHashSet<>(); + walkInterfaces(currentInterfaces, nextSuperclass); + interfaces = currentInterfaces.iterator(); + return nextSuperclass; + } + + private void walkInterfaces(final Set<Class<?>> addTo, final Class<?> c) { + for (final Class<?> iface : c.getInterfaces()) { + if (!seenInterfaces.contains(iface)) { + addTo.add(iface); + } + walkInterfaces(addTo, iface); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } + }; + } } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java ---------------------------------------------------------------------- diff --git a/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java b/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java index 4734906..b8b044d 100644 --- a/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java +++ b/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java @@ -28,8 +28,11 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; +import java.util.stream.Stream; +import org.apache.bval.util.ObjectUtils; import org.apache.bval.util.Validate; /** @@ -148,13 +151,7 @@ public class TypeUtils { */ @Override public int hashCode() { - int result = 71 << 4; - result |= raw.hashCode(); - result <<= 4; - result |= useOwner == null ? 0 : useOwner.hashCode(); - result <<= 8; - result |= Arrays.hashCode(typeArguments); - return result; + return Objects.hash(raw, useOwner, typeArguments); } } @@ -162,7 +159,8 @@ public class TypeUtils { * WildcardType implementation class. */ private static final class WildcardTypeImpl implements WildcardType { - private static final Type[] EMPTY_BOUNDS = new Type[0]; + private static final Type[] EMPTY_UPPER_BOUNDS = { Object.class }; + private static final Type[] EMPTY_LOWER_BOUNDS = new Type[0]; private final Type[] upperBounds; private final Type[] lowerBounds; @@ -173,8 +171,8 @@ public class TypeUtils { * @param lowerBounds of this type */ private WildcardTypeImpl(final Type[] upperBounds, final Type[] lowerBounds) { - this.upperBounds = upperBounds != null ? upperBounds : EMPTY_BOUNDS; - this.lowerBounds = lowerBounds != null ? lowerBounds : EMPTY_BOUNDS; + this.upperBounds = ObjectUtils.isEmpty(upperBounds) ? EMPTY_UPPER_BOUNDS : upperBounds; + this.lowerBounds = lowerBounds == null ? EMPTY_LOWER_BOUNDS : lowerBounds; } /** @@ -214,11 +212,7 @@ public class TypeUtils { */ @Override public int hashCode() { - int result = 73 << 8; - result |= Arrays.hashCode(upperBounds); - result <<= 8; - result |= Arrays.hashCode(lowerBounds); - return result; + return Objects.hash(upperBounds, lowerBounds); } } @@ -320,19 +314,13 @@ public class TypeUtils { if (type instanceof TypeVariable<?>) { // if any of the bounds are assignable to the class, then the // type is assignable to the class. - for (final Type bound : ((TypeVariable<?>) type).getBounds()) { - if (isAssignable(bound, toClass)) { - return true; - } - } - - return false; + return Stream.of(((TypeVariable<?>) type).getBounds()).anyMatch(bound -> isAssignable(bound, toClass)); } // the only classes to which a generic array type can be assigned // are class Object and array classes if (type instanceof GenericArrayType) { - return toClass.equals(Object.class) + return Object.class.equals(toClass) || toClass.isArray() && isAssignable(((GenericArrayType) type).getGenericComponentType(), toClass .getComponentType()); @@ -554,25 +542,15 @@ public class TypeUtils { if (type instanceof WildcardType) { // so long as one of the upper bounds is assignable, it's good - for (final Type bound : getImplicitUpperBounds((WildcardType) type)) { - if (isAssignable(bound, toGenericArrayType)) { - return true; - } - } - - return false; + return Stream.of(getImplicitUpperBounds((WildcardType) type)) + .anyMatch(bound -> isAssignable(bound, toGenericArrayType)); } if (type instanceof TypeVariable<?>) { // probably should remove the following logic and just return false. // type variables cannot specify arrays as bounds. - for (final Type bound : getImplicitBounds((TypeVariable<?>) type)) { - if (isAssignable(bound, toGenericArrayType)) { - return true; - } - } - - return false; + return Stream.of(getImplicitBounds((TypeVariable<?>) type)) + .anyMatch(bound -> isAssignable(bound, toGenericArrayType)); } if (type instanceof ParameterizedType) { @@ -871,8 +849,7 @@ public class TypeUtils { getRawType(parameterizedOwnerType), subtypeVarAssigns); } else { // no owner, prep the type variable assignments map - typeVarAssigns = subtypeVarAssigns == null ? new HashMap<TypeVariable<?>, Type>() - : new HashMap<TypeVariable<?>, Type>(subtypeVarAssigns); + typeVarAssigns = subtypeVarAssigns == null ? new HashMap<>() : new HashMap<>(subtypeVarAssigns); } // get the subject parameterized type's arguments @@ -917,7 +894,7 @@ public class TypeUtils { if (toClass.isPrimitive()) { // dealing with widening here. No type arguments to be // harvested with these two types. - return new HashMap<TypeVariable<?>, Type>(); + return new HashMap<>(); } // work with wrapper the wrapper class instead of the primitive @@ -925,8 +902,8 @@ public class TypeUtils { } // create a copy of the incoming map, or an empty one if it's null - final HashMap<TypeVariable<?>, Type> typeVarAssigns = subtypeVarAssigns == null ? new HashMap<TypeVariable<?>, Type>() - : new HashMap<TypeVariable<?>, Type>(subtypeVarAssigns); + final Map<TypeVariable<?>, Type> typeVarAssigns = + subtypeVarAssigns == null ? new HashMap<>() : new HashMap<>(subtypeVarAssigns); // has target class been reached? if (toClass.equals(cls)) { @@ -1030,7 +1007,7 @@ public class TypeUtils { return bounds; } - final Set<Type> types = new HashSet<Type>(bounds.length); + final Set<Type> types = new HashSet<>(bounds.length); for (final Type type1 : bounds) { boolean subtypeFound = false; @@ -1243,7 +1220,7 @@ public class TypeUtils { if (p.getOwnerType() == null) { parameterizedTypeArguments = typeArguments; } else { - parameterizedTypeArguments = new HashMap<TypeVariable<?>, Type>(typeArguments); + parameterizedTypeArguments = new HashMap<>(typeArguments); parameterizedTypeArguments.putAll(TypeUtils.getTypeArguments(p)); } final Type[] args = p.getActualTypeArguments(); http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/pom.xml ---------------------------------------------------------------------- diff --git a/bval-extras/pom.xml b/bval-extras/pom.xml index 7a3edff..3dc7982 100644 --- a/bval-extras/pom.xml +++ b/bval-extras/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>org.apache.bval</groupId> <artifactId>bval-parent</artifactId> - <version>1.1.3-SNAPSHOT</version> + <version>2.0.0-SNAPSHOT</version> </parent> <artifactId>bval-extras</artifactId> @@ -69,7 +69,7 @@ <dependencies> <dependency> <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-validation_1.1_spec</artifactId> + <artifactId>geronimo-validation_2.0_spec</artifactId> <scope>provided</scope> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java index 921ffbc..821b6aa 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ABANumber.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = ABANumberValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface ABANumber { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java index 85e84fd..139ab50 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/CUSIP.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = CUSIPValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface CUSIP { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java index 4f835f6..667c786 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/EAN13.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = EAN13Validator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface EAN13 { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java index f0685c0..c48173f 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBAN.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = IBANValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface IBAN { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java index 38eace6..1f392c7 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/IBANValidator.java @@ -26,7 +26,7 @@ import static java.lang.Character.getNumericValue; /** * <b>IBAN</b> (International Bank Account Number) Check Digit calculation/validation. * <p> - * This rountine is based on the ISO 7064 Mod 97,10 check digit caluclation routine. + * This routine is based on the ISO 7064 Mod 97,10 check digit caluclation routine. * <p> * The two check digit characters in a IBAN number are the third and fourth characters * in the code. For <i>check digit</i> calculation/validation the first four characters are moved @@ -40,7 +40,7 @@ import static java.lang.Character.getNumericValue; * <a href="http://en.wikipedia.org/wiki/International_Bank_Account_Number">Wikipedia - * IBAN number</a>. */ -public final class IBANValidator implements ConstraintValidator<IBAN, String> { +public final class IBANValidator implements ConstraintValidator<IBAN, CharSequence> { private static final long MAX = 999999999; @@ -50,12 +50,12 @@ public final class IBANValidator implements ConstraintValidator<IBAN, String> { * {@inheritDoc} */ @Override - public boolean isValid(String code, ConstraintValidatorContext context) { + public boolean isValid(CharSequence code, ConstraintValidatorContext context) { if (code.length() < 5) { return false; } - String reformattedCode = code.substring(4) + code.substring(0, 4); + String reformattedCode = code.subSequence(4, code.length()).toString() + code.subSequence(0, 4).toString(); long total = 0; for (int i = 0; i < reformattedCode.length(); i++) { int charValue = getNumericValue(reformattedCode.charAt(i)); http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java index a3a1bc3..9ce9b19 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ISBN10.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = ISBN10Validator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface ISBN10 { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java index 3bc186e..4e7ede5 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Luhn.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = LuhnValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Luhn { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java index f25bea4..57d463d 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/ModulusValidator.java @@ -38,7 +38,7 @@ import static java.lang.Character.isDigit; * * @param <A> */ -abstract class ModulusValidator<A extends Annotation> implements ConstraintValidator<A, String> { +abstract class ModulusValidator<A extends Annotation> implements ConstraintValidator<A, CharSequence> { private final int modulus; @@ -58,7 +58,7 @@ abstract class ModulusValidator<A extends Annotation> implements ConstraintValid * {@inheritDoc} */ @Override - public boolean isValid(String code, ConstraintValidatorContext context) { + public boolean isValid(CharSequence code, ConstraintValidatorContext context) { if (code.length() == 0) { return false; } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java index e69947c..67a2c01 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Sedol.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = SedolValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Sedol { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java index e051a39..d3afc67 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/Verhoeff.java @@ -25,7 +25,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -40,7 +42,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; */ @Documented @Constraint(validatedBy = VerhoeffValidator.class) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Verhoeff { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java index 5a7d76b..b6c6249 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/checkdigit/VerhoeffValidator.java @@ -33,7 +33,7 @@ import static java.lang.Character.getNumericValue; * See <a href="http://en.wikipedia.org/wiki/Verhoeff_algorithm">Wikipedia * - Verhoeff algorithm</a> for more details. */ -public final class VerhoeffValidator implements ConstraintValidator<Verhoeff, String> { +public final class VerhoeffValidator implements ConstraintValidator<Verhoeff, CharSequence> { //@formatter:off /** D - multiplication table */ @@ -65,7 +65,7 @@ public final class VerhoeffValidator implements ConstraintValidator<Verhoeff, St * {@inheritDoc} */ @Override - public boolean isValid(String code, ConstraintValidatorContext context) { + public boolean isValid(CharSequence code, ConstraintValidatorContext context) { if (code.length() == 0) { return false; } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java index 3d08d19..051d210 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/AmericanExpress.java @@ -28,7 +28,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Luhn @Pattern(regexp = "^(3[47]\\d{13})$") @Constraint(validatedBy = {}) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface AmericanExpress { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java index de6fd35..efb0772 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Diners.java @@ -28,7 +28,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Luhn @Pattern(regexp = "^(30[0-5]\\d{11}|3095\\d{10}|36\\d{12}|3[8-9]\\d{12})$") @Constraint(validatedBy = {}) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Diners { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java index c445837..4e5ddd5 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Discover.java @@ -28,7 +28,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Luhn @Pattern(regexp = "^((6011\\d{12})|(64[4-9]\\d{13})|(65\\d{14}))$") @Constraint(validatedBy = {}) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Discover { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java index f30482e..1a9b6a5 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/creditcard/Mastercard.java @@ -28,7 +28,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -45,7 +47,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Luhn @Pattern(regexp = "^(5[1-5]\\d{14})$") @Constraint(validatedBy = {}) -@Target({ FIELD, ANNOTATION_TYPE, PARAMETER }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) public @interface Mastercard { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java index a95ebde..6bca3b7 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/DirectoryValidator.java @@ -32,7 +32,7 @@ public class DirectoryValidator implements ConstraintValidator<Directory, File> */ @Override public boolean isValid(File value, ConstraintValidatorContext context) { - return value.exists() && value.isDirectory(); + return value.isDirectory(); } /** http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java index 6ed85fd..ef85896 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/file/SymlinkValidator.java @@ -49,7 +49,7 @@ public class SymlinkValidator implements ConstraintValidator<Symlink, File> { } try { - File fileInCanonicalDir = null; + File fileInCanonicalDir; if (value.getParent() == null) { fileInCanonicalDir = value; } else { http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java index b989531..c7668d5 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/DomainValidator.java @@ -20,11 +20,12 @@ package org.apache.bval.extras.constraints.net; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -import java.util.List; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static java.util.Arrays.asList; +import java.util.Arrays; +import java.util.HashSet; /** * <p><b>Domain name</b> validation routines.</p> @@ -63,7 +64,7 @@ import static java.util.Arrays.asList; * {@link java.net.InetAddress} for that functionality.) * </p> */ -public class DomainValidator implements ConstraintValidator<Domain, String> { +public class DomainValidator implements ConstraintValidator<Domain, CharSequence> { private boolean allowLocal; @@ -77,15 +78,13 @@ public class DomainValidator implements ConstraintValidator<Domain, String> { * {@inheritDoc} */ @Override - public boolean isValid(String domain, ConstraintValidatorContext context) { + public boolean isValid(CharSequence domain, ConstraintValidatorContext context) { Matcher matcher = DOMAIN_NAME_REGEX.matcher(domain); if (matcher.matches()) { domain = matcher.group(1); - return isValidTld(domain); - } else if (allowLocal && DOMAIN_LABEL.matcher(domain).matches()) { - return true; + return isValidTld(domain.toString()); } - return false; + return allowLocal && DOMAIN_LABEL.matcher(domain).matches(); } /** @@ -154,7 +153,7 @@ public class DomainValidator implements ConstraintValidator<Domain, String> { } private static String chompLeadingDot(String str) { - if (str.startsWith(".")) { + if (str.charAt(0) == '.') { return str.substring(1); } return str; @@ -165,11 +164,11 @@ public class DomainValidator implements ConstraintValidator<Domain, String> { // ----- Authoritative and comprehensive list at: // ----- http://data.iana.org/TLD/tlds-alpha-by-domain.txt - private static final List<String> INFRASTRUCTURE_TLDS = asList("arpa", // internet infrastructure + private static final Set<String> INFRASTRUCTURE_TLDS = new HashSet<>(Arrays.asList("arpa", // internet infrastructure "root" // diagnostic marker for non-truncated root zone - ); + )); - private static final List<String> GENERIC_TLDS = asList("aero", // air transport industry + private static final Set<String> GENERIC_TLDS = new HashSet<>(Arrays.asList("aero", // air transport industry "asia", // Pan-Asia/Asia Pacific "biz", // businesses "cat", // Catalan linguistic/cultural community @@ -189,9 +188,9 @@ public class DomainValidator implements ConstraintValidator<Domain, String> { "edu", // accredited postsecondary US education entities "mil", // United States Military "int" // organizations established by international treaty - ); + )); - private static final List<String> COUNTRY_CODE_TLDS = asList("ac", // Ascension Island + private static final Set<String> COUNTRY_CODE_TLDS = new HashSet<>(Arrays.asList("ac", // Ascension Island "ad", // Andorra "ae", // United Arab Emirates "af", // Afghanistan @@ -440,11 +439,11 @@ public class DomainValidator implements ConstraintValidator<Domain, String> { "za", // South Africa "zm", // Zambia "zw" // Zimbabwe - ); + )); - private static final List<String> LOCAL_TLDS = asList("localhost", // RFC2606 defined + private static final Set<String> LOCAL_TLDS = new HashSet<>(Arrays.asList("localhost", // RFC2606 defined "localdomain" // Also widely used as localhost.localdomain - ); + )); /** * {@inheritDoc} http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java index 461562c..d482e01 100644 --- a/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java +++ b/bval-extras/src/main/java/org/apache/bval/extras/constraints/net/InetAddressValidator.java @@ -27,7 +27,7 @@ import java.util.regex.Pattern; * * <p>This class provides methods to validate a candidate IP address. */ -public class InetAddressValidator implements ConstraintValidator<InetAddress, String> { +public class InetAddressValidator implements ConstraintValidator<InetAddress, CharSequence> { private static final Pattern IPV4_PATTERN = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." @@ -37,7 +37,7 @@ public class InetAddressValidator implements ConstraintValidator<InetAddress, St * {@inheritDoc} */ @Override - public boolean isValid(String value, ConstraintValidatorContext context) { + public boolean isValid(CharSequence value, ConstraintValidatorContext context) { if (!IPV4_PATTERN.matcher(value).matches()) { return false; } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java index d186dcb..8cd2399 100644 --- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java +++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/ABANumberValidatorTest.java @@ -25,7 +25,7 @@ import java.lang.annotation.Annotation; public class ABANumberValidatorTest extends AbstractCheckDigitTest { @Override - protected ConstraintValidator<? extends Annotation, String> getConstraint() { + protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() { return new ABANumberValidator(); } http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java index c25278f..190bd5b 100644 --- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java +++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/AbstractCheckDigitTest.java @@ -37,7 +37,7 @@ public abstract class AbstractCheckDigitTest { private int checkDigitLth; /** Check digit routine being tested */ - private ConstraintValidator<? extends Annotation, String> routine; + private ConstraintValidator<? extends Annotation, ? super String> routine; /** Array of valid code values */ private String[] valid; @@ -55,7 +55,7 @@ public abstract class AbstractCheckDigitTest { return 1; } - protected abstract ConstraintValidator<? extends Annotation, String> getConstraint(); + protected abstract ConstraintValidator<? extends Annotation, ? super String> getConstraint(); protected abstract String[] getValid(); http://git-wip-us.apache.org/repos/asf/bval/blob/3f287a7a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java ---------------------------------------------------------------------- diff --git a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java index 5bc57c3..fe13c4b 100644 --- a/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java +++ b/bval-extras/src/test/java/org/apache/bval/extras/constraints/checkdigit/CUSIPValidatorTest.java @@ -25,7 +25,7 @@ import java.lang.annotation.Annotation; public class CUSIPValidatorTest extends AbstractCheckDigitTest { @Override - protected ConstraintValidator<? extends Annotation, String> getConstraint() { + protected ConstraintValidator<? extends Annotation, ? super String> getConstraint() { return new CUSIPValidator(); }
