efficiency
diff --git a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/DescriptorManager.java b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/DescriptorManager.java
index f25514c..caa9bb3 100644
--- a/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/DescriptorManager.java
+++ b/bval-jsr/src/main/java/org/apache/bval/jsr/descriptor/DescriptorManager.java
@@ -76,16 +76,19 @@
if (beanDescriptors.containsKey(beanClass)) {
return beanDescriptors.get(beanClass);
}
- final MetadataBuilder.ForBean<T> builder =
- knownUnconstrainedTypes.contains(beanClass) ? EmptyBuilder.instance().forBean() : builder(beanClass);
+ final boolean constrained = !knownUnconstrainedTypes.contains(beanClass);
+ final MetadataBuilder.ForBean<T> builder = constrained ? builder(beanClass) : EmptyBuilder.instance().forBean();
final BeanD<T> beanD = new BeanD<>(new MetadataReader(validatorFactory, beanClass).forBean(builder));
- if (beanD.isBeanConstrained() || !(beanD.getConstrainedConstructors().isEmpty()
- && beanD.getConstrainedMethods(MethodType.GETTER, MethodType.NON_GETTER).isEmpty())) {
- @SuppressWarnings("unchecked")
- final BeanD<T> result =
+ if (constrained) {
+ // if not previously known to be unconstrained, check:
+ if (beanD.isBeanConstrained() || !(beanD.getConstrainedConstructors().isEmpty()
+ && beanD.getConstrainedMethods(MethodType.GETTER, MethodType.NON_GETTER).isEmpty())) {
+ @SuppressWarnings("unchecked")
+ final BeanD<T> result =
Optional.ofNullable((BeanD<T>) beanDescriptors.putIfAbsent(beanClass, beanD)).orElse(beanD);
- return result;
+ return result;
+ }
}
knownUnconstrainedTypes.add(beanClass);
return beanD;