Skip to content

Commit 4d09a41

Browse files
committed
HV-1942 Allow a single impl of a DefaultGroupSequenceProvider to be used on a wider range of types
Since the existing assumption is that the provider is specific to a single type and cannot be placed on multiple types
1 parent 70fc56a commit 4d09a41

File tree

18 files changed

+272
-30
lines changed

18 files changed

+272
-30
lines changed

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/BazDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@
1616
*/
1717
public interface BazDefaultGroupSequenceProvider extends DefaultGroupSequenceProvider<Baz> {
1818
@Override
19-
List<Class<?>> getValidationGroups(GroupSequenceProviderDefinition.Baz object);
19+
List<Class<?>> getValidationGroups(Class<?> klass, GroupSequenceProviderDefinition.Baz object);
2020
}

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/FooBarBazDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public FooBarBazDefaultGroupSequenceProvider(FooBarBaz fooBarBaz) {
2020
}
2121

2222
@Override
23-
public List<Class<?>> getValidationGroups(FooBarBaz object) {
23+
public List<Class<?>> getValidationGroups(Class<?> klass, FooBarBaz object) {
2424
return null;
2525
}
2626
}

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/FooBarDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
public abstract class FooBarDefaultGroupSequenceProvider implements DefaultGroupSequenceProvider<FooBar> {
1818

1919
@Override
20-
public abstract List<Class<?>> getValidationGroups(FooBar object);
20+
public abstract List<Class<?>> getValidationGroups(Class<?> klass, FooBar object);
2121
}

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/FooDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class FooDefaultGroupSequenceProvider implements DefaultGroupSequenceProvider<Foo> {
1818

1919
@Override
20-
public List<Class<?>> getValidationGroups(Foo object) {
20+
public List<Class<?>> getValidationGroups(Class<?> klass, Foo object) {
2121
return null;
2222
}
2323
}

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/QuxDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class QuxDefaultGroupSequenceProvider implements DefaultGroupSequenceProvider<Qux> {
1818

1919
@Override
20-
public List<Class<?>> getValidationGroups(Qux object) {
20+
public List<Class<?>> getValidationGroups(Class<?> klass, Qux object) {
2121
return null;
2222
}
2323
}

annotation-processor/src/test/java/org/hibernate/validator/ap/testmodel/groupsequenceprovider/SampleDefaultGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
public class SampleDefaultGroupSequenceProvider implements DefaultGroupSequenceProvider<Sample> {
1818

1919
@Override
20-
public List<Class<?>> getValidationGroups(Sample object) {
20+
public List<Class<?>> getValidationGroups(Class<?> klass, Sample object) {
2121
return null;
2222
}
2323
}

documentation/src/test/java/org/hibernate/validator/referenceguide/chapter05/groupsequenceprovider/RentalCarGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class RentalCarGroupSequenceProvider
1313
implements DefaultGroupSequenceProvider<RentalCar> {
1414

1515
@Override
16-
public List<Class<?>> getValidationGroups(RentalCar car) {
16+
public List<Class<?>> getValidationGroups(Class<?> klass, RentalCar car) {
1717
List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
1818
defaultGroupSequence.add( RentalCar.class );
1919

documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/constraintapi/RentalCarGroupSequenceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
public class RentalCarGroupSequenceProvider implements DefaultGroupSequenceProvider<RentalCar> {
88
@Override
9-
public List<Class<?>> getValidationGroups(RentalCar car) {
9+
public List<Class<?>> getValidationGroups(Class<?> klass, RentalCar car) {
1010
return null;
1111
}
1212
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public Optional<ExecutableMetaData> getMetaDataFor(Executable executable) {
378378
@Override
379379
public List<Class<?>> getDefaultGroupSequence(T beanState) {
380380
if ( hasDefaultGroupSequenceProvider() ) {
381-
List<Class<?>> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanState );
381+
List<Class<?>> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanClass, beanState );
382382
return getValidDefaultGroupSequence( beanClass, providerDefaultGroupSequence );
383383
}
384384

@@ -388,7 +388,7 @@ public List<Class<?>> getDefaultGroupSequence(T beanState) {
388388
@Override
389389
public Iterator<Sequence> getDefaultValidationSequence(T beanState) {
390390
if ( hasDefaultGroupSequenceProvider() ) {
391-
List<Class<?>> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanState );
391+
List<Class<?>> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanClass, beanState );
392392
return validationOrderGenerator.getDefaultValidationOrder(
393393
beanClass,
394394
getValidDefaultGroupSequence( beanClass, providerDefaultGroupSequence )

engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,30 @@ private <T> DefaultGroupSequenceProvider<? super T> getDefaultGroupSequenceProvi
169169
private <T> DefaultGroupSequenceProvider<? super T> newGroupSequenceProviderClassInstance(Class<T> beanClass,
170170
Class<? extends DefaultGroupSequenceProvider<? super T>> providerClass) {
171171
Method[] providerMethods = GetMethods.action( providerClass );
172+
int numberOfDefaultMethods = 0;
172173
for ( Method method : providerMethods ) {
173174
if ( "getValidationGroups".equals( method.getName() )
174175
&& !method.isBridge()
175176
&& method.getParameterCount() == 1 && method.getParameterTypes()[0].isAssignableFrom( beanClass ) ) {
176-
177+
if ( method.isDefault() ) {
178+
numberOfDefaultMethods++;
179+
continue;
180+
}
181+
return NewInstance.action( providerClass, "the default group sequence provider" );
182+
}
183+
if ( "getValidationGroups".equals( method.getName() )
184+
&& !method.isBridge()
185+
&& method.getParameterCount() == 2 && method.getParameterTypes()[1].isAssignableFrom( beanClass ) ) {
186+
if ( method.isDefault() ) {
187+
numberOfDefaultMethods++;
188+
continue;
189+
}
177190
return NewInstance.action( providerClass, "the default group sequence provider" );
178191
}
179192
}
193+
if ( numberOfDefaultMethods == 2 ) {
194+
throw LOG.getDefaultGroupSequenceProviderTypeDoesNotImplementAnyMethodsException( providerClass );
195+
}
180196

181197
throw LOG.getWrongDefaultGroupSequenceProviderTypeException( beanClass );
182198
}

0 commit comments

Comments
 (0)