Skip to content

Commit e3a883a

Browse files
marko-bekhtagsmet
authored andcommitted
HV-1363 Add additional checks before casting
1 parent 7757ab4 commit e3a883a

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/PropertyMetaData.java

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.validator.internal.metadata.aggregated;
88

9+
import java.lang.invoke.MethodHandles;
910
import java.lang.reflect.Type;
1011
import java.util.ArrayDeque;
1112
import java.util.Collections;
@@ -37,6 +38,8 @@
3738
import org.hibernate.validator.internal.properties.Property;
3839
import org.hibernate.validator.internal.util.CollectionHelper;
3940
import org.hibernate.validator.internal.util.TypeResolutionHelper;
41+
import org.hibernate.validator.internal.util.logging.Log;
42+
import org.hibernate.validator.internal.util.logging.LoggerFactory;
4043
import org.hibernate.validator.internal.util.stereotypes.Immutable;
4144

4245
/**
@@ -57,6 +60,8 @@
5760
*/
5861
public class PropertyMetaData extends AbstractConstraintMetaData {
5962

63+
private static final Log LOG = LoggerFactory.make( MethodHandles.lookup() );
64+
6065
@Immutable
6166
private final Set<Cascadable> cascadables;
6267

@@ -200,27 +205,37 @@ public final void add(ConstrainedElement constrainedElement) {
200205
if ( constrainedElement.getCascadingMetaDataBuilder().isMarkedForCascadingOnAnnotatedObjectOrContainerElements() ||
201206
constrainedElement.getCascadingMetaDataBuilder().hasGroupConversionsOnAnnotatedObjectOrContainerElements() ) {
202207
if ( constrainedElement.getKind() == ConstrainedElementKind.PROPERTY ) {
203-
Property property = ( (ConstrainedProperty) constrainedElement ).getProperty();
204-
Cascadable.Builder builder = cascadableBuilders.get( property );
208+
if ( constrainedElement instanceof ConstrainedProperty ) {
209+
Property property = ( (ConstrainedProperty) constrainedElement ).getProperty();
210+
Cascadable.Builder builder = cascadableBuilders.get( property );
205211

206-
if ( builder == null ) {
207-
builder = new PropertyCascadable.Builder( valueExtractorManager, property, constrainedElement.getCascadingMetaDataBuilder() );
208-
cascadableBuilders.put( property, builder );
212+
if ( builder == null ) {
213+
builder = new PropertyCascadable.Builder( valueExtractorManager, property, constrainedElement.getCascadingMetaDataBuilder() );
214+
cascadableBuilders.put( property, builder );
215+
}
216+
else {
217+
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
218+
}
209219
}
210220
else {
211-
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
221+
LOG.getUnexpectedConstraintElementType( ConstrainedProperty.class, constrainedElement.getClass() );
212222
}
213223
}
214224
else if ( constrainedElement.getKind() == ConstrainedElementKind.METHOD ) {
215-
Property property = ( (ConstrainedExecutable) constrainedElement ).getCallable().as( Property.class );
216-
Cascadable.Builder builder = cascadableBuilders.get( property );
225+
if ( constrainedElement instanceof ConstrainedExecutable ) {
226+
Property property = ( (ConstrainedExecutable) constrainedElement ).getCallable().as( Property.class );
227+
Cascadable.Builder builder = cascadableBuilders.get( property );
217228

218-
if ( builder == null ) {
219-
builder = new PropertyCascadable.Builder( valueExtractorManager, property, constrainedElement.getCascadingMetaDataBuilder() );
220-
cascadableBuilders.put( property, builder );
229+
if ( builder == null ) {
230+
builder = new PropertyCascadable.Builder( valueExtractorManager, property, constrainedElement.getCascadingMetaDataBuilder() );
231+
cascadableBuilders.put( property, builder );
232+
}
233+
else {
234+
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
235+
}
221236
}
222237
else {
223-
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
238+
LOG.getUnexpectedConstraintElementType( ConstrainedExecutable.class, constrainedElement.getClass() );
224239
}
225240
}
226241
}

engine/src/main/java/org/hibernate/validator/internal/util/logging/Log.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.hibernate.validator.spi.scripting.ScriptEvaluationException;
6464
import org.hibernate.validator.spi.scripting.ScriptEvaluatorFactory;
6565
import org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException;
66+
6667
import org.jboss.logging.BasicLogger;
6768
import org.jboss.logging.annotations.Cause;
6869
import org.jboss.logging.annotations.FormatWith;
@@ -857,4 +858,7 @@ ConstraintDefinitionException getConstraintValidatorDefinitionConstraintMismatch
857858
@FormatWith(ClassObjectFormatter.class) Class<? extends ConstraintValidator<?, ?>> constraintValidatorImplementationType,
858859
@FormatWith(ClassObjectFormatter.class) Class<? extends Annotation> registeredConstraintAnnotationType,
859860
@FormatWith(TypeFormatter.class) Type declaredConstraintAnnotationType);
861+
862+
@Message(id = 244, value = "ConstrainedElement expected class was %1$s, but instead received %2$s.")
863+
AssertionError getUnexpectedConstraintElementType(@FormatWith(ClassObjectFormatter.class) Class<?> expecting, @FormatWith(ClassObjectFormatter.class) Class<?> got);
860864
}

0 commit comments

Comments
 (0)