Generate configuration metadata for records
Update `spring-boot-configuration-processor` to support generating configuration metadata from record parameter javadoc. See gh-29403
This commit is contained in:
committed by
Phillip Webb
parent
cde9166d50
commit
af976caec9
@@ -22,6 +22,7 @@ import org.springframework.boot.configurationprocessor.metadata.ConfigurationMet
|
||||
import org.springframework.boot.configurationprocessor.metadata.ItemMetadata;
|
||||
import org.springframework.boot.configurationprocessor.metadata.Metadata;
|
||||
import org.springframework.boot.configurationsample.deprecation.Dbcp2Configuration;
|
||||
import org.springframework.boot.configurationsample.record.ExampleRecord;
|
||||
import org.springframework.boot.configurationsample.record.RecordWithGetter;
|
||||
import org.springframework.boot.configurationsample.recursive.RecursiveProperties;
|
||||
import org.springframework.boot.configurationsample.simple.ClassWithNestedProperties;
|
||||
@@ -516,4 +517,19 @@ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGene
|
||||
assertThat(metadata).has(Metadata.withProperty("spring.datasource.dbcp2.password").withNoDeprecation());
|
||||
}
|
||||
|
||||
@Test
|
||||
void recordPropertiesWithDescriptions() {
|
||||
ConfigurationMetadata metadata = compile(ExampleRecord.class);
|
||||
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-string", String.class)
|
||||
.withDescription("very long description that doesn't fit single line"));
|
||||
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-integer", Integer.class)
|
||||
.withDescription("description with @param and @ pitfalls"));
|
||||
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-boolean", Boolean.class)
|
||||
.withDescription("description with extra spaces"));
|
||||
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-long", Long.class)
|
||||
.withDescription("description without space after asterisk"));
|
||||
assertThat(metadata).has(Metadata.withProperty("record.descriptions.some-byte", Byte.class)
|
||||
.withDescription("last description in Javadoc"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ class ConstructorParameterPropertyDescriptorTests extends PropertyDescriptorTest
|
||||
VariableElement field = getField(ownerElement, "flag");
|
||||
VariableElement constructorParameter = getConstructorParameter(ownerElement, "flag");
|
||||
ConstructorParameterPropertyDescriptor property = new ConstructorParameterPropertyDescriptor(ownerElement,
|
||||
null, constructorParameter, "flag", field.asType(), field, getter, null);
|
||||
null, constructorParameter, "flag", field.asType(), field, null, getter, null);
|
||||
assertItemMetadata(metadataEnv, property).isProperty().isDeprecatedWithNoInformation();
|
||||
});
|
||||
}
|
||||
@@ -223,7 +223,7 @@ class ConstructorParameterPropertyDescriptorTests extends PropertyDescriptorTest
|
||||
ExecutableElement getter = getMethod(ownerElement, createAccessorMethodName("get", name));
|
||||
ExecutableElement setter = getMethod(ownerElement, createAccessorMethodName("set", name));
|
||||
return new ConstructorParameterPropertyDescriptor(ownerElement, null, constructorParameter, name,
|
||||
field.asType(), field, getter, setter);
|
||||
field.asType(), field, null, getter, setter);
|
||||
}
|
||||
|
||||
private VariableElement getConstructorParameter(TypeElement ownerElement, String name) {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.configurationsample.record;
|
||||
|
||||
/**
|
||||
* Example Record Javadoc sample
|
||||
*
|
||||
* @param someString very long description that doesn't fit single line
|
||||
* @param someInteger description with @param and @ pitfalls
|
||||
* @param someBoolean description with extra spaces
|
||||
* @param someLong description without space after asterisk
|
||||
* @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) {
|
||||
}
|
||||
Reference in New Issue
Block a user