static void createMethod()

in fractions/cdi-extensions/cdi-jaxrsapi/src/main/java/org/wildfly/swarm/cdi/jaxrsapi/runtime/ClientServiceFactory.java [82:141]


    static void createMethod(ClassWriter cw, String implName, String clientInterfaceName, MethodInfo method, int lineNum, String baseUrl) {
        MethodVisitor mv;

        {
            mv = cw.visitMethod(ACC_PUBLIC, method.name(), buildMethodDef(method), null, null);
            mv.visitCode();
            Label l0 = new Label();
            mv.visitLabel(l0);
            mv.visitLineNumber(lineNum++, l0);
            mv.visitLdcInsn(Type.getType(buildTypeDef(clientInterfaceName)));
            mv.visitTypeInsn(NEW, "org/jboss/resteasy/client/jaxrs/ResteasyClientBuilder");
            mv.visitInsn(DUP);
            mv.visitMethodInsn(INVOKESPECIAL, "org/jboss/resteasy/client/jaxrs/ResteasyClientBuilder", "<init>", "()V", false);
            mv.visitMethodInsn(INVOKEVIRTUAL, "org/jboss/resteasy/client/jaxrs/ResteasyClientBuilder", "build", "()Lorg/jboss/resteasy/client/jaxrs/ResteasyClient;", false);
            mv.visitLdcInsn(baseUrl);
            Label l1 = new Label();
            mv.visitLabel(l1);
            mv.visitLineNumber(lineNum++, l1);
            mv.visitMethodInsn(INVOKEVIRTUAL, "org/jboss/resteasy/client/jaxrs/ResteasyClient", "target", "(Ljava/lang/String;)Lorg/jboss/resteasy/client/jaxrs/ResteasyWebTarget;", false);
            Label l2 = new Label();
            mv.visitLabel(l2);
            mv.visitLineNumber(lineNum - 2, l2);
            mv.visitMethodInsn(INVOKESTATIC, "org/wildfly/swarm/cdi/jaxrsapi/deployment/ProxyBuilder", "builder", "(Ljava/lang/Class;Ljavax/ws/rs/client/WebTarget;)Lorg/wildfly/swarm/cdi/jaxrsapi/deployment/ProxyBuilder;", false);
            Label l3 = new Label();
            mv.visitLabel(l3);
            mv.visitLineNumber(lineNum++, l3);
            mv.visitMethodInsn(INVOKEVIRTUAL, "org/wildfly/swarm/cdi/jaxrsapi/deployment/ProxyBuilder", "build", "()Ljava/lang/Object;", false);
            mv.visitTypeInsn(CHECKCAST, clientInterfaceName.replace('.', '/'));
            for (int i = 1; i <= method.parameters().size(); i++) {
                mv.visitVarInsn(ALOAD, i);
            }
            Label l4 = new Label();
            mv.visitLabel(l4);
            mv.visitLineNumber(lineNum++, l4);
            mv.visitMethodInsn(INVOKEINTERFACE, clientInterfaceName.replace('.', '/'), method.name(), buildMethodDef(method), true);
            Label l5 = new Label();
            mv.visitLabel(l5);
            if (method.returnType().kind().equals(org.jboss.jandex.Type.Kind.VOID)) {
                mv.visitLineNumber(lineNum++, l5);
                mv.visitInsn(RETURN);
            } else {
                mv.visitLineNumber(lineNum - 4, l5);
                mv.visitInsn(ARETURN);
            }
            Label l6 = new Label();
            mv.visitLabel(l6);
            int methodParams = 0;
            mv.visitLocalVariable("this", buildTypeDef(implName), null, l0, l6, methodParams++);
            for (AnnotationInstance anno : method.annotations()) {
                if (anno.name().toString().contains("QueryParam") || anno.name().toString().contains("PathParam")) {
                    short position = anno.target().asMethodParameter().position();
                    org.jboss.jandex.Type parameterType = anno.target().asMethodParameter().method().parameters().get(position);
                    mv.visitLocalVariable(String.valueOf(anno.value().value()), buildTypeDef(parameterType.name().toString()), null, l0, l6, methodParams++);
                }
            }
            mv.visitMaxs(3, methodParams);
            lineNum += 4;
            mv.visitEnd();
        }
    }