Browse Source

Add missing reflection hints on Jakarta types

This commit adds reflection hints for `jakarta.inject.Provider` and
ensures that hints are always contributed even if jakarta classes are
not on the classpath.

Fixes gh-31259
pull/31279/head
Brian Clozel 1 year ago
parent
commit
8074f938b1
  1. 9
      spring-beans/src/main/java/org/springframework/beans/factory/annotation/JakartaAnnotationsRuntimeHints.java
  2. 6
      spring-beans/src/test/java/org/springframework/beans/factory/annotation/JakartaAnnotationsRuntimeHintsTests.java

9
spring-beans/src/main/java/org/springframework/beans/factory/annotation/JakartaAnnotationsRuntimeHints.java

@ -20,12 +20,11 @@ import java.util.stream.Stream; @@ -20,12 +20,11 @@ import java.util.stream.Stream;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.aot.hint.TypeReference;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
/**
* {@link RuntimeHintsRegistrar} for Jakarta annotations.
* <p>Hints are only registered if Jakarta inject is on the classpath.
*
* @author Brian Clozel
*/
@ -33,10 +32,8 @@ class JakartaAnnotationsRuntimeHints implements RuntimeHintsRegistrar { @@ -33,10 +32,8 @@ class JakartaAnnotationsRuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
if (ClassUtils.isPresent("jakarta.inject.Inject", classLoader)) {
Stream.of("jakarta.inject.Inject", "jakarta.inject.Qualifier").forEach(annotationType ->
hints.reflection().registerType(ClassUtils.resolveClassName(annotationType, classLoader)));
}
Stream.of("jakarta.inject.Inject", "jakarta.inject.Provider", "jakarta.inject.Qualifier").forEach(typeName ->
hints.reflection().registerType(TypeReference.of(typeName)));
}
}

6
spring-beans/src/test/java/org/springframework/beans/factory/annotation/JakartaAnnotationsRuntimeHintsTests.java

@ -18,6 +18,7 @@ package org.springframework.beans.factory.annotation; @@ -18,6 +18,7 @@ package org.springframework.beans.factory.annotation;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.inject.Qualifier;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -51,6 +52,11 @@ class JakartaAnnotationsRuntimeHintsTests { @@ -51,6 +52,11 @@ class JakartaAnnotationsRuntimeHintsTests {
assertThat(RuntimeHintsPredicates.reflection().onType(Inject.class)).accepts(this.hints);
}
@Test
void jakartaProviderAnnotationHasHints() {
assertThat(RuntimeHintsPredicates.reflection().onType(Provider.class)).accepts(this.hints);
}
@Test
void jakartaQualifierAnnotationHasHints() {
assertThat(RuntimeHintsPredicates.reflection().onType(Qualifier.class)).accepts(this.hints);

Loading…
Cancel
Save