Skip to content

Commit 23ac8eb

Browse files
authored
Fix NPE with missing getIndexedProperties (#11721)
1 parent 8b0864a commit 23ac8eb

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

core-processor/src/main/java/io/micronaut/inject/beans/visitor/BeanIntrospectionWriter.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import io.micronaut.inject.writer.ClassWriterOutputVisitor;
5454
import io.micronaut.inject.writer.DispatchWriter;
5555
import io.micronaut.inject.writer.EvaluatedExpressionProcessor;
56+
import io.micronaut.inject.writer.GenUtils;
5657
import io.micronaut.inject.writer.MethodGenUtils;
5758
import io.micronaut.inject.writer.OriginatingElements;
5859
import io.micronaut.sourcegen.model.AnnotationDef;
@@ -905,6 +906,7 @@ private MethodDef getGetIndexedProperties() {
905906
if (indexByAnnotations.isEmpty()) {
906907
return null;
907908
}
909+
908910
TypeDef returnType = TypeDef.of(GET_INDEXED_PROPERTIES.getReturnType());
909911
return MethodDef.builder(GET_INDEXED_PROPERTIES.getName())
910912
.returns(returnType)
@@ -920,7 +922,7 @@ private MethodDef getGetIndexedProperties() {
920922
GET_BP_INDEXED_SUBSET_METHOD,
921923
introspectionTypeDef.getStaticField(annotationIndexFields.get(annotationName))
922924
)
923-
)), ExpressionDef.nullValue())
925+
)), GenUtils.listOf(List.of()))
924926
.returning());
925927
}
926928

inject-java-test/src/test/groovy/io/micronaut/inject/visitor/beans/BeanIntrospectionSpec.groovy

+47
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import io.micronaut.context.visitor.ConfigurationReaderVisitor
1414
import io.micronaut.core.annotation.Introspected
1515
import io.micronaut.core.annotation.NextMajorVersion
1616
import io.micronaut.core.annotation.NonNull
17+
import io.micronaut.core.annotation.Nullable
1718
import io.micronaut.core.beans.BeanIntrospection
1819
import io.micronaut.core.beans.BeanIntrospectionReference
1920
import io.micronaut.core.beans.BeanIntrospector
@@ -2596,6 +2597,52 @@ public class ValidatedConfig {
25962597
introspection.getIndexedProperties(Constraint.class).size() == 2
25972598
}
25982599

2600+
void "not found indexed properties"() {
2601+
BeanIntrospection introspection = buildBeanIntrospection('test.ValidatedConfig','''\
2602+
package test;
2603+
2604+
import io.micronaut.context.annotation.ConfigurationProperties;
2605+
2606+
import jakarta.validation.constraints.NotNull;
2607+
import jakarta.validation.constraints.NotBlank;
2608+
import java.net.URL;
2609+
2610+
@ConfigurationProperties("foo.bar")
2611+
public class ValidatedConfig {
2612+
2613+
@NotNull
2614+
URL url;
2615+
2616+
@NotBlank
2617+
protected String name;
2618+
2619+
public URL getUrl() {
2620+
return url;
2621+
}
2622+
2623+
public void setUrl(URL url) {
2624+
this.url = url;
2625+
}
2626+
2627+
public String getName() {
2628+
return name;
2629+
}
2630+
2631+
public void setName(String name) {
2632+
this.name = name;
2633+
}
2634+
}
2635+
2636+
2637+
''')
2638+
expect:
2639+
introspection != null
2640+
!introspection.getIndexedProperties(Constraint.class).isEmpty()
2641+
introspection.getIndexedProperties(Constraint.class).size() == 2
2642+
introspection.getIndexedProperty(Nullable.class).isEmpty()
2643+
introspection.getIndexedProperties(Nullable.class).isEmpty()
2644+
}
2645+
25992646
void "test generate bean introspection for @ConfigurationProperties with validation rules on fields and custom getter"() {
26002647
BeanIntrospection introspection = buildBeanIntrospection('test.ValidatedConfig', '''\
26012648
package test;

0 commit comments

Comments
 (0)