Skip to content

Commit d010c33

Browse files
committed
ArC: convert BeanConfiguratorBase.creator()/destroyer()/checkActive() and BeanProcessor.Builder.addSuppressConditionGenerator() usages to Gizmo 2
1 parent 9e47702 commit d010c33

File tree

5 files changed

+310
-318
lines changed

5 files changed

+310
-318
lines changed

extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/LookupConditionsProcessor.java

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
import io.quarkus.arc.runtime.SuppressConditions;
2121
import io.quarkus.deployment.annotations.BuildProducer;
2222
import io.quarkus.deployment.annotations.BuildStep;
23-
import io.quarkus.gizmo.BytecodeCreator;
24-
import io.quarkus.gizmo.MethodDescriptor;
25-
import io.quarkus.gizmo.ResultHandle;
23+
import io.quarkus.gizmo2.Const;
24+
import io.quarkus.gizmo2.Expr;
25+
import io.quarkus.gizmo2.creator.BlockCreator;
26+
import io.quarkus.gizmo2.desc.MethodDesc;
2627

2728
public class LookupConditionsProcessor {
2829

@@ -39,22 +40,20 @@ public class LookupConditionsProcessor {
3940
private static final String STRING_VALUE = "stringValue";
4041
private static final String LOOKUP_IF_MISSING = "lookupIfMissing";
4142

42-
private static final MethodDescriptor SUPPRESS_IF_PROPERTY = MethodDescriptor.ofMethod(
43-
SuppressConditions.class,
44-
"suppressIfProperty", boolean.class, String.class, String.class, boolean.class);
45-
private static final MethodDescriptor SUPPRESS_UNLESS_PROPERTY = MethodDescriptor.ofMethod(
46-
SuppressConditions.class,
47-
"suppressUnlessProperty", boolean.class, String.class, String.class, boolean.class);
43+
private static final MethodDesc SUPPRESS_IF_PROPERTY = MethodDesc.of(SuppressConditions.class, "suppressIfProperty",
44+
boolean.class, String.class, String.class, boolean.class);
45+
private static final MethodDesc SUPPRESS_UNLESS_PROPERTY = MethodDesc.of(SuppressConditions.class, "suppressUnlessProperty",
46+
boolean.class, String.class, String.class, boolean.class);
4847

4948
@BuildStep
5049
void suppressConditionsGenerators(BuildProducer<SuppressConditionGeneratorBuildItem> generators,
5150
BeanArchiveIndexBuildItem beanArchiveIndex) {
5251
IndexView index = beanArchiveIndex.getIndex();
5352

54-
generators.produce(new SuppressConditionGeneratorBuildItem(new Function<BeanInfo, Consumer<BytecodeCreator>>() {
53+
generators.produce(new SuppressConditionGeneratorBuildItem(new Function<BeanInfo, Consumer<BlockCreator>>() {
5554

5655
@Override
57-
public Consumer<BytecodeCreator> apply(BeanInfo bean) {
56+
public Consumer<BlockCreator> apply(BeanInfo bean) {
5857
Optional<AnnotationTarget> maybeTarget = bean.getTarget();
5958
if (maybeTarget.isPresent()) {
6059
AnnotationTarget target = maybeTarget.get();
@@ -63,30 +62,28 @@ public Consumer<BytecodeCreator> apply(BeanInfo bean) {
6362
List<AnnotationInstance> unlessPropertyList = findAnnotations(target, LOOK_UP_UNLESS_PROPERTY,
6463
LOOK_UP_UNLESS_PROPERTY_CONTAINER, index);
6564
if (!ifPropertyList.isEmpty() || !unlessPropertyList.isEmpty()) {
66-
return new Consumer<BytecodeCreator>() {
65+
return new Consumer<BlockCreator>() {
6766
@Override
68-
public void accept(BytecodeCreator suppressed) {
67+
public void accept(BlockCreator suppressed) {
6968
for (AnnotationInstance ifProperty : ifPropertyList) {
7069
String propertyName = ifProperty.value(NAME).asString();
7170
String expectedStringValue = ifProperty.value(STRING_VALUE).asString();
7271
AnnotationValue lookupIfMissingValue = ifProperty.value(LOOKUP_IF_MISSING);
7372
boolean lookupIfMissing = lookupIfMissingValue != null
7473
&& lookupIfMissingValue.asBoolean();
75-
ResultHandle result = suppressed.invokeStaticMethod(
76-
SUPPRESS_IF_PROPERTY, suppressed.load(propertyName),
77-
suppressed.load(expectedStringValue), suppressed.load(lookupIfMissing));
78-
suppressed.ifTrue(result).trueBranch().returnValue(suppressed.load(true));
74+
Expr result = suppressed.invokeStatic(SUPPRESS_IF_PROPERTY, Const.of(propertyName),
75+
Const.of(expectedStringValue), Const.of(lookupIfMissing));
76+
suppressed.if_(result, BlockCreator::returnTrue);
7977
}
8078
for (AnnotationInstance unlessProperty : unlessPropertyList) {
8179
String propertyName = unlessProperty.value(NAME).asString();
8280
String expectedStringValue = unlessProperty.value(STRING_VALUE).asString();
8381
AnnotationValue lookupIfMissingValue = unlessProperty.value(LOOKUP_IF_MISSING);
8482
boolean lookupIfMissing = lookupIfMissingValue != null
8583
&& lookupIfMissingValue.asBoolean();
86-
ResultHandle result = suppressed.invokeStaticMethod(
87-
SUPPRESS_UNLESS_PROPERTY, suppressed.load(propertyName),
88-
suppressed.load(expectedStringValue), suppressed.load(lookupIfMissing));
89-
suppressed.ifTrue(result).trueBranch().returnValue(suppressed.load(true));
84+
Expr result = suppressed.invokeStatic(SUPPRESS_UNLESS_PROPERTY, Const.of(propertyName),
85+
Const.of(expectedStringValue), Const.of(lookupIfMissing));
86+
suppressed.if_(result, BlockCreator::returnTrue);
9087
}
9188
}
9289
};
@@ -102,20 +99,19 @@ List<AnnotationInstance> findAnnotations(AnnotationTarget target, DotName annota
10299
AnnotationInstance annotation;
103100
AnnotationInstance container;
104101
switch (target.kind()) {
105-
case CLASS:
102+
case CLASS -> {
106103
annotation = target.asClass().declaredAnnotation(annotationName);
107104
container = target.asClass().declaredAnnotation(containingAnnotationName);
108-
break;
109-
case FIELD:
105+
}
106+
case FIELD -> {
110107
annotation = target.asField().annotation(annotationName);
111108
container = target.asField().annotation(containingAnnotationName);
112-
break;
113-
case METHOD:
109+
}
110+
case METHOD -> {
114111
annotation = target.asMethod().annotation(annotationName);
115112
container = target.asMethod().annotation(containingAnnotationName);
116-
break;
117-
default:
118-
throw new IllegalStateException("Invalid bean target: " + target);
113+
}
114+
default -> throw new IllegalStateException("Invalid bean target: " + target);
119115
}
120116
if (annotation == null && container == null) {
121117
return Collections.emptyList();

extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/SuppressConditionGeneratorBuildItem.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
import io.quarkus.arc.InjectableBean;
77
import io.quarkus.arc.processor.BeanInfo;
88
import io.quarkus.builder.item.MultiBuildItem;
9-
import io.quarkus.gizmo.BytecodeCreator;
9+
import io.quarkus.gizmo2.creator.BlockCreator;
1010

1111
/**
1212
* This build item can be used to contribute logic to the generated method body of {@link InjectableBean#isSuppressed()}.
1313
*/
1414
final class SuppressConditionGeneratorBuildItem extends MultiBuildItem {
1515

16-
private final Function<BeanInfo, Consumer<BytecodeCreator>> generator;
16+
private final Function<BeanInfo, Consumer<BlockCreator>> generator;
1717

18-
public SuppressConditionGeneratorBuildItem(Function<BeanInfo, Consumer<BytecodeCreator>> generator) {
18+
public SuppressConditionGeneratorBuildItem(Function<BeanInfo, Consumer<BlockCreator>> generator) {
1919
this.generator = generator;
2020
}
2121

22-
public Function<BeanInfo, Consumer<BytecodeCreator>> getGenerator() {
22+
public Function<BeanInfo, Consumer<BlockCreator>> getGenerator() {
2323
return generator;
2424
}
2525

extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/SyntheticBeansProcessor.java

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,21 @@
1414
import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem.BeanConfiguratorBuildItem;
1515
import io.quarkus.arc.deployment.SyntheticBeanBuildItem.ExtendedBeanConfigurator;
1616
import io.quarkus.arc.processor.BeanConfigurator;
17+
import io.quarkus.arc.processor.BeanConfiguratorBase;
1718
import io.quarkus.arc.runtime.ArcRecorder;
1819
import io.quarkus.deployment.annotations.BuildProducer;
1920
import io.quarkus.deployment.annotations.BuildStep;
2021
import io.quarkus.deployment.annotations.ExecutionTime;
2122
import io.quarkus.deployment.annotations.Produce;
2223
import io.quarkus.deployment.annotations.Record;
2324
import io.quarkus.deployment.builditem.ServiceStartBuildItem;
24-
import io.quarkus.gizmo.FieldDescriptor;
25-
import io.quarkus.gizmo.MethodCreator;
26-
import io.quarkus.gizmo.MethodDescriptor;
27-
import io.quarkus.gizmo.ResultHandle;
25+
import io.quarkus.gizmo2.Const;
26+
import io.quarkus.gizmo2.Expr;
27+
import io.quarkus.gizmo2.FieldVar;
28+
import io.quarkus.gizmo2.LocalVar;
29+
import io.quarkus.gizmo2.creator.BlockCreator;
30+
import io.quarkus.gizmo2.desc.FieldDesc;
31+
import io.quarkus.gizmo2.desc.MethodDesc;
2832
import io.quarkus.runtime.util.HashUtil;
2933

3034
public class SyntheticBeansProcessor {
@@ -107,40 +111,36 @@ private String createName(ExtendedBeanConfigurator configurator) {
107111
+ (configurator.getIdentifier() != null ? configurator.getIdentifier() : ""));
108112
}
109113

110-
private Consumer<MethodCreator> creator(String name, SyntheticBeanBuildItem bean) {
111-
return new Consumer<MethodCreator>() {
114+
private Consumer<BeanConfiguratorBase.CreateGeneration> creator(String name, SyntheticBeanBuildItem bean) {
115+
return new Consumer<BeanConfiguratorBase.CreateGeneration>() {
112116
@Override
113-
public void accept(MethodCreator m) {
114-
ResultHandle staticMap = m
115-
.readStaticField(FieldDescriptor.of(ArcRecorder.class, "syntheticBeanProviders", Map.class));
116-
ResultHandle function = m.invokeInterfaceMethod(
117-
MethodDescriptor.ofMethod(Map.class, "get", Object.class, Object.class), staticMap,
118-
m.load(name));
117+
public void accept(BeanConfiguratorBase.CreateGeneration cg) {
118+
BlockCreator b0 = cg.createMethod();
119+
120+
FieldVar staticMap = Expr.staticField(FieldDesc.of(ArcRecorder.class, "syntheticBeanProviders"));
121+
LocalVar function = b0.localVar("function", b0.withMap(staticMap).get(Const.of(name)));
119122
// Throw an exception if no supplier is found
120-
m.ifNull(function).trueBranch().throwException(CreationException.class,
121-
createMessage("Synthetic bean instance for ", name, bean));
122-
ResultHandle result = m.invokeInterfaceMethod(
123-
MethodDescriptor.ofMethod(Function.class, "apply", Object.class, Object.class),
124-
function, m.getMethodParam(0));
125-
m.returnValue(result);
123+
b0.ifNull(function, b1 -> {
124+
b1.throw_(CreationException.class, createMessage("Synthetic bean instance for ", name, bean));
125+
});
126+
b0.return_(b0.invokeInterface(MethodDesc.of(Function.class, "apply", Object.class, Object.class),
127+
function, cg.syntheticCreationalContext()));
126128
}
127129
};
128130
}
129131

130-
private Consumer<MethodCreator> checkActive(String name, SyntheticBeanBuildItem bean) {
131-
return new Consumer<MethodCreator>() {
132+
private Consumer<BeanConfiguratorBase.CheckActiveGeneration> checkActive(String name, SyntheticBeanBuildItem bean) {
133+
return new Consumer<BeanConfiguratorBase.CheckActiveGeneration>() {
132134
@Override
133-
public void accept(MethodCreator mc) {
134-
ResultHandle staticMap = mc.readStaticField(
135-
FieldDescriptor.of(ArcRecorder.class, "syntheticBeanCheckActive", Map.class));
136-
ResultHandle supplier = mc.invokeInterfaceMethod(
137-
MethodDescriptor.ofMethod(Map.class, "get", Object.class, Object.class),
138-
staticMap, mc.load(name));
139-
mc.ifNull(supplier).trueBranch().throwException(CreationException.class,
140-
createMessage("ActiveResult of synthetic bean for ", name, bean));
141-
mc.returnValue(mc.invokeInterfaceMethod(
142-
MethodDescriptor.ofMethod(Supplier.class, "get", Object.class),
143-
supplier));
135+
public void accept(BeanConfiguratorBase.CheckActiveGeneration cag) {
136+
BlockCreator b0 = cag.checkActiveMethod();
137+
138+
FieldVar staticMap = Expr.staticField(FieldDesc.of(ArcRecorder.class, "syntheticBeanCheckActive"));
139+
LocalVar supplier = b0.localVar("supplier", b0.withMap(staticMap).get(Const.of(name)));
140+
b0.ifNull(supplier, b1 -> {
141+
b1.throw_(CreationException.class, createMessage("ActiveResult of synthetic bean for ", name, bean));
142+
});
143+
b0.return_(b0.invokeInterface(MethodDesc.of(Supplier.class, "get", Object.class), supplier));
144144
}
145145
};
146146
}

0 commit comments

Comments
 (0)