Skip to content

Commit d5d425b

Browse files
committed
Display deprecated properties in documentation
Fixes #51101
1 parent 0278dcb commit d5d425b

File tree

14 files changed

+101
-18
lines changed

14 files changed

+101
-18
lines changed

core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/discovery/DiscoveryConfigProperty.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ public Builder defaultValueForDoc(String defaultValueForDoc) {
181181
}
182182

183183
public Builder deprecated(String since, String replacement, String reason) {
184-
this.deprecation = new Deprecation(since, replacement, reason);
184+
this.deprecation = new Deprecation(since, replacement);
185185
return this;
186186
}
187187

core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigItemCollection.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,44 @@ public interface ConfigItemCollection {
88

99
List<AbstractConfigItem> getItems();
1010

11+
@JsonIgnore
12+
default List<ConfigProperty> getProperties() {
13+
return getItems().stream()
14+
.filter(i -> i instanceof ConfigProperty)
15+
.map(ConfigProperty.class::cast)
16+
.toList();
17+
}
18+
19+
@JsonIgnore
20+
default List<ConfigSection> getSections() {
21+
return getItems().stream()
22+
.filter(i -> i instanceof ConfigSection)
23+
.map(ConfigSection.class::cast)
24+
.toList();
25+
}
26+
1127
@JsonIgnore
1228
default List<AbstractConfigItem> getNonDeprecatedItems() {
1329
return getItems().stream()
1430
.filter(i -> (i instanceof ConfigSection)
15-
? !i.isDeprecated() && ((ConfigSection) i).getNonDeprecatedItems().size() > 0
31+
? !i.isDeprecated() && !((ConfigSection) i).getNonDeprecatedItems().isEmpty()
1632
: !i.isDeprecated())
1733
.toList();
1834
}
1935

2036
@JsonIgnore
21-
default List<AbstractConfigItem> getNonDeprecatedProperties() {
37+
default List<ConfigProperty> getNonDeprecatedProperties() {
2238
return getItems().stream()
2339
.filter(i -> i instanceof ConfigProperty && !i.isDeprecated())
40+
.map(ConfigProperty.class::cast)
2441
.toList();
2542
}
2643

2744
@JsonIgnore
28-
default List<AbstractConfigItem> getNonDeprecatedSections() {
45+
default List<ConfigSection> getNonDeprecatedSections() {
2946
return getItems().stream()
3047
.filter(i -> i instanceof ConfigSection && !i.isDeprecated())
48+
.map(ConfigSection.class::cast)
3149
.toList();
3250
}
3351

core/processor/src/main/java/io/quarkus/annotation/processor/documentation/config/model/ConfigProperty.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ public int compareTo(AbstractConfigItem o) {
137137

138138
ConfigProperty other = (ConfigProperty) o;
139139

140+
// let's put the deprecated properties last
141+
if (isDeprecated() && !other.isDeprecated()) {
142+
return 1;
143+
} else if (!isDeprecated() && other.isDeprecated()) {
144+
return -1;
145+
}
146+
140147
if (isWithinMap()) {
141148
if (other.isWithinMap()) {
142149
return ConfigPhase.COMPARATOR.compare(phase, other.getPhase());
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package io.quarkus.annotation.processor.documentation.config.model;
22

3-
public record Deprecation(String since, String replacement, String reason) {
3+
public record Deprecation(String since, String replacement) {
44

55
}

devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,14 @@ private static Engine initializeQuteEngine(Formatter formatter, Format format, S
382382
(Extension) ctx.evaluate(ctx.getParams().get(0)).toCompletableFuture().join(),
383383
(Context) ctx.evaluate(ctx.getParams().get(1)).toCompletableFuture().join()))
384384
.build())
385+
.addValueResolver(ValueResolver.builder()
386+
.applyToBaseClass(ConfigProperty.class)
387+
.applyToName("formatDeprecatedReason")
388+
.applyToParameters(2)
389+
.resolveSync(ctx -> formatter.formatDeprecatedReason((ConfigProperty) ctx.getBase(),
390+
(Extension) ctx.evaluate(ctx.getParams().get(0)).toCompletableFuture().join(),
391+
(Context) ctx.evaluate(ctx.getParams().get(1)).toCompletableFuture().join()))
392+
.build())
385393
.addValueResolver(ValueResolver.builder()
386394
.applyToBaseClass(ConfigProperty.class)
387395
.applyToName("formatDefaultValue")

devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,28 @@ public String formatDescription(ConfigProperty configProperty) {
6565
return description + "\n\n";
6666
}
6767

68+
@Override
69+
public String formatDeprecatedReason(ConfigProperty configProperty, Extension extension, Context context) {
70+
Optional<JavadocElement> javadocElement = javadocRepository.getElement(configProperty.getSourceType(),
71+
configProperty.getSourceElementName());
72+
73+
if (javadocElement.isEmpty()) {
74+
return null;
75+
}
76+
77+
String deprecatedReason = JavadocTransformer.transform(javadocElement.get().deprecated(), JavadocFormat.JAVADOC,
78+
javadocFormat());
79+
if (deprecatedReason == null || deprecatedReason.isBlank()) {
80+
return null;
81+
}
82+
83+
if (deprecatedReason.endsWith(".")) {
84+
return deprecatedReason.substring(0, deprecatedReason.length() - 1);
85+
}
86+
87+
return deprecatedReason;
88+
}
89+
6890
@Override
6991
public String formatTypeDescription(ConfigProperty configProperty, Context context) {
7092
String typeContent = "";

devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/Formatter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ default String formatDescription(ConfigProperty configProperty, Extension extens
1717
return formatDescription(configProperty);
1818
}
1919

20+
String formatDeprecatedReason(ConfigProperty configProperty, Extension extension, Context context);
21+
2022
String formatTypeDescription(ConfigProperty configProperty, Context context);
2123

2224
String formatDefaultValue(ConfigProperty configProperty);

devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/allConfig.qute.adoc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ h|Type
99
h|Default
1010

1111
{#for configRootEntry in extensionConfigRootsEntry.value}
12-
{#if configRootEntry.value.nonDeprecatedItems}
1312
{#let displayConfigRootDescription=configRootEntry.key.displayConfigRootDescription(extensionConfigRootsEntry.value.size)}
1413
{#if displayConfigRootDescription}
1514
h|[.configroot-name]##{configRootEntry.key.description.escapeCellContent}##
@@ -18,18 +17,15 @@ h|Default
1817

1918
{/if}
2019
{#for item in configRootEntry.value.items}
21-
{#if !item.deprecated}
2220
{#if item.isSection}
2321
{#configSection context=context configSection=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=displayConfigRootDescription /}
2422

2523
{#else}
2624
{#configProperty context=context configProperty=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /}
2725

28-
{/if}
2926
{/if}
3027
{/for}
3128
{/let}
32-
{/if}
3329
{/for}
3430
{/for}
3531
|===

devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/configReference.qute.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ h|[.header-title]##Configuration property##
77
h|Type
88
h|Default
99

10-
{#for item in configItemCollection.nonDeprecatedItems}
10+
{#for item in configItemCollection.items}
1111
{#if item.isSection}
1212
{#configSection context=context configSection=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=false /}
1313

devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
a|{#if configProperty.phase.fixedAtBuildTime}icon:lock[title=Fixed at build time]{/if} [[{configProperty.toAnchor(extension, additionalAnchorPrefix)}]] [.property-path]##link:#{configProperty.toAnchor(extension, additionalAnchorPrefix)}[`{configProperty.path.property}`]##
1+
a|{#if configProperty.phase.fixedAtBuildTime}icon:lock[title=Fixed at build time]{/if} [[{configProperty.toAnchor(extension, additionalAnchorPrefix)}]] [.property-path]##link:#{configProperty.toAnchor(extension, additionalAnchorPrefix)}[{#if configProperty.deprecated}[.line-through]#{/if}`{configProperty.path.property}`{#if configProperty.deprecated}#{/if}]##
22
{#propertyCopyButton configProperty.path.property /}
33

44
{#for additionalPath in configProperty.additionalPaths}
55

6-
`{additionalPath.property}`
6+
{#if configProperty.deprecated}[.line-through]#{/if}`{additionalPath.property}`{#if configProperty.deprecated}#{/if}
77
{#propertyCopyButton additionalPath.property /}
88
{/for}
99

1010
[.description]
1111
--
12+
{#if configProperty.deprecation}
13+
{#let deprecatedReason=configProperty.formatDeprecatedReason(extension, context)}
14+
_This property is deprecated{#if configProperty.deprecation.since} since `{configProperty.deprecation.since}`{/if}{#if deprecatedReason}: {deprecatedReason}{/if}._
15+
16+
{/let}
17+
{/if}
1218
{configProperty.formatDescription(extension, context).escapeCellContent.or("")}
1319
{#envVar configProperty /}
1420
--

0 commit comments

Comments
 (0)