Browse Source

Merge pull request #46599 from prishedko

* pr/46599:
  Polish "Stop using custom name for elements resolution"
  Stop using custom name for elements resolution

Closes gh-46599
pull/46752/head
Stéphane Nicoll 5 months ago
parent
commit
14820b0d11
  1. 15
      spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/PropertyDescriptorResolver.java
  2. 5
      spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java
  3. 11
      spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/record/ExampleRecord.java
  4. 9
      spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DeprecatedRecord.java

15
spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/PropertyDescriptorResolver.java

@ -85,12 +85,13 @@ class PropertyDescriptorResolver {
private PropertyDescriptor extracted(TypeElement declaringElement, TypeElementMembers members, private PropertyDescriptor extracted(TypeElement declaringElement, TypeElementMembers members,
VariableElement parameter) { VariableElement parameter) {
String name = getPropertyName(parameter); String parameterName = parameter.getSimpleName().toString();
String name = getPropertyName(parameter, parameterName);
TypeMirror type = parameter.asType(); TypeMirror type = parameter.asType();
ExecutableElement getter = members.getPublicGetter(name, type); ExecutableElement getter = members.getPublicGetter(parameterName, type);
ExecutableElement setter = members.getPublicSetter(name, type); ExecutableElement setter = members.getPublicSetter(parameterName, type);
VariableElement field = members.getFields().get(name); VariableElement field = members.getFields().get(parameterName);
RecordComponentElement recordComponent = members.getRecordComponents().get(name); RecordComponentElement recordComponent = members.getRecordComponents().get(parameterName);
return (recordComponent != null) return (recordComponent != null)
? new RecordParameterPropertyDescriptor(name, type, parameter, declaringElement, getter, ? new RecordParameterPropertyDescriptor(name, type, parameter, declaringElement, getter,
recordComponent) recordComponent)
@ -98,10 +99,6 @@ class PropertyDescriptorResolver {
field); field);
} }
private String getPropertyName(VariableElement parameter) {
return getPropertyName(parameter, parameter.getSimpleName().toString());
}
private String getPropertyName(VariableElement parameter, String fallback) { private String getPropertyName(VariableElement parameter, String fallback) {
AnnotationMirror nameAnnotation = this.environment.getNameAnnotation(parameter); AnnotationMirror nameAnnotation = this.environment.getNameAnnotation(parameter);
if (nameAnnotation != null) { if (nameAnnotation != null) {

5
spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java

@ -264,6 +264,9 @@ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGene
.fromSource(type) .fromSource(type)
.withDeprecation("some-reason", null, null)); .withDeprecation("some-reason", null, null));
assertThat(metadata).has(Metadata.withProperty("deprecated-record.bravo", String.class).fromSource(type)); assertThat(metadata).has(Metadata.withProperty("deprecated-record.bravo", String.class).fromSource(type));
assertThat(metadata).has(Metadata.withProperty("deprecated-record.named.charlie", String.class)
.fromSource(type)
.withDeprecation("another-reason", null, null));
} }
@Test @Test
@ -568,6 +571,8 @@ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGene
.withDescription("description without space after asterisk")); .withDescription("description without space after asterisk"));
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-byte", Byte.class) assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-byte", Byte.class)
.withDescription("last description in Javadoc")); .withDescription("last description in Javadoc"));
assertThat(metadata).has(Metadata.withProperty("record.descriptions.named.record.component", String.class)
.withDescription("description of a named component"));
} }
} }

11
spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/record/ExampleRecord.java

@ -16,22 +16,21 @@
package org.springframework.boot.configurationsample.record; package org.springframework.boot.configurationsample.record;
// @formatter:off import org.springframework.boot.configurationsample.Name;
/** /**
* Example Record Javadoc sample * Example Record Javadoc sample
* *
* @param someString very long description that * @param someString very long description that doesn't fit single line and is indented
* doesn't fit single line and is indented
* @param someInteger description with @param and @ pitfalls * @param someInteger description with @param and @ pitfalls
* @param someBoolean description with extra spaces * @param someBoolean description with extra spaces
* @param someLong description without space after asterisk * @param someLong description without space after asterisk
* @param namedComponent description of a named component
* @param someByte last description in Javadoc * @param someByte last description in Javadoc
* @since 1.0.0 * @since 1.0.0
* @author Pavel Anisimov * @author Pavel Anisimov
*/ */
@org.springframework.boot.configurationsample.ConfigurationProperties("record.descriptions") @org.springframework.boot.configurationsample.ConfigurationProperties("record.descriptions")
public record ExampleRecord(String someString, Integer someInteger, Boolean someBoolean, Long someLong, Byte someByte) { public record ExampleRecord(String someString, Integer someInteger, Boolean someBoolean, Long someLong,
@Name("named.record.component") String namedComponent, Byte someByte) {
} }
//@formatter:on

9
spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DeprecatedRecord.java

@ -18,16 +18,18 @@ package org.springframework.boot.configurationsample.simple;
import org.springframework.boot.configurationsample.ConfigurationProperties; import org.springframework.boot.configurationsample.ConfigurationProperties;
import org.springframework.boot.configurationsample.DeprecatedConfigurationProperty; import org.springframework.boot.configurationsample.DeprecatedConfigurationProperty;
import org.springframework.boot.configurationsample.Name;
/** /**
* Configuration properties as record with deprecated property. * Configuration properties as record with deprecated property.
* *
* @param alpha alpha property, deprecated * @param alpha alpha property, deprecated
* @param bravo bravo property * @param bravo bravo property
* @param charlie charlie property, named, deprecated
* @author Moritz Halbritter * @author Moritz Halbritter
*/ */
@ConfigurationProperties("deprecated-record") @ConfigurationProperties("deprecated-record")
public record DeprecatedRecord(String alpha, String bravo) { public record DeprecatedRecord(String alpha, String bravo, @Name("named.charlie") String charlie) {
@Deprecated @Deprecated
@DeprecatedConfigurationProperty(reason = "some-reason") @DeprecatedConfigurationProperty(reason = "some-reason")
@ -35,4 +37,9 @@ public record DeprecatedRecord(String alpha, String bravo) {
return this.alpha; return this.alpha;
} }
@Deprecated
@DeprecatedConfigurationProperty(reason = "another-reason")
public String charlie() {
return this.charlie;
}
} }

Loading…
Cancel
Save