From 171f3df074b8053c2b7aa294a6d6e55e0ebd4f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Thu, 6 Jun 2024 18:03:36 +0200 Subject: [PATCH] Fix missing reflection for some generator classes in Hibernate ORM --- .../hibernate/orm/deployment/ClassNames.java | 4 ++++ .../orm/deployment/ClassNamesTest.java | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java index 40eb87e39ba11..5ea0fc42ad543 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/ClassNames.java @@ -68,6 +68,7 @@ private static DotName createConstant(String fqcn) { createConstant("org.hibernate.generator.internal.TenantIdGeneration"), createConstant("org.hibernate.generator.internal.VersionGeneration"), createConstant("org.hibernate.id.Assigned"), + createConstant("org.hibernate.id.CompositeNestedGeneratedValueGenerator"), createConstant("org.hibernate.id.ForeignGenerator"), createConstant("org.hibernate.id.GUIDGenerator"), createConstant("org.hibernate.id.IdentityGenerator"), @@ -75,6 +76,9 @@ private static DotName createConstant(String fqcn) { createConstant("org.hibernate.id.SelectGenerator"), createConstant("org.hibernate.id.UUIDGenerator"), createConstant("org.hibernate.id.UUIDHexGenerator"), + createConstant("org.hibernate.id.enhanced.SequenceStyleGenerator"), + createConstant("org.hibernate.id.enhanced.TableGenerator"), + createConstant("org.hibernate.id.uuid.UuidGenerator"), createConstant("org.hibernate.tuple.CreationTimestampGeneration"), createConstant("org.hibernate.tuple.UpdateTimestampGeneration"), createConstant("org.hibernate.tuple.VmValueGeneration")); diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java index f9e7f56ddf797..60b94f4c7ddef 100644 --- a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java +++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/deployment/ClassNamesTest.java @@ -66,6 +66,14 @@ private static Set provideConstantsToTest() { return ClassNames.CREATED_CONSTANTS; } + @Test + public void testNoMissingGeneratorClass() { + Set generatorImplementors = findConcreteNamedImplementors(hibernateIndex, "org.hibernate.generator.Generator"); + + assertThat(ClassNames.GENERATORS) + .containsExactlyInAnyOrderElementsOf(generatorImplementors); + } + @Test public void testNoMissingJpaAnnotation() { Set jpaMappingAnnotations = findRuntimeAnnotations(jpaIndex); @@ -191,6 +199,17 @@ private boolean allowsTargetType(ClassInfo annotation, ElementType targetType) { return allowedTargetTypes.contains(targetType.name()); } + private Set findConcreteNamedImplementors(Index index, String interfaceName) { + var interfaceDotName = DotName.createSimple(interfaceName); + assertThat(index.getClassByName(interfaceDotName)).isNotNull(); + return index.getAllKnownImplementors(interfaceDotName).stream() + .filter(c -> !c.isInterface() && !c.isAbstract() + // Ignore anonymous classes + && c.simpleName() != null) + .map(ClassInfo::name) + .collect(Collectors.toSet()); + } + private static File determineJpaJarLocation() { URL url = EntityManager.class.getProtectionDomain().getCodeSource().getLocation(); if (!url.getProtocol().equals("file")) {