Skip to content

Commit d1b5210

Browse files
committed
Add String[] lambdaCapturingTypes() to @RegisterForReflecion
1 parent 2d9597a commit d1b5210

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

core/deployment/src/main/java/io/quarkus/deployment/steps/RegisterForReflectionBuildStep.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.quarkus.deployment.steps;
22

3-
import javax.inject.Inject;
4-
53
import org.jboss.jandex.AnnotationInstance;
64
import org.jboss.jandex.AnnotationValue;
75
import org.jboss.jandex.ClassInfo;
@@ -12,18 +10,18 @@
1210
import io.quarkus.deployment.annotations.BuildProducer;
1311
import io.quarkus.deployment.annotations.BuildStep;
1412
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
13+
import io.quarkus.deployment.builditem.nativeimage.LambdaCapturingTypeBuildItem;
1514
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
1615
import io.quarkus.runtime.annotations.RegisterForReflection;
1716

1817
public class RegisterForReflectionBuildStep {
1918

2019
private static final Logger log = Logger.getLogger(RegisterForReflectionBuildStep.class);
2120

22-
@Inject
23-
CombinedIndexBuildItem combinedIndexBuildItem;
24-
2521
@BuildStep
26-
public void build(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
22+
public void build(CombinedIndexBuildItem combinedIndexBuildItem,
23+
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
24+
BuildProducer<LambdaCapturingTypeBuildItem> lambdaCapturingTypeProducer) {
2725
for (AnnotationInstance i : combinedIndexBuildItem.getIndex()
2826
.getAnnotations(DotName.createSimple(RegisterForReflection.class.getName()))) {
2927

@@ -34,6 +32,13 @@ public void build(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
3432

3533
AnnotationValue targetsValue = i.value("targets");
3634
AnnotationValue classNamesValue = i.value("classNames");
35+
AnnotationValue lambdaCapturingTypesValue = i.value("lambdaCapturingTypes");
36+
37+
if (lambdaCapturingTypesValue != null) {
38+
for (String lambdaCapturingType : lambdaCapturingTypesValue.asStringArray()) {
39+
lambdaCapturingTypeProducer.produce(new LambdaCapturingTypeBuildItem(lambdaCapturingType));
40+
}
41+
}
3742

3843
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
3944
if (targetsValue == null && classNamesValue == null) {

core/runtime/src/main/java/io/quarkus/runtime/annotations/RegisterForReflection.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,9 @@
4545
String[] classNames() default {};
4646

4747
boolean serialization() default false;
48+
49+
/**
50+
* The lambda capturing types performing serialization in the native image
51+
*/
52+
String[] lambdaCapturingTypes() default {};
4853
}

0 commit comments

Comments
 (0)