Skip to content

Commit edb5efd

Browse files
marko-bekhtagsmet
authored andcommitted
HV-1623 Throw exception in case of unexpected constrainedElement class in property metadata
- need to throw an exception rather than just create it - removed the usage of Optional as it isn't needed anymore
1 parent 6d7b067 commit edb5efd

File tree

2 files changed

+31
-33
lines changed

2 files changed

+31
-33
lines changed

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

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import java.util.List;
1717
import java.util.Map;
1818
import java.util.Objects;
19-
import java.util.Optional;
2019
import java.util.Set;
2120
import java.util.stream.Collectors;
2221

@@ -35,7 +34,7 @@
3534
import org.hibernate.validator.internal.metadata.raw.ConstrainedElement.ConstrainedElementKind;
3635
import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable;
3736
import org.hibernate.validator.internal.metadata.raw.ConstrainedField;
38-
import org.hibernate.validator.internal.properties.Constrainable;
37+
import org.hibernate.validator.internal.properties.Getter;
3938
import org.hibernate.validator.internal.properties.Property;
4039
import org.hibernate.validator.internal.properties.javabean.JavaBeanGetter;
4140
import org.hibernate.validator.internal.util.CollectionHelper;
@@ -192,41 +191,39 @@ public final void add(ConstrainedElement constrainedElement) {
192191
if ( constrainedElement.getCascadingMetaDataBuilder().isMarkedForCascadingOnAnnotatedObjectOrContainerElements() ||
193192
constrainedElement.getCascadingMetaDataBuilder().hasGroupConversionsOnAnnotatedObjectOrContainerElements() ) {
194193

195-
Optional<Constrainable> constrainable = getConstrainableFromConstrainedElement( constrainedElement );
194+
Property property = getConstrainableFromConstrainedElement( constrainedElement );
196195

197-
if ( constrainable.isPresent() ) {
198-
Property property = constrainable.get().as( Property.class );
199-
Cascadable.Builder builder = cascadableBuilders.get( property );
200-
if ( builder == null ) {
201-
builder = AbstractPropertyCascadable.AbstractBuilder.builder( valueExtractorManager, property,
202-
constrainedElement.getCascadingMetaDataBuilder() );
203-
cascadableBuilders.put( property, builder );
204-
}
205-
else {
206-
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
207-
}
208-
}
209-
}
210-
}
211-
212-
private Optional<Constrainable> getConstrainableFromConstrainedElement(ConstrainedElement constrainedElement) {
213-
if ( constrainedElement.getKind() == ConstrainedElementKind.FIELD ) {
214-
if ( constrainedElement instanceof ConstrainedField ) {
215-
return Optional.of( ( (ConstrainedField) constrainedElement ).getField() );
196+
Cascadable.Builder builder = cascadableBuilders.get( property );
197+
if ( builder == null ) {
198+
builder = AbstractPropertyCascadable.AbstractBuilder.builder( valueExtractorManager, property,
199+
constrainedElement.getCascadingMetaDataBuilder() );
200+
cascadableBuilders.put( property, builder );
216201
}
217202
else {
218-
LOG.getUnexpectedConstraintElementType( ConstrainedField.class, constrainedElement.getClass() );
203+
builder.mergeCascadingMetaData( constrainedElement.getCascadingMetaDataBuilder() );
219204
}
220205
}
221-
else if ( constrainedElement.getKind() == ConstrainedElementKind.GETTER ) {
222-
if ( constrainedElement instanceof ConstrainedExecutable ) {
223-
return Optional.of( ( (ConstrainedExecutable) constrainedElement ).getCallable() );
224-
}
225-
else {
226-
LOG.getUnexpectedConstraintElementType( ConstrainedExecutable.class, constrainedElement.getClass() );
227-
}
206+
}
207+
208+
private Property getConstrainableFromConstrainedElement(ConstrainedElement constrainedElement) {
209+
switch ( constrainedElement.getKind() ) {
210+
case FIELD:
211+
if ( constrainedElement instanceof ConstrainedField ) {
212+
return ( (ConstrainedField) constrainedElement ).getField();
213+
}
214+
else {
215+
throw LOG.getUnexpectedConstraintElementType( ConstrainedField.class, constrainedElement.getClass() );
216+
}
217+
case GETTER:
218+
if ( constrainedElement instanceof ConstrainedExecutable ) {
219+
return ( (ConstrainedExecutable) constrainedElement ).getCallable().as( Getter.class );
220+
}
221+
else {
222+
throw LOG.getUnexpectedConstraintElementType( ConstrainedExecutable.class, constrainedElement.getClass() );
223+
}
224+
default:
225+
throw LOG.getUnsupportedConstraintElementType( constrainedElement.getKind() );
228226
}
229-
return Optional.empty();
230227
}
231228

232229
@Override

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.hibernate.validator.internal.engine.messageinterpolation.parser.MessageDescriptorFormatException;
4949
import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.ConstraintType;
5050
import org.hibernate.validator.internal.metadata.location.ConstraintLocation;
51+
import org.hibernate.validator.internal.metadata.raw.ConstrainedElement;
5152
import org.hibernate.validator.internal.properties.Callable;
5253
import org.hibernate.validator.internal.properties.Constrainable;
5354
import org.hibernate.validator.internal.util.logging.formatter.ArrayOfClassesObjectFormatter;
@@ -861,6 +862,6 @@ ConstraintDefinitionException getConstraintValidatorDefinitionConstraintMismatch
861862
@Message(id = 244, value = "ConstrainedElement expected class was %1$s, but instead received %2$s.")
862863
AssertionError getUnexpectedConstraintElementType(@FormatWith(ClassObjectFormatter.class) Class<?> expecting, @FormatWith(ClassObjectFormatter.class) Class<?> got);
863864

864-
@Message(id = 245, value = "Allowed ElementTypes are %2$s, but instead received %1$s.")
865-
AssertionError getUnexpectedElementType(ElementType received, @FormatWith(ObjectArrayFormatter.class) ElementType... got);
865+
@Message(id = 245, value = "Allowed constraint element types are FIELD and GETTER, but instead received %1$s.")
866+
AssertionError getUnsupportedConstraintElementType(ConstrainedElement.ConstrainedElementKind kind);
866867
}

0 commit comments

Comments
 (0)