Skip to content

Commit 1c94197

Browse files
committed
Start porting Quarkus REST to Gizmo2
1 parent 01933ed commit 1c94197

File tree

1 file changed

+39
-27
lines changed
  • extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment

1 file changed

+39
-27
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package io.quarkus.resteasy.reactive.server.deployment;
22

3+
import static org.jboss.jandex.gizmo2.Jandex2Gizmo.methodDescOf;
4+
35
import java.lang.reflect.Modifier;
6+
import java.util.ArrayList;
47
import java.util.Arrays;
8+
import java.util.List;
59
import java.util.function.Predicate;
610
import java.util.function.Supplier;
711

@@ -13,12 +17,13 @@
1317
import org.jboss.resteasy.reactive.server.processor.EndpointInvokerFactory;
1418
import org.jboss.resteasy.reactive.server.spi.EndpointInvoker;
1519

16-
import io.quarkus.deployment.GeneratedClassGizmoAdaptor;
20+
import io.quarkus.deployment.GeneratedClassGizmo2Adaptor;
1721
import io.quarkus.deployment.annotations.BuildProducer;
1822
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
19-
import io.quarkus.gizmo.ClassCreator;
20-
import io.quarkus.gizmo.MethodCreator;
21-
import io.quarkus.gizmo.ResultHandle;
23+
import io.quarkus.gizmo2.ClassOutput;
24+
import io.quarkus.gizmo2.Expr;
25+
import io.quarkus.gizmo2.Gizmo;
26+
import io.quarkus.gizmo2.ParamVar;
2227
import io.quarkus.resteasy.reactive.server.runtime.ResteasyReactiveRecorder;
2328

2429
public class QuarkusInvokerFactory implements EndpointInvokerFactory {
@@ -46,29 +51,36 @@ public Supplier<EndpointInvoker> create(ResourceMethod method, ClassInfo current
4651

4752
String baseName = currentClassInfo.name() + "$quarkusrestinvoker$" + method.getName() + "_"
4853
+ HashUtil.sha1(endpointIdentifier);
49-
try (ClassCreator classCreator = new ClassCreator(
50-
new GeneratedClassGizmoAdaptor(generatedClassBuildItemBuildProducer,
51-
applicationClassPredicate.test(currentClassInfo.name().toString())),
52-
baseName, null,
53-
Object.class.getName(), EndpointInvoker.class.getName())) {
54-
MethodCreator mc = classCreator.getMethodCreator("invoke", Object.class, Object.class, Object[].class);
55-
ResultHandle[] args = new ResultHandle[method.getParameters().length];
56-
ResultHandle array = mc.getMethodParam(1);
57-
for (int i = 0; i < method.getParameters().length; ++i) {
58-
args[i] = mc.readArrayValue(array, i);
59-
}
60-
ResultHandle res;
61-
if (Modifier.isInterface(currentClassInfo.flags())) {
62-
res = mc.invokeInterfaceMethod(info, mc.getMethodParam(0), args);
63-
} else {
64-
res = mc.invokeVirtualMethod(info, mc.getMethodParam(0), args);
65-
}
66-
if (info.returnType().kind() == Type.Kind.VOID) {
67-
mc.returnValue(mc.loadNull());
68-
} else {
69-
mc.returnValue(res);
70-
}
71-
}
54+
ClassOutput classOutput = new GeneratedClassGizmo2Adaptor(generatedClassBuildItemBuildProducer, null,
55+
applicationClassPredicate.test(currentClassInfo.name().toString()));
56+
Gizmo g = Gizmo.create(classOutput);
57+
g.class_(baseName, cc -> {
58+
cc.defaultConstructor();
59+
cc.implements_(EndpointInvoker.class);
60+
cc.method("invoke", mc -> {
61+
ParamVar resourceParam = mc.parameter("resource", Object.class);
62+
ParamVar resourceMethodArgsParam = mc.parameter("args", Object[].class);
63+
mc.returning(Object.class);
64+
mc.body(bc -> {
65+
List<Expr> args = new ArrayList<>(method.getParameters().length);
66+
Expr res;
67+
for (int i = 0; i < method.getParameters().length; ++i) {
68+
args.add(bc.localVar("var" + i, resourceMethodArgsParam.elem(i)));
69+
}
70+
if (Modifier.isInterface(currentClassInfo.flags())) {
71+
res = bc.invokeInterface(methodDescOf(info), resourceParam, args);
72+
} else {
73+
res = bc.invokeVirtual(methodDescOf(info), resourceParam, args);
74+
}
75+
if (info.returnType().kind() == Type.Kind.VOID) {
76+
bc.returnNull();
77+
} else {
78+
bc.return_(res);
79+
}
80+
});
81+
});
82+
});
7283
return recorder.invoker(baseName);
7384
}
85+
7486
}

0 commit comments

Comments
 (0)