From 524a4b6c1ecb5ccce3ebaf7e5dfb3219a69a0438 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Wed, 18 Jan 2023 13:42:56 +0100 Subject: [PATCH] Only return complete accessor name when accessor has a backing field --- .../TypeElementMembers.java | 2 +- ...rationMetadataAnnotationProcessorTests.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeElementMembers.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeElementMembers.java index c1c4546a8a6..4beb89f95ce 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeElementMembers.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeElementMembers.java @@ -168,7 +168,7 @@ class TypeElementMembers { } private String getAccessorName(String methodName) { - if (this.isRecord) { + if (this.isRecord && this.fields.containsKey(methodName)) { return methodName; } String name; diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java index 5c26fb979aa..3e4849a859b 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java @@ -74,6 +74,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; * @author Andy Wilkinson * @author Kris De Volder * @author Jonas Keßler + * @author Moritz Halbritter */ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGenerationTests { @@ -504,4 +505,21 @@ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGene assertThat(metadata).doesNotHave(Metadata.withProperty("multi.some-integer")); } + @Test + @EnabledForJreRange(min = JRE.JAVA_16) + void recordWithGetter(@TempDir File temp) throws IOException { + File exampleRecord = new File(temp, "ExampleRecord.java"); + try (PrintWriter writer = new PrintWriter(new FileWriter(exampleRecord))) { + writer.println( + "@org.springframework.boot.configurationsample.ConfigurationProperties(\"record-with-getter\")"); + writer.println("@org.springframework.boot.configurationsample.ConstructorBinding"); + writer.println("public record ExampleRecord(String alpha) {"); + writer.println(" public String getBravo() { return alpha; }"); + writer.println("}"); + } + ConfigurationMetadata metadata = compile(exampleRecord); + assertThat(metadata).has(Metadata.withProperty("record-with-getter.alpha")); + assertThat(metadata).doesNotHave(Metadata.withProperty("record-with-getter.bravo")); + } + }