Skip to content

Commit 0d3b9bd

Browse files
authored
Merge pull request #124 from cloudflightio/cg/make-task-properties-completely-lazy
Make task properties completely lazy and move the default values to the conventions of the extension properties.
2 parents fff1285 + 05f50a8 commit 0d3b9bd

File tree

3 files changed

+36
-18
lines changed

3 files changed

+36
-18
lines changed

src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt

+10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.springdoc.openapi.gradle.plugin
33
import org.gradle.api.Action
44
import org.gradle.api.file.ConfigurableFileCollection
55
import org.gradle.api.file.DirectoryProperty
6+
import org.gradle.api.file.ProjectLayout
67
import org.gradle.api.model.ObjectFactory
78
import org.gradle.api.provider.ListProperty
89
import org.gradle.api.provider.MapProperty
@@ -11,6 +12,7 @@ import javax.inject.Inject
1112

1213
open class OpenApiExtension @Inject constructor(
1314
objects: ObjectFactory,
15+
layout: ProjectLayout
1416
) {
1517
val apiDocsUrl: Property<String> = objects.property(String::class.java)
1618
val outputFileName: Property<String> = objects.property(String::class.java)
@@ -21,6 +23,14 @@ open class OpenApiExtension @Inject constructor(
2123
val customBootRun: CustomBootRunAction =
2224
objects.newInstance(CustomBootRunAction::class.java)
2325

26+
init {
27+
apiDocsUrl.convention(DEFAULT_API_DOCS_URL)
28+
outputFileName.convention(DEFAULT_OPEN_API_FILE_NAME)
29+
outputDir.convention(layout.buildDirectory)
30+
waitTimeInSeconds.convention(DEFAULT_WAIT_TIME_IN_SECONDS)
31+
groupedApiMappings.convention(emptyMap())
32+
}
33+
2434
fun customBootRun(action: Action<CustomBootRunAction>) {
2535
action.execute(customBootRun)
2636
}

src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGeneratorTask.kt

+5-18
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import java.net.HttpURLConnection
2323
import java.net.URL
2424
import java.time.Duration
2525
import java.time.temporal.ChronoUnit.SECONDS
26-
import java.util.*
2726

2827
private const val MAX_HTTP_STATUS_CODE = 299
2928

@@ -50,23 +49,11 @@ open class OpenApiGeneratorTask : DefaultTask() {
5049
val extension: OpenApiExtension =
5150
project.extensions.getByName(EXTENSION_NAME) as OpenApiExtension
5251

53-
// set a default value if not provided
54-
val defaultOutputDir = project.objects.directoryProperty()
55-
defaultOutputDir.set(project.buildDir)
56-
57-
apiDocsUrl.convention(extension.apiDocsUrl.getOrElse(DEFAULT_API_DOCS_URL))
58-
outputFileName.convention(
59-
extension.outputFileName.getOrElse(
60-
DEFAULT_OPEN_API_FILE_NAME
61-
)
62-
)
63-
groupedApiMappings.convention(extension.groupedApiMappings.getOrElse(emptyMap()))
64-
outputDir.convention(extension.outputDir.getOrElse(defaultOutputDir.get()))
65-
waitTimeInSeconds.convention(
66-
extension.waitTimeInSeconds.getOrElse(
67-
DEFAULT_WAIT_TIME_IN_SECONDS
68-
)
69-
)
52+
apiDocsUrl.convention(extension.apiDocsUrl)
53+
outputFileName.convention(extension.outputFileName)
54+
groupedApiMappings.convention(extension.groupedApiMappings)
55+
outputDir.convention(extension.outputDir)
56+
waitTimeInSeconds.convention(extension.waitTimeInSeconds)
7057
}
7158

7259
@TaskAction

src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt

+21
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,27 @@ class OpenApiGradlePluginTest {
102102
assertOpenApiJsonFile(1, specialOutputJsonFileName)
103103
}
104104

105+
@Test
106+
fun `accessing the task does not break later configuration`() {
107+
val specialOutputDir = File(projectTestDir, "specialDir")
108+
specialOutputDir.mkdirs()
109+
110+
buildFile.writeText(
111+
"""$baseBuildGradle
112+
tasks.withType(org.springdoc.openapi.gradle.plugin.OpenApiGeneratorTask.class) {
113+
dependsOn("clean")
114+
}
115+
116+
openApi{
117+
outputDir = file("${specialOutputDir.toURI().path}")
118+
}
119+
""".trimMargin()
120+
)
121+
122+
assertEquals(TaskOutcome.SUCCESS, openApiDocsTask(runTheBuild()).outcome)
123+
assertOpenApiJsonFile(1, buildDir = specialOutputDir)
124+
}
125+
105126
@Test
106127
fun `using properties`() {
107128
buildFile.writeText(

0 commit comments

Comments
 (0)