Quarkus AnnotationsTransformerBuildItem not working as expection

107 views Asked by At

what i am trying to do is to build an Quarkus extention that will change some annotations at quarkus application

so I used AnnotationTransformerBuildItem.

package com.tawfeek.greeting.extension.deployment;

import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem;
import io.quarkus.arc.processor.AnnotationsTransformer;
import io.quarkus.builder.item.MultiBuildItem;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.recording.RecorderContext;
import io.quarkus.deployment.steps.ClassTransformingBuildStep;

import io.quarkus.runtime.annotations.Recorder;
import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.DotName;
import org.jboss.jandex.MethodInfo;

import java.util.function.Predicate;

import static io.quarkus.arc.ComponentsProvider.LOG;


class GreetingExtensionProcessor {

    private static final String FEATURE = "greeting-extension";

    @BuildStep
    FeatureBuildItem feature() {
        return new FeatureBuildItem(FEATURE);
    }



    @BuildStep
    AnnotationsTransformerBuildItem transform() {

        return new AnnotationsTransformerBuildItem(new AnnotationsTransformer() {
            @Override
            public boolean appliesTo(AnnotationTarget.Kind kind) {
                return kind == AnnotationTarget.Kind.METHOD;
            }
            @Override
            public void transform(TransformationContext context) {
                MethodInfo methodInfo = context.getTarget().asMethod();
                if (methodInfo.hasAnnotation("jakarta.ws.rs.GET")) {
                    // Remove the existing @GET annotation
                    context.transform()
                            .remove(annotationInstance -> annotationInstance.name()
                                    .equals(DotName.createSimple("jakarta.ws.rs.GET"))).done();
                    // Add the @POST annotation
                    context.transform().add(DotName.createSimple("jakarta.ws.rs.POST")).done();
                    System.out.println("method "+methodInfo.name()+" is change from get to post");
                }
            }
        });
    }



}

the problem is that when add the code to the app and run it. the result is it print that it change the method method hello is change from get to post put actually it still using get not post when testing using postman

I expect there is a configuration for the quarkus extension to affect the beans Methods and it then work correctly

0

There are 0 answers