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
This commit is contained in:
Stéphane Nicoll 2025-08-04 15:00:55 +02:00
commit 14820b0d11
4 changed files with 24 additions and 16 deletions

View File

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

View File

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

View File

@ -16,22 +16,21 @@
package org.springframework.boot.configurationsample.record;
// @formatter:off
import org.springframework.boot.configurationsample.Name;
/**
* Example Record Javadoc sample
*
* @param someString very long description that
* doesn't fit single line and is indented
* @param someString very long description that doesn't fit single line and is indented
* @param someInteger description with @param and @ pitfalls
* @param someBoolean description with extra spaces
* @param someLong description without space after asterisk
* @param namedComponent description of a named component
* @param someByte last description in Javadoc
* @since 1.0.0
* @author Pavel Anisimov
*/
@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

View File

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