spring-projects / spring-projects/spring-boot
Configuration property descriptions may be lost when building incrementally
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 81.5k
- Forks
- 42.7k
- Avg merge
- 2d 4h
- Merged PRs (30d)
- 65
Description
We have two @ConfigurationProperties annotated classes:
package com.example;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "more")
public class MoreProperties {
/**
* Another example property.
*/
private String someProperty;
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
public String getSomeProperty() {
return this.someProperty;
}
}
package com.example;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "some")
public class SomeProperties {
/**
* An example property.
*/
private String someProperty;
public void setSomeProperty(String someProperty) {
this.someProperty = someProperty;
}
public String getSomeProperty() {
return this.someProperty;
}
}
compileJava produces the following metadata:
{
"groups": [
{
"name": "more",
"type": "com.example.MoreProperties",
"sourceType": "com.example.MoreProperties"
},
{
"name": "some",
"type": "com.example.SomeProperties",
"sourceType": "com.example.SomeProperties"
}
],
"properties": [
{
"name": "more.some-property",
"type": "java.lang.String",
"description": "Another example property.",
"sourceType": "com.example.MoreProperties"
},
{
"name": "some.some-property",
"type": "java.lang.String",
"description": "An example property.",
"sourceType": "com.example.SomeProperties"
}
],
"hints": []
}
We then change the description of more.some-property to Another example property with a new description.. compileJava now produces the following metadata:
{
"groups": [
{
"name": "more",
"type": "com.example.MoreProperties",
"sourceType": "com.example.MoreProperties"
},
{
"name": "some",
"type": "com.example.SomeProperties",
"sourceType": "com.example.SomeProperties"
}
],
"properties": [
{
"name": "more.some-property",
"type": "java.lang.String",
"description": "Another example property with a new description.",
"sourceType": "com.example.MoreProperties"
},
{
"name": "some.some-property",
"type": "java.lang.String",
"sourceType": "com.example.SomeProperties"
}
],
"hints": []
}
The description of the property that was not changed, some.some-property, has been lost. Upon running clean compileJava it reappears.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with the two @ConfigurationProperties classes and the incremental compileJava workflow, then compare the generated metadata before and after changing more.some-property. Check whether clean compileJava restores the unchanged description; done means incremental compilation preserves both property descriptions in the metadata.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, spring-boot
- Domain
- build-system, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100