Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 77c3615

Browse files
HV-2127 Create a public-path copy for constraint violation
Signed-off-by: marko-bekhta <marko.prykladna@gmail.com>
1 parent 25729f0 commit 77c3615

36 files changed

+253
-167
lines changed

‎cdi/src/main/java/org/hibernate/validator/cdi/interceptor/spi/ValidationInterceptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.hibernate.validator.cdi.interceptor.spi;
66

7+
import java.io.Serial;
78
import java.io.Serializable;
89
import java.lang.reflect.Member;
910
import java.util.Arrays;
@@ -37,6 +38,7 @@
3738
@Priority(Interceptor.Priority.PLATFORM_AFTER + 800)
3839
public class ValidationInterceptor implements Serializable {
3940

41+
@Serial
4042
private static final long serialVersionUID = 604440259030722151L;
4143

4244
/**

‎engine/src/main/java/org/hibernate/validator/internal/engine/ConstraintViolationImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.hibernate.validator.internal.engine;
66

7+
import java.io.Serial;
78
import java.io.Serializable;
89
import java.lang.invoke.MethodHandles;
910
import java.util.Map;
@@ -24,6 +25,7 @@
2425
public class ConstraintViolationImpl<T> implements HibernateConstraintViolation<T>, Serializable {
2526

2627
private static final Log LOG = LoggerFactory.make( MethodHandles.lookup() );
28+
@Serial
2729
private static final long serialVersionUID = -4970067626703103139L;
2830

2931
private final String interpolatedMessage;

‎engine/src/main/java/org/hibernate/validator/internal/engine/ValidatorImpl.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
import org.hibernate.validator.internal.engine.groups.Sequence;
3939
import org.hibernate.validator.internal.engine.groups.ValidationOrder;
4040
import org.hibernate.validator.internal.engine.groups.ValidationOrderGenerator;
41+
import org.hibernate.validator.internal.engine.path.ModifiablePath;
4142
import org.hibernate.validator.internal.engine.path.NodeImpl;
42-
import org.hibernate.validator.internal.engine.path.PathImpl;
4343
import org.hibernate.validator.internal.engine.resolver.TraversableResolvers;
4444
import org.hibernate.validator.internal.engine.validationcontext.BaseBeanValidationContext;
4545
import org.hibernate.validator.internal.engine.validationcontext.ExecutableValidationContext;
@@ -164,7 +164,7 @@ public final <T> Set<ConstraintViolation<T>> validate(T object, Class<?>... grou
164164
validatorScopedContext.getParameterNameProvider(),
165165
object,
166166
validationContext.getRootBeanMetaData(),
167-
PathImpl.createRootPath()
167+
ModifiablePath.createRootPath()
168168
);
169169

170170
return validateInContext( validationContext, valueContext, validationOrder );
@@ -184,7 +184,7 @@ public final <T> Set<ConstraintViolation<T>> validateProperty(T object, String p
184184
return Collections.emptySet();
185185
}
186186

187-
PathImpl propertyPath = PathImpl.createPathFromString( propertyName );
187+
ModifiablePath propertyPath = ModifiablePath.createPathFromString( propertyName );
188188
BaseBeanValidationContext<T> validationContext = getValidationContextBuilder().forValidateProperty( rootBeanClass, rootBeanMetaData, object,
189189
propertyPath );
190190

@@ -211,7 +211,7 @@ public final <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, St
211211
return Collections.emptySet();
212212
}
213213

214-
PathImpl propertyPath = PathImpl.createPathFromString( propertyName );
214+
ModifiablePath propertyPath = ModifiablePath.createPathFromString( propertyName );
215215
BaseBeanValidationContext<T> validationContext = getValidationContextBuilder().forValidateValue( beanType, rootBeanMetaData, propertyPath );
216216

217217
ValidationOrder validationOrder = determineGroupValidationOrder( groups );
@@ -813,7 +813,7 @@ private BeanValueContext<?, Object> buildNewLocalExecutionContext(ValueContext<?
813813
return newValueContext;
814814
}
815815

816-
private <T> Set<ConstraintViolation<T>> validateValueInContext(BaseBeanValidationContext<T> validationContext, Object value, PathImpl propertyPath,
816+
private <T> Set<ConstraintViolation<T>> validateValueInContext(BaseBeanValidationContext<T> validationContext, Object value, ModifiablePath propertyPath,
817817
ValidationOrder validationOrder) {
818818
BeanValueContext<?, Object> valueContext = getValueContextForValueValidation( validationContext.getRootBeanClass(), propertyPath );
819819
valueContext.setCurrentValidatedValue( value );
@@ -902,7 +902,7 @@ private <T> void validateParametersInContext(ExecutableValidationContext<T> vali
902902
validatorScopedContext.getParameterNameProvider(),
903903
parameterValues,
904904
executableMetaData.getValidatableParametersMetaData(),
905-
PathImpl.createPathForExecutable( executableMetaData )
905+
ModifiablePath.createPathForExecutable( executableMetaData )
906906
);
907907

908908
groupIterator = validationOrder.getGroupIterator();
@@ -1035,7 +1035,7 @@ private <T> ValueContext<T, Object> getExecutableValueContext(T object, Executab
10351035
validatorScopedContext.getParameterNameProvider(),
10361036
object,
10371037
validatable,
1038-
PathImpl.createPathForExecutable( executableMetaData )
1038+
ModifiablePath.createPathForExecutable( executableMetaData )
10391039
);
10401040

10411041
valueContext.setCurrentGroup( group );
@@ -1078,7 +1078,7 @@ private <V, T> void validateReturnValueInContext(ExecutableValidationContext<T>
10781078
validatorScopedContext.getParameterNameProvider(),
10791079
value,
10801080
executableMetaData.getReturnValueMetaData(),
1081-
PathImpl.createPathForExecutable( executableMetaData )
1081+
ModifiablePath.createPathForExecutable( executableMetaData )
10821082
);
10831083

10841084
groupIterator = validationOrder.getGroupIterator();
@@ -1184,7 +1184,7 @@ private <T> void validateReturnValueForSingleGroup(BaseBeanValidationContext<T>
11841184
* @return Returns an instance of {@code ValueContext} which describes the local validation context associated to
11851185
* the given property path.
11861186
*/
1187-
private <V> BeanValueContext<?, V> getValueContextForPropertyValidation(BaseBeanValidationContext<?> validationContext, PathImpl propertyPath) {
1187+
private <V> BeanValueContext<?, V> getValueContextForPropertyValidation(BaseBeanValidationContext<?> validationContext, ModifiablePath propertyPath) {
11881188
Class<?> clazz = validationContext.getRootBeanClass();
11891189
BeanMetaData<?> beanMetaData = validationContext.getRootBeanMetaData();
11901190
Object value = validationContext.getRootBean();
@@ -1262,7 +1262,7 @@ else if ( propertyPathNode.getKey() != null ) {
12621262
* the given property path.
12631263
*/
12641264
private <V> BeanValueContext<?, V> getValueContextForValueValidation(Class<?> rootBeanClass,
1265-
PathImpl propertyPath) {
1265+
ModifiablePath propertyPath) {
12661266
Class<?> clazz = rootBeanClass;
12671267
BeanMetaData<?> beanMetaData = null;
12681268
PropertyMetaData propertyMetaData = null;
@@ -1330,13 +1330,13 @@ private boolean isValidationRequired(BaseBeanValidationContext<?> validationCont
13301330
);
13311331
}
13321332

1333-
private boolean isReachable(BaseBeanValidationContext<?> validationContext, Object traversableObject, PathImpl path,
1333+
private boolean isReachable(BaseBeanValidationContext<?> validationContext, Object traversableObject, ModifiablePath path,
13341334
ConstraintLocationKind constraintLocationKind) {
13351335
if ( needToCallTraversableResolver( path, constraintLocationKind ) ) {
13361336
return true;
13371337
}
13381338

1339-
Path pathToObject = PathImpl.createCopyWithoutLeafNode( path );
1339+
Path pathToObject = ModifiablePath.createCopyWithoutLeafNode( path );
13401340
try {
13411341
return validationContext.getTraversableResolver().isReachable(
13421342
traversableObject,
@@ -1351,7 +1351,7 @@ private boolean isReachable(BaseBeanValidationContext<?> validationContext, Obje
13511351
}
13521352
}
13531353

1354-
private boolean needToCallTraversableResolver(PathImpl path, ConstraintLocationKind constraintLocationKind) {
1354+
private boolean needToCallTraversableResolver(ModifiablePath path, ConstraintLocationKind constraintLocationKind) {
13551355
// as the TraversableResolver interface is designed right now it does not make sense to call it when
13561356
// there is no traversable object hosting the property to be accessed. For this reason we don't call the resolver
13571357
// for class level constraints (ElementType.TYPE) or top level method parameters or return values.
@@ -1362,7 +1362,7 @@ private boolean needToCallTraversableResolver(PathImpl path, ConstraintLocationK
13621362
|| isReturnValueValidation( path );
13631363
}
13641364

1365-
private boolean isCascadeRequired(BaseBeanValidationContext<?> validationContext, Object traversableObject, PathImpl path,
1365+
private boolean isCascadeRequired(BaseBeanValidationContext<?> validationContext, Object traversableObject, ModifiablePath path,
13661366
ConstraintLocationKind constraintLocationKind) {
13671367
if ( needToCallTraversableResolver( path, constraintLocationKind ) ) {
13681368
return true;
@@ -1373,7 +1373,7 @@ private boolean isCascadeRequired(BaseBeanValidationContext<?> validationContext
13731373
return false;
13741374
}
13751375

1376-
Path pathToObject = PathImpl.createCopyWithoutLeafNode( path );
1376+
Path pathToObject = ModifiablePath.createCopyWithoutLeafNode( path );
13771377
try {
13781378
return validationContext.getTraversableResolver().isCascadable(
13791379
traversableObject,
@@ -1392,15 +1392,15 @@ private boolean isClassLevelConstraint(ConstraintLocationKind constraintLocation
13921392
return ConstraintLocationKind.TYPE.equals( constraintLocationKind );
13931393
}
13941394

1395-
private boolean isCrossParameterValidation(PathImpl path) {
1395+
private boolean isCrossParameterValidation(ModifiablePath path) {
13961396
return path.getLeafNode().getKind() == ElementKind.CROSS_PARAMETER;
13971397
}
13981398

1399-
private boolean isParameterValidation(PathImpl path) {
1399+
private boolean isParameterValidation(ModifiablePath path) {
14001400
return path.getLeafNode().getKind() == ElementKind.PARAMETER;
14011401
}
14021402

1403-
private boolean isReturnValueValidation(PathImpl path) {
1403+
private boolean isReturnValueValidation(ModifiablePath path) {
14041404
return path.getLeafNode().getKind() == ElementKind.RETURN_VALUE;
14051405
}
14061406

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorContextImpl.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
import org.hibernate.validator.constraintvalidation.HibernateConstraintValidatorContext;
3030
import org.hibernate.validator.constraintvalidation.HibernateConstraintViolationBuilder;
31-
import org.hibernate.validator.internal.engine.path.PathImpl;
31+
import org.hibernate.validator.internal.engine.path.ModifiablePath;
3232
import org.hibernate.validator.internal.util.CollectionHelper;
3333
import org.hibernate.validator.internal.util.Contracts;
3434
import org.hibernate.validator.internal.util.logging.Log;
@@ -49,7 +49,7 @@ public class ConstraintValidatorContextImpl implements HibernateConstraintValida
4949
private final ClockProvider clockProvider;
5050
private final ExpressionLanguageFeatureLevel defaultConstraintExpressionLanguageFeatureLevel;
5151
private final ExpressionLanguageFeatureLevel defaultCustomViolationExpressionLanguageFeatureLevel;
52-
private final PathImpl basePath;
52+
private final ModifiablePath basePath;
5353
private final ConstraintDescriptor<?> constraintDescriptor;
5454
private List<ConstraintViolationCreationContext> constraintViolationCreationContexts;
5555
private boolean defaultDisabled;
@@ -58,7 +58,7 @@ public class ConstraintValidatorContextImpl implements HibernateConstraintValida
5858

5959
public ConstraintValidatorContextImpl(
6060
ClockProvider clockProvider,
61-
PathImpl propertyPath,
61+
ModifiablePath propertyPath,
6262
ConstraintDescriptor<?> constraintDescriptor,
6363
Object constraintValidatorPayload,
6464
ExpressionLanguageFeatureLevel defaultConstraintExpressionLanguageFeatureLevel,
@@ -168,8 +168,8 @@ public final List<ConstraintViolationCreationContext> getConstraintViolationCrea
168168
return CollectionHelper.toImmutableList( returnedConstraintViolationCreationContexts );
169169
}
170170

171-
protected final PathImpl getCopyOfBasePath() {
172-
return PathImpl.createCopy( basePath );
171+
protected final ModifiablePath getCopyOfBasePath() {
172+
return ModifiablePath.createCopy( basePath );
173173
}
174174

175175
private ConstraintViolationCreationContext getDefaultConstraintViolationCreationContext() {
@@ -188,13 +188,13 @@ private abstract class NodeBuilderBase {
188188

189189
protected final String messageTemplate;
190190
protected ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel;
191-
protected PathImpl propertyPath;
191+
protected ModifiablePath propertyPath;
192192

193-
protected NodeBuilderBase(String template, PathImpl path) {
193+
protected NodeBuilderBase(String template, ModifiablePath path) {
194194
this( template, defaultCustomViolationExpressionLanguageFeatureLevel, path );
195195
}
196196

197-
protected NodeBuilderBase(String template, ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel, PathImpl path) {
197+
protected NodeBuilderBase(String template, ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel, ModifiablePath path) {
198198
this.messageTemplate = template;
199199
this.expressionLanguageFeatureLevel = expressionLanguageFeatureLevel;
200200
this.propertyPath = path;
@@ -225,7 +225,7 @@ public ConstraintValidatorContext addConstraintViolation() {
225225

226226
protected class ConstraintViolationBuilderImpl extends NodeBuilderBase implements HibernateConstraintViolationBuilder {
227227

228-
protected ConstraintViolationBuilderImpl(String template, PathImpl path) {
228+
protected ConstraintViolationBuilderImpl(String template, ModifiablePath path) {
229229
super( template, path );
230230
}
231231

@@ -274,15 +274,15 @@ public ContainerElementNodeBuilderCustomizableContext addContainerElementNode(St
274274
*/
275275
private void dropLeafNodeIfRequired() {
276276
if ( propertyPath.getLeafNode().getKind() == ElementKind.BEAN ) {
277-
propertyPath = PathImpl.createCopyWithoutLeafNode( propertyPath );
277+
propertyPath = ModifiablePath.createCopyWithoutLeafNode( propertyPath );
278278
}
279279
}
280280
}
281281

282282
protected class NodeBuilder extends NodeBuilderBase
283283
implements NodeBuilderDefinedContext, LeafNodeBuilderDefinedContext, ContainerElementNodeBuilderDefinedContext {
284284

285-
protected NodeBuilder(String template, ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel, PathImpl path) {
285+
protected NodeBuilder(String template, ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel, ModifiablePath path) {
286286
super( template, expressionLanguageFeatureLevel, path );
287287
}
288288

@@ -322,7 +322,7 @@ private class DeferredNodeBuilder extends NodeBuilderBase
322322

323323
private DeferredNodeBuilder(String template,
324324
ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel,
325-
PathImpl path,
325+
ModifiablePath path,
326326
String nodeName,
327327
ElementKind leafNodeKind) {
328328
super( template, expressionLanguageFeatureLevel, path );
@@ -334,7 +334,7 @@ private DeferredNodeBuilder(String template,
334334

335335
private DeferredNodeBuilder(String template,
336336
ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel,
337-
PathImpl path,
337+
ModifiablePath path,
338338
String nodeName,
339339
Class<?> leafNodeContainerType,
340340
Integer leafNodeTypeArgumentIndex) {

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintViolationCreationContext.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import java.util.Map;
1010

11-
import org.hibernate.validator.internal.engine.path.PathImpl;
11+
import org.hibernate.validator.internal.engine.path.ModifiablePath;
1212
import org.hibernate.validator.internal.util.stereotypes.Immutable;
1313
import org.hibernate.validator.messageinterpolation.ExpressionLanguageFeatureLevel;
1414

@@ -23,7 +23,7 @@ public class ConstraintViolationCreationContext {
2323
private final String message;
2424
private final ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel;
2525
private final boolean customViolation;
26-
private final PathImpl propertyPath;
26+
private final ModifiablePath propertyPath;
2727
@Immutable
2828
private final Map<String, Object> messageParameters;
2929
@Immutable
@@ -33,7 +33,7 @@ public class ConstraintViolationCreationContext {
3333
public ConstraintViolationCreationContext(String message,
3434
ExpressionLanguageFeatureLevel expressionLanguageFeatureLevel,
3535
boolean customViolation,
36-
PathImpl property,
36+
ModifiablePath property,
3737
Map<String, Object> messageParameters,
3838
Map<String, Object> expressionVariables,
3939
Object dynamicPayload) {
@@ -58,7 +58,7 @@ public boolean isCustomViolation() {
5858
return customViolation;
5959
}
6060

61-
public final PathImpl getPath() {
61+
public final ModifiablePath getPath() {
6262
return propertyPath;
6363
}
6464

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/CrossParameterConstraintValidatorContextImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import org.hibernate.validator.constraintvalidation.HibernateConstraintViolationBuilder;
1414
import org.hibernate.validator.constraintvalidation.HibernateCrossParameterConstraintValidatorContext;
15-
import org.hibernate.validator.internal.engine.path.PathImpl;
15+
import org.hibernate.validator.internal.engine.path.ModifiablePath;
1616
import org.hibernate.validator.internal.util.Contracts;
1717
import org.hibernate.validator.messageinterpolation.ExpressionLanguageFeatureLevel;
1818

@@ -25,7 +25,7 @@ public class CrossParameterConstraintValidatorContextImpl extends ConstraintVali
2525

2626
public CrossParameterConstraintValidatorContextImpl(List<String> methodParameterNames,
2727
ClockProvider clockProvider,
28-
PathImpl propertyPath,
28+
ModifiablePath propertyPath,
2929
ConstraintDescriptor<?> constraintDescriptor,
3030
Object constraintValidatorPayload,
3131
ExpressionLanguageFeatureLevel constraintExpressionLanguageFeatureLevel,
@@ -63,7 +63,7 @@ private class CrossParameterConstraintViolationBuilderImpl extends ConstraintVio
6363

6464
private final List<String> methodParameterNames;
6565

66-
private CrossParameterConstraintViolationBuilderImpl(List<String> methodParameterNames, String template, PathImpl path) {
66+
private CrossParameterConstraintViolationBuilderImpl(List<String> methodParameterNames, String template, ModifiablePath path) {
6767
super( template, path );
6868
this.methodParameterNames = methodParameterNames;
6969
}
@@ -77,7 +77,7 @@ public NodeBuilderDefinedContext addParameterNode(int index) {
7777
}
7878

7979
private void dropLeafNode() {
80-
propertyPath = PathImpl.createCopyWithoutLeafNode( propertyPath );
80+
propertyPath = ModifiablePath.createCopyWithoutLeafNode( propertyPath );
8181
}
8282
}
8383
}

‎engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/LambdaBasedValidatorDescriptor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55
package org.hibernate.validator.internal.engine.constraintvalidation;
66

7+
import java.io.Serial;
78
import java.lang.annotation.Annotation;
89
import java.lang.reflect.Type;
910
import java.util.EnumSet;
@@ -22,6 +23,7 @@
2223
*/
2324
class LambdaBasedValidatorDescriptor<A extends Annotation> implements ConstraintValidatorDescriptor<A> {
2425

26+
@Serial
2527
private static final long serialVersionUID = 5129757824081595723L;
2628

2729
private final Type validatedType;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /