Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
{
"reflection" : [
{
"condition" : {
"typeReached" : "jakarta.el.FactoryFinder"
},
"type" : "org.glassfish.expressly.ExpressionFactoryImpl"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.constraintvalidators.bv.money.DecimalMaxValidatorForMonetaryAmount"
Expand Down Expand Up @@ -1354,6 +1348,12 @@
},
"type" : "org.codehaus.groovy.runtime.ScriptBytecodeAdapter"
},
{
"condition" : {
"typeReached" : "jakarta.el.FactoryFinder"
},
"type" : "org.glassfish.expressly.ExpressionFactoryImpl"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.util.logging.Log_$logger"
Expand Down Expand Up @@ -5210,45 +5210,9 @@
"org.hibernate.validator.constraints.Range"
]
}
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.engine.resolver.TraversableResolvers"
},
"type" : "jakarta.persistence.Persistence"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.metadata.provider.AnnotationMetaDataProvider"
},
"type" : "java.lang.Object"
}
],
"resources" : [
{
"condition" : {
"typeReached" : "jakarta.el.FactoryFinder"
},
"glob" : "META-INF/services/jakarta.el.ExpressionFactory"
},
{
"condition" : {
"typeReached" : "jakarta.validation.Validation$GetValidationProviderListAction"
},
"glob" : "META-INF/services/jakarta.validation.spi.ValidationProvider"
},
{
"bundle" : "ContributorValidationMessages"
},
{
"bundle" : "ValidationMessages"
},
{
"bundle" : "com.sun.org.apache.xerces.internal.impl.xpath.regex.message"
},
{
"bundle" : "org.hibernate.validator.ValidationMessages"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.util.actions.GetResources"
Expand Down Expand Up @@ -5285,12 +5249,24 @@
},
"glob" : "ContributorValidationMessages_en_US.properties"
},
{
"condition" : {
"typeReached" : "jakarta.el.FactoryFinder"
},
"glob" : "META-INF/services/jakarta.el.ExpressionFactory"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.engine.ServiceLoaderBasedConstraintMappingContributor"
},
"glob" : "META-INF/services/jakarta.validation.ConstraintValidator"
},
{
"condition" : {
"typeReached" : "jakarta.validation.Validation$GetValidationProviderListAction"
},
"glob" : "META-INF/services/jakarta.validation.spi.ValidationProvider"
},
{
"condition" : {
"typeReached" : "org.hibernate.validator.internal.engine.AbstractConfigurationImpl"
Expand Down Expand Up @@ -5367,6 +5343,18 @@
},
"module" : "java.xml",
"glob" : "com/sun/org/apache/xerces/internal/impl/xpath/regex/message_en_US.properties"
},
{
"bundle" : "ContributorValidationMessages"
},
{
"bundle" : "ValidationMessages"
},
{
"bundle" : "com.sun.org.apache.xerces.internal.impl.xpath.regex.message"
},
{
"bundle" : "org.hibernate.validator.ValidationMessages"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,5 +109,114 @@
"test_file": "tests/src/org.hibernate.validator/hibernate-validator/9.1.0.Final/src/test/java/hibernate_validator/GetDeclaredConstructorTest.java",
"metadata_file": "metadata/org.hibernate.validator/hibernate-validator/9.1.0.Final/reachability-metadata.json"
}
},
"improve_library_coverage:2026-07-22": {
"timestamp": "2026-07-22T22:28:49.141179Z",
"library": "org.hibernate.validator:hibernate-validator:9.1.0.Final",
"starting_commit": "76d24ff7b4d7a09eeb7b79e8c9494373c0f1809a",
"ending_commit": "fafaaabf450bbd9f8f29ce2dbde9e0e4e22f328f",
"strategy_name": "dynamic_access_main_sources_pi_gpt-5.6-terra",
"agent": "pi",
"model": "gpt-5.6-terra",
"status": "success",
"stats": {
"version": "9.1.0.Final",
"dynamicAccess": {
"breakdown": {
"reflection": {
"coverageRatio": 0.754717,
"coveredCalls": 40,
"totalCalls": 53
},
"resources": {
"coverageRatio": 1.0,
"coveredCalls": 7,
"totalCalls": 7
}
},
"coverageRatio": 0.783333,
"coveredCalls": 47,
"totalCalls": 60
},
"libraryCoverage": {
"instruction": {
"covered": 24604,
"missed": 42715,
"ratio": 0.365484,
"total": 67319
},
"line": {
"covered": 6055,
"missed": 9759,
"ratio": 0.382889,
"total": 15814
},
"method": {
"covered": 1667,
"missed": 2837,
"ratio": 0.370115,
"total": 4504
}
}
},
"library_preparation_preflight": {
"status": "completed",
"action": "advisory_preparation",
"issue_number": 8397,
"issue_label": "library-update-request",
"library": "org.hibernate.validator:hibernate-validator:9.1.0.Final",
"summary": "Hibernate Validator requires a Unified EL implementation in standalone SE tests for its default message interpolator; the artifact declares only the EL API as optional.",
"deterministic_setup": [
{
"kind": "dependency",
"coordinate": "org.glassfish.expressly:expressly:6.0.0",
"scope": "testImplementation",
"reason": "Hibernate Validator 9.1 documentation explicitly requires this Unified EL implementation in SE environments; it transitively provides jakarta.el-api 6.0.1."
}
],
"agent_guidance": "Exercise Validation.buildDefaultValidatorFactory() with a constraint message containing an EL expression so the default ResourceBundleMessageInterpolator and its EL ServiceLoader path are covered.",
"risks": [
"Spring Boot may supply an EL implementation through its web container, but the generated standalone TCK test does not; without this preparation default validator bootstrap/interpolation is not representative."
],
"applied_setup": [
{
"kind": "dependency",
"coordinate": "org.glassfish.expressly:expressly:6.0.0",
"result": "already_present",
"target": "tests/src/org.hibernate.validator/hibernate-validator/9.1.0.Final/build.gradle"
}
],
"input_evidence": [
{
"name": "issue",
"summary": "#8397 Update existing library: org.hibernate.validator:hibernate-validator:9.1.0.Final; label=library-update-request; body_chars=6808"
},
{
"name": "existing_tests",
"summary": "20 existing test file path(s) included"
}
],
"model": "gpt-5.6-terra",
"input_tokens_used": 65132,
"output_tokens_used": 2689,
"prompt_path": "library-preflight-prompt.txt",
"raw_response_path": "library-preflight-response.txt",
"session_log_path": "/home/mihailo/git/graalvm-reachability-metadata-copy/forge/logs/org.hibernate.validator:hibernate-validator:9.1.0.Final/library-preparation-preflight/pi-generation-2026-07-22T21-58-26-780566Z.log"
},
"metrics": {
"input_tokens_used": 104812,
"cached_input_tokens_used": 789504,
"output_tokens_used": 9857,
"iterations": 4,
"cost_usd": 0.6073,
"generated_loc": 1022,
"tested_library_loc": 6055,
"metadata_entries": 890,
"test_only_metadata_entries": 168,
"code_coverage_percent": 38.29
},
"artifacts": {
"metadata_file": "metadata/org.hibernate.validator/hibernate-validator/9.1.0.Final/reachability-metadata.json"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,37 @@
"dynamicAccess" : {
"breakdown" : {
"reflection" : {
"coverageRatio" : 0.716981,
"coveredCalls" : 38,
"coverageRatio" : 0.754717,
"coveredCalls" : 40,
"totalCalls" : 53
},
"resources" : {
"coverageRatio" : 0.857143,
"coveredCalls" : 6,
"coverageRatio" : 1.0,
"coveredCalls" : 7,
"totalCalls" : 7
}
},
"coverageRatio" : 0.733333,
"coveredCalls" : 44,
"coverageRatio" : 0.783333,
"coveredCalls" : 47,
"totalCalls" : 60
},
"libraryCoverage" : {
"instruction" : {
"covered" : 24106,
"missed" : 43213,
"ratio" : 0.358086,
"covered" : 24604,
"missed" : 42715,
"ratio" : 0.365484,
"total" : 67319
},
"line" : {
"covered" : 5933,
"missed" : 9881,
"ratio" : 0.375174,
"covered" : 6055,
"missed" : 9759,
"ratio" : 0.382889,
"total" : 15814
},
"method" : {
"covered" : 1637,
"missed" : 2867,
"ratio" : 0.363455,
"covered" : 1667,
"missed" : 2837,
"ratio" : 0.370115,
"total" : 4504
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies {
implementation("org.hibernate.validator:hibernate-validator:$libraryVersion")
testRuntimeOnly('org.glassfish:jakarta.el:4.0.2')
testImplementation('org.assertj:assertj-core:3.22.0')
testImplementation 'joda-time:joda-time:2.12.7'
testImplementation "org.glassfish.expressly:expressly:6.0.0"
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright and related rights waived via CC0
*
* You should have received a copy of the CC0 legalcode along with this
* work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
*/
package hibernate_validator;

import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import jakarta.validation.constraints.NotBlank;

import org.hibernate.validator.group.GroupSequenceProvider;
import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Set;

import static org.assertj.core.api.Assertions.assertThat;

public class GetMethodsTest {
@Test
void defaultGroupSequenceProviderIsDiscoveredDuringValidation() {
try (ValidatorFactory factory = Validation.buildDefaultValidatorFactory()) {
Validator validator = factory.getValidator();

Set<ConstraintViolation<Registration>> violations = validator.validate(new Registration(""));

assertThat(violations).singleElement().satisfies(violation -> {
assertThat(violation.getPropertyPath()).hasToString("name");
assertThat(violation.getMessage()).isEqualTo("name is required");
});
}
}

@GroupSequenceProvider(RegistrationGroupSequenceProvider.class)
public static final class Registration {
@NotBlank(message = "name is required")
private final String name;

public Registration(String name) {
this.name = name;
}
}

public static final class RegistrationGroupSequenceProvider
implements DefaultGroupSequenceProvider<Registration> {
@Override
public List<Class<?>> getValidationGroups(Registration registration) {
return List.of(Registration.class);
}
}
}
Loading
Loading