From 28e183ff88630ff4857aa7e34b8dfa002370dd1a Mon Sep 17 00:00:00 2001 From: luneo7 Date: Wed, 22 Jun 2022 14:44:36 -0500 Subject: [PATCH] Add jOOQ record auto reflection registration --- deployment/pom.xml | 8 +++++++ .../jooq/deployment/JooqProcessor.java | 24 +++++++++++++++++++ .../quarkiverse/jooq/runtime/JooqConfig.java | 14 +++++++++++ 3 files changed, 46 insertions(+) diff --git a/deployment/pom.xml b/deployment/pom.xml index e36333c..1895c92 100644 --- a/deployment/pom.xml +++ b/deployment/pom.xml @@ -20,6 +20,14 @@ io.quarkus quarkus-agroal-deployment + + io.quarkus + quarkus-arc-deployment + + + io.quarkus + quarkus-narayana-jta-deployment + io.quarkiverse.jooq diff --git a/deployment/src/main/java/io/quarkiverse/jooq/deployment/JooqProcessor.java b/deployment/src/main/java/io/quarkiverse/jooq/deployment/JooqProcessor.java index 49cd8b3..d29a5fe 100644 --- a/deployment/src/main/java/io/quarkiverse/jooq/deployment/JooqProcessor.java +++ b/deployment/src/main/java/io/quarkiverse/jooq/deployment/JooqProcessor.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.Map.Entry; import java.util.Optional; +import java.util.function.BooleanSupplier; +import java.util.regex.Pattern; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Default; @@ -31,8 +33,10 @@ import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; import io.quarkus.deployment.annotations.Record; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import io.quarkus.deployment.pkg.steps.NativeBuild; import io.quarkus.deployment.recording.RecorderContext; import io.quarkus.gizmo.*; import io.quarkus.runtime.util.HashUtil; @@ -59,6 +63,18 @@ FeatureBuildItem featureBuildItem() { return new FeatureBuildItem(FEATURE); } + @BuildStep(onlyIf = { NativeBuild.class, RegisterClassesForReflectionEnabled.class }) + public void registerReflections(CombinedIndexBuildItem indexBuildItem, + BuildProducer reflectiveClass, + JooqConfig jooqConfig) { + Pattern jooqDBReflectClasses = Pattern.compile(jooqConfig.generatedClassesRegex); + indexBuildItem.getIndex() + .getKnownClasses() + .stream() + .filter(o -> jooqDBReflectClasses.matcher(o.name().toString()).matches()) + .forEach(clazz -> reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, clazz.name().toString()))); + } + @SuppressWarnings("unchecked") @Record(ExecutionTime.STATIC_INIT) @BuildStep @@ -276,4 +292,12 @@ protected void createDslContextProducerBean(BuildProducer