* Sets the {@link #sourceSet sourceSet}, {@link SourceSet#jdkVersion jdkVersion}, {@link #moduleName moduleName}
- * and {@link SourceSet#classpath(String...) classpath} from the project.
+ * and {@link SourceSet#classpath(File...) classpath} from the project.
*
* @param project the project to configure the operation from
*/
@@ -276,7 +278,7 @@ protected List
@@ -381,6 +401,15 @@ public DokkaOperation globalSrcLink(String... links) {
return this;
}
+ /**
+ * Retrieves the global source links
+ *
+ * @return the source links
+ */
+ public Collection
+ * The contents of specified files are parsed and embedded into documentation as module and package descriptions.
+ *
+ * This can be configured on per-package basis.
+ *
+ * @param files one or more files
+ * @return this operation instance
+ */
+ public DokkaOperation includes(String... files) {
+ Collections.addAll(includes_, Arrays.stream(files)
+ .map(File::new)
+ .toArray(File[]::new));
+ return this;
+ }
+
+ /**
+ * Retrieves the markdown files that contain the module and package documentation.
+ *
+ * @return the markdown files
+ */
+ public Collection
@@ -417,7 +472,7 @@ public DokkaOperation includes(String... files) {
* @param files the list of files
* @return this operation instance
*/
- public DokkaOperation includes(Collection
* This option accepts both {@code .jar} and {@code .klib} files.
*
- * @param files the list of files
+ * @param files one or more file
* @return this operation instance
*/
- public SourceSet classpath(Collection
@@ -347,6 +376,15 @@ public SourceSet externalDocumentationLinks(String url, String packageListUrl) {
return this;
}
+ /**
+ * Retrieves the external documentation links.
+ *
+ * @return the documentation links.
+ */
+ public Map
@@ -372,11 +410,38 @@ public SourceSet externalDocumentationLinks(Map
+ * A list of Markdown files that contain module and package documentation.
+ *
+ * The contents of the specified files are parsed and embedded into documentation as module and package
+ * descriptions.
+ *
+ * @param files one or more files
+ * @return this operation instance
+ */
+ public SourceSet includes(String... files) {
+ Collections.addAll(includes_, Arrays.stream(files)
+ .map(File::new)
+ .toArray(File[]::new));
+ return this;
+ }
+
+ /**
+ * Retrieves the Markdown files that contain module and package documentation.
+ *
+ * @return the markdown files
+ */
+ public Collection
@@ -388,7 +453,7 @@ public SourceSet includes(String... files) {
* @param files the list of files
* @return this operation instance
*/
- public SourceSet includes(Collection
@@ -568,11 +642,20 @@ public SourceSet reportUndocumented(Boolean reportUndocumented) {
* @param samples the list of samples
* @return this operation instance
*/
- public SourceSet samples(Collection
@@ -582,11 +665,27 @@ public SourceSet samples(Collection
+ * A list of directories or files that contain sample functions which are referenced via the {@code @sample} KDoc
+ * tag.
+ *
+ * @param samples nne or more samples
+ * @return this operation instance
+ */
+ public SourceSet samples(String... samples) {
+ Collections.addAll(samples_, Arrays.stream(samples)
+ .map(File::new)
+ .toArray(File[]::new));
+ return this;
+ }
+
/**
* Sets whether to skip deprecated declarations.
*
@@ -622,7 +721,7 @@ public SourceSet sourceSetName(String sourceSetName) {
* @param src the list of source code roots
* @return this operation instance
*/
- public SourceSet src(Collection
+ * The source code roots to be analyzed and documented. Acceptable inputs are directories and individual
+ * {@code .kt} / {@code .java} files.
+ *
+ * @param src pne ore moe source code roots
+ * @return this operation instance
+ */
+ public SourceSet src(String... src) {
+ Collections.addAll(src_, Arrays.stream(src)
+ .map(File::new)
+ .toArray(File[]::new));
+ return this;
+ }
+
+ /**
+ * Retrieves the source code roots to be analyzed and documented.
+ *
+ * @return the source code roots
+ */
+ public Collection
@@ -662,11 +808,21 @@ public SourceSet srcLink(String srcPath, String remotePath, String lineSuffix) {
* @param suppressedFiles the list of suppressed files
* @return this operation instance
*/
- public SourceSet suppressedFiles(Collection
@@ -676,6 +832,21 @@ public SourceSet suppressedFiles(Collection
+ * The files to be suppressed when generating documentation.
+ *
+ * @param suppressedFiles one or moe suppressed files
+ * @return this operation instance
+ */
+ public SourceSet suppressedFiles(File... suppressedFiles) {
suppressedFiles_.addAll(Arrays.asList(suppressedFiles));
return this;
}
diff --git a/src/test/java/rife/bld/extension/DokkaOperationTest.java b/src/test/java/rife/bld/extension/DokkaOperationTest.java
index e4ff292..dbd0585 100644
--- a/src/test/java/rife/bld/extension/DokkaOperationTest.java
+++ b/src/test/java/rife/bld/extension/DokkaOperationTest.java
@@ -35,7 +35,7 @@
class DokkaOperationTest {
@Test
- @SuppressWarnings({"ExtractMethodRecommender", "PMD.AvoidDuplicateLiterals"})
+ @SuppressWarnings({"PMD.AvoidDuplicateLiterals"})
void executeConstructProcessCommandListTest() throws IOException {
var args = Files.readAllLines(Paths.get("src", "test", "resources", "dokka-args.txt"));
@@ -43,7 +43,7 @@ void executeConstructProcessCommandListTest() throws IOException {
var examples = new File("examples");
var jsonConf = new File("config.json");
- var params = new DokkaOperation()
+ var op = new DokkaOperation()
.delayTemplateSubstitution(true)
.failOnWarning(true)
.fromProject(new BaseProjectBlueprint(examples, "com.example", "Example"))
@@ -53,8 +53,9 @@ void executeConstructProcessCommandListTest() throws IOException {
.globalPackageOptions(List.of("option3", "option4"))
.globalSrcLink("link1", "link2")
.globalSrcLink(List.of("link3", "link4"))
- .includes("file1", "file2")
- .includes(List.of("file3", "file4"))
+ .includes(new File("file1"))
+ .includes("file2")
+ .includes(List.of(new File("file3"), new File("file4")))
.json(jsonConf)
.loggingLevel(LoggingLevel.DEBUG)
.moduleName("name")
@@ -65,16 +66,24 @@ void executeConstructProcessCommandListTest() throws IOException {
.outputFormat(OutputFormat.JAVADOC)
.pluginConfigurations("name", "{\"json\"}")
.pluginConfigurations(Map.of("{\"name2\"}", "json2", "name3}", "{json3"))
- .pluginsClasspath("path1", "path2")
- .pluginsClasspath(List.of("path3", "path4"))
+ .pluginsClasspath(new File("path1"))
+ .pluginsClasspath("path2")
+ .pluginsClasspath(List.of(new File("path3"), new File("path4")))
.sourceSet(new SourceSet().classpath(
List.of(
new File("examples/foo.jar"),
new File("examples/bar.jar")
)))
- .suppressInheritedMembers(true)
- .executeConstructProcessCommandList();
+ .suppressInheritedMembers(true);
+ assertThat(op.globalLinks()).as("globalLinks").hasSize(2);
+ assertThat(op.globalPackageOptions()).as("globalPackageOptions").hasSize(4);
+ assertThat(op.globalSrcLink()).as("globalSrcLink").hasSize(4);
+ assertThat(op.includes()).as("includes").hasSize(4);
+ assertThat(op.pluginConfigurations()).as("pluginConfigurations").hasSize(3);
+ assertThat(op.pluginsClasspath()).as("pluginsClasspath").hasSize(9);
+
+ var params = op.executeConstructProcessCommandList();
for (var p : args) {
var found = false;
for (var a : params) {
@@ -94,15 +103,17 @@ void executeConstructProcessCommandListTest() throws IOException {
path + "/lib/bld/analysis-kotlin-descriptors-" + dokkaJar + ';' +
path + "/lib/bld/javadoc-plugin-" + dokkaJar + ';' +
path + "/lib/bld/korte-jvm-4.0.10.jar;" +
- path + "/lib/bld/kotlin-as-java-plugin-" + dokkaJar + ";path1;path2;path3;path4",
- "-sourceSet", "-src " + path + "/src/main/kotlin" + " -classpath " + path + "/foo.jar;" + path + "/bar.jar",
+ path + "/lib/bld/kotlin-as-java-plugin-" + dokkaJar + ';' +
+ TestUtil.localPath("path1", "path2", "path3", "path4"),
+ "-sourceSet", "-src " + path + "/src/main/kotlin" + " -classpath " + path + "/foo.jar;"
+ + path + "/bar.jar",
"-outputDir", path + "/build",
"-delayTemplateSubstitution",
"-failOnWarning",
"-globalLinks", "s^link^^s2^link2",
"-globalPackageOptions", "option1;option2;option3;option4",
"-globalSrcLinks_", "link1;link2;link3;link4",
- "-includes", "file1;file2;file3;file4",
+ "-includes", TestUtil.localPath("file1", "file2", "file3", "file4"),
"-loggingLevel", "debug",
"-moduleName", "name",
"-moduleVersion", "1.0",
diff --git a/src/test/java/rife/bld/extension/TestUtil.java b/src/test/java/rife/bld/extension/TestUtil.java
new file mode 100644
index 0000000..b6f9225
--- /dev/null
+++ b/src/test/java/rife/bld/extension/TestUtil.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023-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 rife.bld.extension;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+import static rife.bld.extension.DokkaOperation.SEMICOLON;
+
+@SuppressWarnings("PMD.TestClassWithoutTestCases")
+public final class TestUtil {
+ private TestUtil() {
+ // no-op
+ }
+
+ /**
+ * Returns the local path of the given file names.
+ *
+ * @param fileNames The file names
+ * @return the local path
+ */
+ public static String localPath(String... fileNames) {
+ return Arrays.stream(fileNames).map(it -> new File(it).getAbsolutePath()).collect(Collectors.joining(SEMICOLON));
+ }
+}
diff --git a/src/test/java/rife/bld/extension/SourceSetTest.java b/src/test/java/rife/bld/extension/dokka/SourceSetTest.java
similarity index 61%
rename from src/test/java/rife/bld/extension/SourceSetTest.java
rename to src/test/java/rife/bld/extension/dokka/SourceSetTest.java
index 8413b41..6436385 100644
--- a/src/test/java/rife/bld/extension/SourceSetTest.java
+++ b/src/test/java/rife/bld/extension/dokka/SourceSetTest.java
@@ -14,13 +14,11 @@
* limitations under the License.
*/
-package rife.bld.extension;
+package rife.bld.extension.dokka;
import org.junit.jupiter.api.Test;
-import rife.bld.extension.dokka.AnalysisPlatform;
-import rife.bld.extension.dokka.DocumentedVisibility;
-import rife.bld.extension.dokka.SourceSet;
+import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -29,26 +27,36 @@
import java.util.stream.IntStream;
import static org.assertj.core.api.Assertions.assertThat;
+import static rife.bld.extension.TestUtil.localPath;
class SourceSetTest {
+ public static final String SAMPLES_1 = "samples1";
+ public static final String SAMPLES_2 = "samples2";
+ public static final String SUP_1 = "sup1";
+ public static final String SUP_2 = "sup2";
+
@Test
void sourceSetCollectionsTest() {
var args = new SourceSet()
- .classpath(List.of("path1", "path2"))
+ .classpath(List.of(new File("path1"), new File("path2")))
.dependentSourceSets(Map.of("set1", "set2", "set3", "set4"))
.externalDocumentationLinks(Map.of("link1", "link2", "link3", "link4"))
.perPackageOptions(List.of("option1", "option2"))
- .samples(List.of("samples1", "samples1"))
- .suppressedFiles(List.of("sup1", "sup2"))
+ .samples(List.of(new File(SAMPLES_1)))
+ .samples(new File(SAMPLES_2))
+ .samples("samples3")
+ .suppressedFiles(List.of(new File(SUP_1)))
+ .suppressedFiles(new File(SUP_2))
+ .suppressedFiles("sup3")
.args();
var matches = List.of(
- "-classpath", "path1;path2",
+ "-classpath", localPath("path1", "path2"),
"-dependentSourceSets", "set1/set2;set3/set4",
"-externalDocumentationLinks", "link3^link4^^link1^link2",
"-perPackageOptions", "option1;option2",
- "-samples", "samples1;samples1",
- "-suppressedFiles", "sup1;sup2"
+ "-samples", localPath(SAMPLES_1, SAMPLES_2, "samples3"),
+ "-suppressedFiles", localPath(SUP_1, SUP_2, "sup3")
);
assertThat(args).hasSize(matches.size());
@@ -66,13 +74,17 @@ void sourceSetTest() throws IOException {
var sourceSet = new SourceSet()
.analysisPlatform(AnalysisPlatform.JVM)
.apiVersion("1.0")
- .classpath("classpath1", "classpath2")
+ .classpath("classpath1")
+ .classpath(new File("classpath2"))
.dependentSourceSets("moduleName", "sourceSetName")
+ .dependentSourceSets("moduleName2", "sourceSetName2")
.displayName("name")
.documentedVisibilities(DocumentedVisibility.PACKAGE, DocumentedVisibility.PRIVATE)
.externalDocumentationLinks("url1", "packageListUrl1")
.externalDocumentationLinks("url2", "packageListUrl2")
.includes("includes1", "includes2")
+ .includes(new File("includes3"))
+ .includes(List.of(new File("includes4")))
.jdkVersion(18)
.languageVersion("2.0")
.noJdkLink(true)
@@ -80,13 +92,26 @@ void sourceSetTest() throws IOException {
.noStdlibLink(true)
.perPackageOptions("options1", "options2")
.reportUndocumented(true)
- .samples("samples1", "sample2")
+ .samples(SAMPLES_1, SAMPLES_2)
.skipDeprecated(true)
.sourceSetName("setName")
.src("src1", "src2")
+ .src(new File("src3"))
+ .src(List.of(new File("src4")))
.srcLink("path1", "remote1", "#suffix1")
- .srcLink("path2", "remote2", "#suffix2")
- .suppressedFiles("sup1", "sup2");
+ .srcLink(new File("path2"), "remote2", "#suffix2")
+ .suppressedFiles(SUP_1, SUP_2);
+
+ assertThat(sourceSet.classpath()).as("classpath").hasSize(2);
+ assertThat(sourceSet.dependentSourceSets()).as("dependentSourceSets").hasSize(2);
+ assertThat(sourceSet.documentedVisibilities()).as("documentedVisibilities").hasSize(2);
+ assertThat(sourceSet.externalDocumentationLinks()).as("externalDocumentationLinks").hasSize(2);
+ assertThat(sourceSet.includes()).as("includes").hasSize(4);
+ assertThat(sourceSet.perPackageOptions()).as("perPackageOptions").hasSize(2);
+ assertThat(sourceSet.samples()).as("samples").hasSize(2);
+ assertThat(sourceSet.src()).as("src").hasSize(4);
+ assertThat(sourceSet.srcLinks()).as("srcLinks").hasSize(2);
+ assertThat(sourceSet.suppressedFiles()).as("suppressedFiles").hasSize(2);
var params = sourceSet.args();
@@ -104,31 +129,31 @@ void sourceSetTest() throws IOException {
var matches = List.of(
"-analysisPlatform", "jvm",
"-apiVersion", "1.0",
- "-classpath", "classpath1;classpath2",
- "-dependentSourceSets", "moduleName/sourceSetName",
+ "-classpath", localPath("classpath1", "classpath2"),
+ "-dependentSourceSets", "moduleName/sourceSetName;moduleName2/sourceSetName2",
"-displayName", "name",
"-documentedVisibilities", "package;private",
"-externalDocumentationLinks", "url1^packageListUrl1^^url2^packageListUrl2",
"-jdkVersion", "18",
- "-includes", "includes1;includes2",
+ "-includes", localPath("includes1", "includes2", "includes3", "includes4"),
"-languageVersion", "2.0",
"-noJdkLink", "true",
"-noSkipEmptyPackages", "true",
"-noStdlibLink", "true",
"-reportUndocumented", "true",
"-perPackageOptions", "options1;options2",
- "-samples", "samples1;sample2",
+ "-samples", localPath(SAMPLES_1, SAMPLES_2),
"-skipDeprecated", "true",
- "-src", "src1;src2",
- "-srcLink", "path1=remote1#suffix1;path2=remote2#suffix2",
+ "-src", localPath("src1", "src2", "src3", "src4"),
+ "-srcLink", localPath("path2") + "=remote2#suffix2;path1=remote1#suffix1",
"-sourceSetName", "setName",
- "-suppressedFiles", "sup1;sup2");
+ "-suppressedFiles", localPath(SUP_1, SUP_2));
assertThat(params).hasSize(matches.size());
IntStream.range(0, params.size()).forEach(i -> assertThat(params.get(i)).isEqualTo(matches.get(i)));
- sourceSet.classpath(List.of("classpath1", "classpath2"));
+ sourceSet.classpath(List.of(new File("classpath1"), new File("classpath2")));
IntStream.range(0, params.size()).forEach(i -> assertThat(params.get(i)).isEqualTo(matches.get(i)));
}