This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit e3aaeda009cce6e02cbcdeb5dd92a6e7f9de4e39 Author: Stuart Douglas <[email protected]> AuthorDate: Wed Apr 1 11:42:38 2020 +1100 Use ASM to replace a method --- .../quarkus/core/deployment/BuildProcessor.java | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java index 7595070..5dd208d 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/BuildProcessor.java @@ -16,6 +16,11 @@ */ package org.apache.camel.quarkus.core.deployment; +import static org.objectweb.asm.Opcodes.ATHROW; +import static org.objectweb.asm.Opcodes.DUP; +import static org.objectweb.asm.Opcodes.INVOKESPECIAL; +import static org.objectweb.asm.Opcodes.NEW; + import java.io.IOException; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; @@ -24,6 +29,7 @@ import java.nio.file.Path; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.BiFunction; import java.util.stream.Collectors; import io.quarkus.arc.deployment.AdditionalBeanBuildItem; @@ -39,10 +45,12 @@ import io.quarkus.deployment.annotations.ExecutionTime; import io.quarkus.deployment.annotations.Overridable; import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem; +import io.quarkus.deployment.builditem.BytecodeTransformerBuildItem; import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.ServiceStartBuildItem; import io.quarkus.deployment.builditem.ShutdownContextBuildItem; import io.quarkus.deployment.recording.RecorderContext; +import io.quarkus.gizmo.Gizmo; import io.quarkus.runtime.RuntimeValue; import org.apache.camel.CamelContext; import org.apache.camel.impl.converter.BaseTypeConverterRegistry; @@ -59,12 +67,18 @@ import org.apache.camel.quarkus.core.UploadAttacher; import org.apache.camel.quarkus.core.deployment.CamelServicePatternBuildItem.CamelServiceDestination; import org.apache.camel.quarkus.core.deployment.util.PathFilter; import org.apache.camel.quarkus.support.common.CamelCapabilities; +import org.apache.camel.reifier.rest.RestBindingReifier; import org.apache.camel.spi.TypeConverterLoader; import org.apache.camel.spi.TypeConverterRegistry; import org.jboss.jandex.ClassInfo; import org.jboss.jandex.DotName; import org.jboss.jandex.IndexView; import org.jboss.jandex.Type; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -185,6 +199,38 @@ class BuildProcessor { } @BuildStep + BytecodeTransformerBuildItem transformClass() { + return new BytecodeTransformerBuildItem(RestBindingReifier.class.getName(), new BiFunction<String, ClassVisitor, ClassVisitor>() { + @Override + public ClassVisitor apply(String s, ClassVisitor classVisitor) { + ClassVisitor cv = new ClassVisitor(Gizmo.ASM_API_VERSION, classVisitor) { + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + final MethodVisitor target = super.visitMethod(access, name, descriptor, signature, exceptions); + if (name.equals("setupJaxb")) { + return new MethodVisitor(Gizmo.ASM_API_VERSION, null) { + @Override + public void visitCode() { + target.visitCode(); + target.visitTypeInsn(NEW, "java/io/UnsupportedOperationException"); + target.visitInsn(DUP); + target.visitMethodInsn(INVOKESPECIAL,"java/lang/UnsupportedOperationException","<init>","()V",false); + target.visitInsn(ATHROW); + target.visitMaxs(2, 0); + target.visitEnd(); + } + }; + } + return target; + } + }; + return cv; + } + }); + } + + @BuildStep void camelServices( ApplicationArchivesBuildItem applicationArchives, List<CamelServicePatternBuildItem> servicePatterns,
