diff --git a/configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java b/configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java index 9154d5a76b8..5a118de80cc 100644 --- a/configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java +++ b/configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/TypeUtils.java @@ -272,8 +272,9 @@ class TypeUtils { char lastChar = '.'; for (int i = 0; i < javadoc.length(); i++) { char ch = javadoc.charAt(i); - boolean repeatedSpace = ch == ' ' && lastChar == ' '; - if (ch != '\r' && ch != '\n' && !repeatedSpace) { + ch = (ch == '\r' || ch == '\n') ? ' ' : ch; + boolean repeatedSpace = (ch == ' ' && lastChar == ' '); + if (!repeatedSpace) { result.append(ch); lastChar = ch; } diff --git a/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java b/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java index 55399539b97..97f82319c71 100644 --- a/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java +++ b/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java @@ -234,6 +234,9 @@ class ConfigurationMetadataAnnotationProcessorTests extends AbstractMetadataGene .fromSource(DescriptionProperties.class) .withDescription( "This is a lengthy description that spans across multiple lines to showcase that the line separators are cleaned automatically.")); + assertThat(metadata).has(Metadata.withProperty("description.multi-line-whitespace", String.class) + .fromSource(DescriptionProperties.class) + .withDescription("This is an example of a description with unusual whitespace after a new line.")); } @Test diff --git a/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DescriptionProperties.java b/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DescriptionProperties.java index e211792c77a..4ed2bdaedfc 100644 --- a/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DescriptionProperties.java +++ b/configuration-metadata/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/simple/DescriptionProperties.java @@ -37,6 +37,14 @@ public class DescriptionProperties { */ private String multiLine; + // @formatter:off + /** + * This is an example of a description + *with unusual whitespace after a new line. + */ + private String multiLineWhitespace; + // @formatter:on + public String getSimple() { return this.simple; } @@ -53,4 +61,12 @@ public class DescriptionProperties { this.multiLine = multiLine; } + public String getMultiLineWhitespace() { + return this.multiLineWhitespace; + } + + public void setMultiLineWhitespace(String multiLineWhitespace) { + this.multiLineWhitespace = multiLineWhitespace; + } + }