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
This commit is contained in:
parent
e53c2c6331
commit
8074f938b1
|
|
@ -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 {
|
|||
|
||||
@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)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
|||
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…
Reference in New Issue