From 57ccd25c8d3134cfe09b3e95a96ab46501d1237f Mon Sep 17 00:00:00 2001 From: Eddie Carpenter Date: Mon, 23 Sep 2024 15:31:14 +1200 Subject: [PATCH] Added @Startup to DiameterService --- .../deployment/DiameterProcessor.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/quarkus-diameter/deployment/src/main/java/io/quarkiverse/diameter/deployment/DiameterProcessor.java b/quarkus-diameter/deployment/src/main/java/io/quarkiverse/diameter/deployment/DiameterProcessor.java index c9769eb4..6c51cda6 100644 --- a/quarkus-diameter/deployment/src/main/java/io/quarkiverse/diameter/deployment/DiameterProcessor.java +++ b/quarkus-diameter/deployment/src/main/java/io/quarkiverse/diameter/deployment/DiameterProcessor.java @@ -5,6 +5,7 @@ import io.quarkiverse.diameter.runtime.DiameterRecorder; import io.quarkiverse.diameter.runtime.DiameterRunTimeConfig; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem; import io.quarkus.arc.deployment.SyntheticBeanBuildItem; import io.quarkus.arc.processor.DotNames; import io.quarkus.deployment.annotations.BuildProducer; @@ -16,11 +17,13 @@ import io.quarkus.deployment.builditem.ShutdownContextBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import io.quarkus.runtime.Startup; import io.quarkus.tls.TlsRegistryBuildItem; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Default; import jakarta.interceptor.Interceptor; import org.jboss.jandex.AnnotationInstance; +import org.jboss.jandex.AnnotationTransformation; import org.jboss.jandex.DotName; import org.jdiameter.api.Configuration; import org.jdiameter.api.Stack; @@ -78,7 +81,7 @@ NativeImageResourceBuildItem nativeImageResourceBuildItem() return new NativeImageResourceBuildItem("META-INF/jdiameter-client.xsd", "META-INF/jdiameter-server.xsd", "META-INF/version.properties", - "META-INF/dictionary.xml"); + "dictionary.xml"); } @BuildStep @@ -200,20 +203,26 @@ public ServiceStartBuildItem generateDiameterConfiguration(DiameterRecorder reco } @BuildStep - public void declareDiameterServicesAsBean(CombinedIndexBuildItem index, BuildProducer additionalBeans) + public void declareDiameterServicesAsBean(CombinedIndexBuildItem index, + BuildProducer additionalBeans, + BuildProducer transformer) { List diameterServices = index.getIndex() .getKnownClasses() - .stream() - .filter(ci -> ci.hasAnnotation(DiameterService.class) && !ci.hasAnnotation(Interceptor.class)) - .map(ci -> ci.name().toString()) - .collect(Collectors.toList()); + .stream() + .filter(ci -> ci.hasAnnotation(DiameterService.class) && !ci.hasAnnotation(Interceptor.class)) + .map(ci -> ci.name().toString()) + .collect(Collectors.toList()); additionalBeans.produce(new AdditionalBeanBuildItem.Builder() .addBeanClasses(diameterServices) .setUnremovable() .setDefaultScope(DotNames.SINGLETON) .build()); + + transformer.produce( new AnnotationsTransformerBuildItem(AnnotationTransformation.forClasses() + .whenClass(c -> diameterServices.contains(c.name().toString())) + .transform(c -> c.add(AnnotationInstance.builder(Startup.class).build())))); } private static SyntheticBeanBuildItem.ExtendedBeanConfigurator createSyntheticBean(String clientName, Class type, DotName exposedType, boolean isDefaultConfig)