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,

Reply via email to