diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java index ed5626b9f1bf1..3fd3c90adbb37 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java @@ -117,10 +117,11 @@ public void execute() throws MojoExecutionException, MojoFailureException { extension.artifactId(), topLevelPrefix, normalizedFormat.getExtension())); String summaryTableId = formatter .toAnchor(extension.artifactId() + "_" + topLevelPrefix); + Context context = new Context(summaryTableId); try { Files.writeString(configRootPath, - generateConfigReference(quteEngine, summaryTableId, extension, configRoot, "", true)); + generateConfigReference(quteEngine, context, extension, configRoot, "", true)); } catch (Exception e) { throw new MojoExecutionException("Unable to render config roots for top level prefix: " + topLevelPrefix + " in extension: " + extension, e); @@ -156,10 +157,11 @@ public void execute() throws MojoExecutionException, MojoFailureException { Path configRootPath = resolvedTargetDirectory.resolve(fileName); String summaryTableId = formatter.toAnchor(normalizedFileName); + Context context = new Context(summaryTableId); try { Files.writeString(configRootPath, - generateConfigReference(quteEngine, summaryTableId, extension, configRoot, "", true)); + generateConfigReference(quteEngine, context, extension, configRoot, "", true)); } catch (Exception e) { throw new MojoExecutionException("Unable to render config roots for specific file: " + fileName + " in extension: " + extension, e); @@ -181,10 +183,11 @@ public void execute() throws MojoExecutionException, MojoFailureException { normalizedFormat.getExtension())); String summaryTableId = formatter .toAnchor(extension.artifactId() + "_" + generatedConfigSection.getPath().property()); + Context context = new Context(summaryTableId); try { Files.writeString(configSectionPath, - generateConfigReference(quteEngine, summaryTableId, extension, generatedConfigSection, + generateConfigReference(quteEngine, context, extension, generatedConfigSection, "_" + generatedConfigSection.getPath().property(), false)); } catch (Exception e) { throw new MojoExecutionException( @@ -201,32 +204,36 @@ public void execute() throws MojoExecutionException, MojoFailureException { Path allConfigPath = resolvedTargetDirectory.resolve(String.format(ALL_CONFIG_FILE_FORMAT, normalizedFormat.getExtension())); - Files.writeString(allConfigPath, generateAllConfig(quteEngine, mergedModel.getConfigRoots())); + Context context = new Context("all-config"); + + Files.writeString(allConfigPath, generateAllConfig(quteEngine, context, mergedModel.getConfigRoots())); } catch (Exception e) { throw new MojoExecutionException("Unable to render all config", e); } } } - private static String generateConfigReference(Engine quteEngine, String summaryTableId, Extension extension, + private static String generateConfigReference(Engine quteEngine, Context context, Extension extension, ConfigItemCollection configItemCollection, String additionalAnchorPrefix, boolean searchable) { return quteEngine.getTemplate("configReference") .data("extension", extension) .data("configItemCollection", configItemCollection) .data("searchable", searchable) - .data("summaryTableId", summaryTableId) + .data("context", context) + .data("summaryTableId", context.summaryTableId()) // for backward compatibility, use context instead .data("additionalAnchorPrefix", additionalAnchorPrefix) .data("includeDurationNote", configItemCollection.hasDurationType()) .data("includeMemorySizeNote", configItemCollection.hasMemorySizeType()) .render(); } - private static String generateAllConfig(Engine quteEngine, + private static String generateAllConfig(Engine quteEngine, Context context, Map> configRootsByExtensions) { return quteEngine.getTemplate("allConfig") .data("configRootsByExtensions", configRootsByExtensions) .data("searchable", true) - .data("summaryTableId", "all-config") + .data("context", context) + .data("summaryTableId", context.summaryTableId()) // for backward compatibility, use context instead .data("additionalAnchorPrefix", "") .data("includeDurationNote", true) .data("includeMemorySizeNote", true) @@ -323,11 +330,19 @@ private static Engine initializeQuteEngine(Formatter formatter, Format format, S ctx.evaluate(ctx.getParams().get(1)).toCompletableFuture().join() + "_section_" + ((ConfigSection) ctx.getBase()).getPath().property())) .build()) + .addValueResolver(ValueResolver.builder() + .applyToBaseClass(ConfigProperty.class) + .applyToName("formatTypeDescription") + .applyToParameters(1) + .resolveSync(ctx -> formatter.formatTypeDescription((ConfigProperty) ctx.getBase(), + (Context) ctx.evaluate(ctx.getParams().get(0)).toCompletableFuture().join())) + .build()) + // deprecated, for backward compatibility .addValueResolver(ValueResolver.builder() .applyToBaseClass(ConfigProperty.class) .applyToName("formatTypeDescription") .applyToNoParameters() - .resolveSync(ctx -> formatter.formatTypeDescription((ConfigProperty) ctx.getBase())) + .resolveSync(ctx -> formatter.formatTypeDescription((ConfigProperty) ctx.getBase(), null)) .build()) .addValueResolver(ValueResolver.builder() .applyToBaseClass(ConfigProperty.class) @@ -430,4 +445,7 @@ private static String cleanSectionPath(String sectionPath) { private String stripAdocSuffix(String fileName) { return fileName.substring(0, fileName.length() - ADOC_SUFFIX.length()); } + + public record Context(String summaryTableId) { + } } diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java index 49384bb924e52..51d45e63baebe 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AbstractFormatter.java @@ -14,6 +14,7 @@ import io.quarkus.annotation.processor.documentation.config.model.JavadocElements.JavadocElement; import io.quarkus.annotation.processor.documentation.config.model.JavadocFormat; import io.quarkus.annotation.processor.documentation.config.util.Types; +import io.quarkus.maven.config.doc.GenerateConfigDocMojo.Context; abstract class AbstractFormatter implements Formatter { @@ -53,7 +54,7 @@ public String formatDescription(ConfigProperty configProperty) { } @Override - public String formatTypeDescription(ConfigProperty configProperty) { + public String formatTypeDescription(ConfigProperty configProperty, Context context) { String typeContent = ""; if (configProperty.isEnum() && enableEnumTooltips) { @@ -80,9 +81,9 @@ public String formatTypeDescription(ConfigProperty configProperty) { } if (Duration.class.getName().equals(configProperty.getType())) { - typeContent += " " + moreInformationAboutType("duration-note-anchor", Duration.class.getSimpleName()); + typeContent += " " + moreInformationAboutType(context, "duration-note-anchor", Duration.class.getSimpleName()); } else if (Types.MEMORY_SIZE_TYPE.equals(configProperty.getType())) { - typeContent += " " + moreInformationAboutType("memory-size-note-anchor", "MemorySize"); + typeContent += " " + moreInformationAboutType(context, "memory-size-note-anchor", "MemorySize"); } return typeContent; @@ -236,7 +237,7 @@ private static String trimFinalDot(String javadoc) { protected abstract JavadocFormat javadocFormat(); - protected abstract String moreInformationAboutType(String anchorRoot, String type); + protected abstract String moreInformationAboutType(Context context, String anchorRoot, String type); protected abstract String link(String href, String description); diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AsciidocFormatter.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AsciidocFormatter.java index dab5e3d1aa1d3..e00a9c5a4dbbd 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AsciidocFormatter.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/AsciidocFormatter.java @@ -2,6 +2,7 @@ import io.quarkus.annotation.processor.documentation.config.merger.JavadocRepository; import io.quarkus.annotation.processor.documentation.config.model.JavadocFormat; +import io.quarkus.maven.config.doc.GenerateConfigDocMojo.Context; final class AsciidocFormatter extends AbstractFormatter { @@ -17,8 +18,9 @@ protected JavadocFormat javadocFormat() { return JavadocFormat.ASCIIDOC; } - protected String moreInformationAboutType(String anchorRoot, String type) { - return String.format(MORE_INFO_ABOUT_TYPE_FORMAT, anchorRoot + "-{summaryTableId}", type); + protected String moreInformationAboutType(Context context, String anchorRoot, String type) { + return String.format(MORE_INFO_ABOUT_TYPE_FORMAT, anchorRoot + "-" + (context != null ? context.summaryTableId() : ""), + type); } protected String tooltip(String value, String javadocDescription) { diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/Formatter.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/Formatter.java index 3552ab26f6e20..ffe537eece352 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/Formatter.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/Formatter.java @@ -5,6 +5,7 @@ import io.quarkus.annotation.processor.documentation.config.model.ConfigProperty; import io.quarkus.annotation.processor.documentation.config.model.ConfigSection; import io.quarkus.annotation.processor.documentation.config.model.Extension; +import io.quarkus.maven.config.doc.GenerateConfigDocMojo.Context; public interface Formatter { @@ -12,7 +13,7 @@ public interface Formatter { String formatDescription(ConfigProperty configProperty); - String formatTypeDescription(ConfigProperty configProperty); + String formatTypeDescription(ConfigProperty configProperty, Context context); String formatDefaultValue(ConfigProperty configProperty); diff --git a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/MarkdownFormatter.java b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/MarkdownFormatter.java index c4572873817fd..b813090ec63df 100644 --- a/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/MarkdownFormatter.java +++ b/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/generator/MarkdownFormatter.java @@ -3,6 +3,7 @@ import io.quarkus.annotation.processor.documentation.config.merger.JavadocRepository; import io.quarkus.annotation.processor.documentation.config.model.ConfigSection; import io.quarkus.annotation.processor.documentation.config.model.JavadocFormat; +import io.quarkus.maven.config.doc.GenerateConfigDocMojo.Context; final class MarkdownFormatter extends AbstractFormatter { @@ -23,7 +24,7 @@ public String formatSectionTitle(ConfigSection configSection) { } @Override - protected String moreInformationAboutType(String anchorRoot, String type) { + protected String moreInformationAboutType(Context context, String anchorRoot, String type) { return MORE_INFO_ABOUT_TYPE_FORMAT.formatted(anchorRoot); } diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/allConfig.qute.adoc b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/allConfig.qute.adoc index 7d23937792242..399c28104673f 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/allConfig.qute.adoc +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/allConfig.qute.adoc @@ -1,4 +1,3 @@ -:summaryTableId: {summaryTableId} [.configuration-legend] icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime [.configuration-reference{#if searchable}.searchable{/if}, cols="80,.^10,.^10"] @@ -21,10 +20,10 @@ h|Default {#for item in configRootEntry.value.items} {#if !item.deprecated} {#if item.isSection} -{#configSection configSection=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=displayConfigRootDescription /} +{#configSection context=context configSection=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=displayConfigRootDescription /} {#else} -{#configProperty configProperty=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} {/if} {/if} @@ -36,10 +35,8 @@ h|Default |=== {#if includeDurationNote} -{#durationNote summaryTableId /} +{#durationNote summaryTableId=context.summaryTableId /} {/if} {#if includeMemorySizeNote} -{#memorySizeNote summaryTableId /} -{/if} - -:!summaryTableId: \ No newline at end of file +{#memorySizeNote summaryTableId=context.summaryTableId /} +{/if} \ No newline at end of file diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/configReference.qute.adoc b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/configReference.qute.adoc index c5151982992c2..cbffa8c615147 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/configReference.qute.adoc +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/configReference.qute.adoc @@ -1,4 +1,3 @@ -:summaryTableId: {summaryTableId} [.configuration-legend] icon:lock[title=Fixed at build time] Configuration property fixed at build time - All other configuration properties are overridable at runtime [.configuration-reference{#if searchable}.searchable{/if}, cols="80,.^10,.^10"] @@ -10,10 +9,10 @@ h|Default {#for item in configItemCollection.nonDeprecatedItems} {#if item.isSection} -{#configSection configSection=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=false /} +{#configSection context=context configSection=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=false /} {#else} -{#configProperty configProperty=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} {/if} {#else} @@ -23,10 +22,8 @@ h|Default |=== {#if includeDurationNote} -{#durationNote summaryTableId /} +{#durationNote summaryTableId=context.summaryTableId /} {/if} {#if includeMemorySizeNote} -{#memorySizeNote summaryTableId /} -{/if} - -:!summaryTableId: \ No newline at end of file +{#memorySizeNote summaryTableId=context.summaryTableId /} +{/if} \ No newline at end of file diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc index 7afd4ac29bf8b..43a360feacdc0 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc @@ -9,5 +9,5 @@ a|{#if configProperty.phase.fixedAtBuildTime}icon:lock[title=Fixed at build time {configProperty.formatDescription.escapeCellContent.or("")} {#envVar configProperty /} -- -{#if configProperty.enum}a{/if}|{configProperty.formatTypeDescription.escapeCellContent.or("")} +{#if configProperty.enum}a{/if}|{configProperty.formatTypeDescription(context).escapeCellContent.or("")} |{#if configProperty.defaultValue}{configProperty.formatDefaultValue.escapeCellContent}{#else if !configProperty.optional}required icon:exclamation-circle[title=Configuration property is required]{/if} diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configSection.qute.adoc b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configSection.qute.adoc index 34c4abfaf7073..4d1298f27daca 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configSection.qute.adoc +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configSection.qute.adoc @@ -4,10 +4,10 @@ h|Default {#for item in configSection.nonDeprecatedItems} {#if item.isSection} -{#configSection configSection=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=displayConfigRootDescription /} +{#configSection context=context configSection=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=displayConfigRootDescription /} {#else} -{#configProperty configProperty=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=item extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} {/if} {/for} \ No newline at end of file diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/allConfig.qute.md b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/allConfig.qute.md index 5a95faabc7eeb..58d371853d240 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/allConfig.qute.md +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/allConfig.qute.md @@ -17,9 +17,9 @@ {#for item in configRoot.items} {#if !item.deprecated} {#if !item.isSection} -{#configProperty configProperty=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} {#else} -{#configSection configSection=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} +{#configSection context=context configSection=item extension=extensionConfigRootsEntry.key additionalAnchorPrefix=additionalAnchorPrefix /} {/if} {/if} {/for} @@ -29,8 +29,8 @@ {/for} {#if includeDurationNote} -{#durationNote summaryTableId /} +{#durationNote context.summaryTableId /} {/if} {#if includeMemorySizeNote} -{#memorySizeNote summaryTableId /} +{#memorySizeNote context.summaryTableId /} {/if} diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/configReference.qute.md b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/configReference.qute.md index a11b56f425e12..170b0de2d4ec3 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/configReference.qute.md +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/configReference.qute.md @@ -10,17 +10,17 @@ {#for property in configItemCollection.nonDeprecatedProperties} -{#configProperty configProperty=property extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=property extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} {/for} {#for section in configItemCollection.nonDeprecatedSections} -{#configSection configSection=section extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=false /} +{#configSection context=context configSection=section extension=extension additionalAnchorPrefix=additionalAnchorPrefix displayConfigRootDescription=false /} {/for} {#if includeDurationNote} -{#durationNote summaryTableId /} +{#durationNote context.summaryTableId /} {/if} {#if includeMemorySizeNote} -{#memorySizeNote summaryTableId /} +{#memorySizeNote context.summaryTableId /} {/if} diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configProperty.qute.md b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configProperty.qute.md index 0980471bd8986..042d565f71b9c 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configProperty.qute.md +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configProperty.qute.md @@ -12,7 +12,7 @@ -{configProperty.formatTypeDescription.escapeCellContent.or("")} +{configProperty.formatTypeDescription(context).escapeCellContent.or("")} diff --git a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configSection.qute.md b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configSection.qute.md index 5d518fff7930e..67c5ef396ff5d 100644 --- a/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configSection.qute.md +++ b/devtools/config-doc-maven-plugin/src/main/resources/templates/markdown/default/tags/configSection.qute.md @@ -7,8 +7,8 @@ {#for property in configSection.nonDeprecatedProperties} -{#configProperty configProperty=property extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} +{#configProperty context=context configProperty=property extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} {/for} {#for subsection in configSection.nonDeprecatedSections} -{#configSection configSection=subsection extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} +{#configSection context=context configSection=subsection extension=extension additionalAnchorPrefix=additionalAnchorPrefix /} {/for}