Skip to content

Commit 7ed7d55

Browse files
committed
message cache
1 parent c1b49a7 commit 7ed7d55

File tree

3 files changed

+14
-25
lines changed

3 files changed

+14
-25
lines changed

validator/src/main/java/io/avaje/validation/core/CoreAdapterBuilder.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@
1414

1515
/** Builds and caches the ValidationAdapter adapters for DValidator. */
1616
final class CoreAdapterBuilder {
17-
17+
public static final ValidationAdapter NOOP = (type, req, propertyName) -> true;
1818
private final DValidator context;
1919
private final List<ValidationContext.AdapterFactory> factories = new ArrayList<>();
2020
private final List<ValidationContext.AnnotationFactory> annotationFactories = new ArrayList<>();
2121
private final Map<Object, ValidationAdapter<?>> adapterCache = new ConcurrentHashMap<>();
22-
private final MessageInterpolator interpolator;
2322

2423
CoreAdapterBuilder(
2524
DValidator context,
@@ -30,7 +29,6 @@ final class CoreAdapterBuilder {
3029
this.annotationFactories.addAll(userAnnotationFactories);
3130
this.annotationFactories.add(BasicAdapters.FACTORY);
3231
this.annotationFactories.add(NumberAdapters.FACTORY);
33-
interpolator = context.interpolator();
3432
}
3533

3634
/** Return the adapter from cache if exists else return null. */
@@ -76,6 +74,6 @@ <T> ValidationAdapter<T> buildAnnotation(Class<? extends Annotation> cls, Map<St
7674
}
7775
}
7876
// unknown annotations have noop
79-
return NoopAnnotationValidator.INSTANCE;
77+
return NOOP;
8078
}
8179
}

validator/src/main/java/io/avaje/validation/core/DValidator.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.lang.reflect.Type;
1010
import java.util.ArrayList;
1111
import java.util.Collections;
12+
import java.util.HashMap;
1213
import java.util.List;
1314
import java.util.Locale;
1415
import java.util.Map;
@@ -31,6 +32,8 @@ final class DValidator implements Validator, ValidationContext {
3132
private final MessageInterpolator interpolator;
3233
private final LocaleResolver localeResolver;
3334
private final DTemplateLookup templateLookup;
35+
private final Map<String, String> messageCache = new HashMap<>();
36+
3437

3538
DValidator(
3639
List<AdapterFactory> factories,
@@ -118,12 +121,16 @@ ValidationRequest request(@Nullable Locale locale) {
118121

119122
String interpolate(Message msg, Locale requestLocale) {
120123

121-
// resolve the locale to use to produce the message
122-
final Locale locale = localeResolver.resolve(requestLocale);
123-
// lookup in resource bundles using resolved locale and template
124-
final String template = templateLookup.lookup(msg.template(), locale);
124+
return messageCache.computeIfAbsent(
125+
requestLocale.toString() + msg.template(),
126+
k -> {
127+
// resolve the locale to use to produce the message
128+
final Locale locale = localeResolver.resolve(requestLocale);
129+
// lookup in resource bundles using resolved locale and template
130+
final String template = templateLookup.lookup(msg.template(), locale);
125131

126-
return interpolator.interpolate(template, msg.attributes());
132+
return interpolator.interpolate(template, msg.attributes());
133+
});
127134
}
128135

129136
/** Implementation of Validator.Builder. */

validator/src/main/java/io/avaje/validation/core/NoopAnnotationValidator.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)