From eb9c6a7d0cbeaf3f0598bcd4de0d6cd651f5c963 Mon Sep 17 00:00:00 2001
From: ilikly
Date: Thu, 16 Mar 2023 16:35:48 +0800
Subject: [PATCH 01/13] HV-1942 Update DefaultGroupSequenceProvider add default
method provide the class of instance
---
.../metadata/aggregated/BeanMetaDataImpl.java | 4 ++--
.../spi/group/DefaultGroupSequenceProvider.java | 16 ++++++++++++++++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/BeanMetaDataImpl.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/BeanMetaDataImpl.java
index 34adb58879..db7a0eda4e 100644
--- a/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/BeanMetaDataImpl.java
+++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/aggregated/BeanMetaDataImpl.java
@@ -325,7 +325,7 @@ public Optional getMetaDataFor(Executable executable) {
@Override
public List> getDefaultGroupSequence(T beanState) {
if ( hasDefaultGroupSequenceProvider() ) {
- List> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanState );
+ List> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanClass, beanState );
return getValidDefaultGroupSequence( beanClass, providerDefaultGroupSequence );
}
@@ -335,7 +335,7 @@ public List> getDefaultGroupSequence(T beanState) {
@Override
public Iterator getDefaultValidationSequence(T beanState) {
if ( hasDefaultGroupSequenceProvider() ) {
- List> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanState );
+ List> providerDefaultGroupSequence = defaultGroupSequenceProvider.getValidationGroups( beanClass, beanState );
return validationOrderGenerator.getDefaultValidationOrder(
beanClass,
getValidDefaultGroupSequence( beanClass, providerDefaultGroupSequence )
diff --git a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
index 8ad97d9ca6..59f4af9b96 100644
--- a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
+++ b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
@@ -39,6 +39,22 @@ public interface DefaultGroupSequenceProvider {
* The object parameter allows to dynamically compose the default group sequence in function of the validated value state.
*
*
+ * @param clazz the instance class being validated.
+ * @param object the instance being validated. This value can be {@code null} in case this method was called as part of
+ * {@linkplain jakarta.validation.Validator#validateValue(Class, String, Object, Class[]) Validator#validateValue}.
+ *
+ * @return a list of classes specifying the default group sequence. The same constraints to the redefined group list
+ * apply as for lists defined via {@code GroupSequence}. In particular the list has to contain the type T.
+ */
+ default List> getValidationGroups(Class> clazz, T object){
+ return getValidationGroups(object);
+ }
+ /**
+ * This method returns the default group sequence for the given instance.
+ *
+ * The object parameter allows to dynamically compose the default group sequence in function of the validated value state.
+ *
+ *
* @param object the instance being validated. This value can be {@code null} in case this method was called as part of
* {@linkplain jakarta.validation.Validator#validateValue(Class, String, Object, Class[]) Validator#validateValue}.
*
From 86574944261a3e689e290cd07ea7cf342116f03d Mon Sep 17 00:00:00 2001
From: ilikly
Date: Thu, 16 Mar 2023 16:40:15 +0800
Subject: [PATCH 02/13] HV-1942 Update DefaultGroupSequenceProvider checkstyle
---
.../validator/spi/group/DefaultGroupSequenceProvider.java | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
index 59f4af9b96..df2c244f61 100644
--- a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
+++ b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
@@ -46,9 +46,10 @@ public interface DefaultGroupSequenceProvider {
* @return a list of classes specifying the default group sequence. The same constraints to the redefined group list
* apply as for lists defined via {@code GroupSequence}. In particular the list has to contain the type T.
*/
- default List> getValidationGroups(Class> clazz, T object){
- return getValidationGroups(object);
- }
+ default List> getValidationGroups(Class> clazz, T object) {
+ return getValidationGroups( object );
+ }
+
/**
* This method returns the default group sequence for the given instance.
*
From 986b052723c0306e894a8375a0c5f2caa247029b Mon Sep 17 00:00:00 2001
From: ilikly
Date: Thu, 16 Mar 2023 16:44:20 +0800
Subject: [PATCH 03/13] HV-1942 Update DefaultGroupSequenceProvider checkstyle
---
.../validator/spi/group/DefaultGroupSequenceProvider.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
index df2c244f61..7af6bbddca 100644
--- a/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
+++ b/engine/src/main/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProvider.java
@@ -47,7 +47,7 @@ public interface DefaultGroupSequenceProvider {
* apply as for lists defined via {@code GroupSequence}. In particular the list has to contain the type T.
*/
default List> getValidationGroups(Class> clazz, T object) {
- return getValidationGroups( object );
+ return getValidationGroups( object );
}
/**
From ccd52a4f797b34009ca4263086599b28ea533d57 Mon Sep 17 00:00:00 2001
From: ilikly
Date: Fri, 23 Jun 2023 12:54:10 +0800
Subject: [PATCH 04/13] HV-1942 Add DefaultGroupSequenceProvider test
---
.../DefaultGroupSequenceProviderTest.java | 127 ++++++++++++++++++
1 file changed, 127 insertions(+)
create mode 100644 cdi/src/test/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProviderTest.java
diff --git a/cdi/src/test/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProviderTest.java b/cdi/src/test/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProviderTest.java
new file mode 100644
index 0000000000..4d783f7e61
--- /dev/null
+++ b/cdi/src/test/java/org/hibernate/validator/spi/group/DefaultGroupSequenceProviderTest.java
@@ -0,0 +1,127 @@
+package org.hibernate.validator.spi.group;
+
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import jakarta.validation.ValidatorFactory;
+import jakarta.validation.constraints.NotNull;
+import org.hibernate.validator.group.GroupSequenceProvider;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+
+/**
+ * DefaultGroupSequenceProviderTest.
+ *
+ * @author ilikly
+ */
+public class DefaultGroupSequenceProviderTest {
+
+ @Test
+ public void withoutClassParam() {
+ Assert.assertThrows(() -> {
+ final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
+ final Validator validator = validatorFactory.getValidator();
+ validator.validate(new A1());
+ });
+ }
+
+ @Test
+ public void withClassParam() {
+ final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
+ final Validator validator = validatorFactory.getValidator();
+ validator.validate(new A2());
+ }
+
+
+ public static class DefaultGroupSequenceProvider1 implements DefaultGroupSequenceProvider
*
- * @param clazz the instance class being validated.
+ * @param clazz the instance class being validated.
* @param object the instance being validated. This value can be {@code null} in case this method was called as part of
* {@linkplain jakarta.validation.Validator#validateValue(Class, String, Object, Class[]) Validator#validateValue}.
*