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