@@ -5,9 +5,11 @@ import com.android.build.gradle.LibraryExtension
5
5
import java.io.File
6
6
import org.gradle.api.Plugin
7
7
import org.gradle.api.Project
8
+ import org.gradle.api.Task
8
9
import org.gradle.api.provider.Provider
9
10
import org.gradle.api.tasks.Copy
10
11
import org.gradle.api.tasks.Delete
12
+ import org.gradle.api.tasks.TaskProvider
11
13
import org.gradle.kotlin.dsl.getByType
12
14
import org.gradle.kotlin.dsl.register
13
15
@@ -90,8 +92,9 @@ tasks above). While we do not currently offer any configuration for the Dackka
90
92
plugin, this could change in the future as needed. Currently, the DackkaPlugin
91
93
provides sensible defaults to output directories, package lists, and so forth.
92
94
93
- The DackkaPlugin also provides three extra tasks:
95
+ The DackkaPlugin also provides four extra tasks:
94
96
[cleanDackkaDocumentation][registerCleanDackkaDocumentation],
97
+ [separateJavadocAndKotlinDoc][registerSeparateJavadocAndKotlinDoc]
95
98
[copyJavaDocToCommonDirectory][registerCopyJavaDocToCommonDirectoryTask] and
96
99
[copyKotlinDocToCommonDirectory][registerCopyKotlinDocToCommonDirectoryTask].
97
100
@@ -100,6 +103,9 @@ the output of Dackka. This is useful when testing Dackka outputs itself- and
100
103
shouldn't be apart of the normal flow. The reasoning is that it would otherwise
101
104
invalidate the gradle cache.
102
105
106
+ _separateJavadocAndKotlinDoc_ copies the Javadoc and Kotlindoc directories from Dackka into
107
+ their own subdirectories- for easy and consistent differentiation.
108
+
103
109
_copyJavaDocToCommonDirectory_ copies the JavaDoc variant of the Dackka output for each sdk,
104
110
and pastes it in a common directory under the root project's build directory. This makes it easier
105
111
to zip the doc files for staging.
@@ -119,24 +125,30 @@ abstract class DackkaPlugin : Plugin<Project> {
119
125
registerCleanDackkaDocumentation(project)
120
126
project.afterEvaluate {
121
127
if (shouldWePublish(project)) {
122
- val generateDocumentation = registerGenerateDackkaDocumentationTask(project)
123
- val dackkaFilesDirectory = generateDocumentation.flatMap { it.outputDirectory }
124
- val firesiteTransform = registerFiresiteTransformTask(project, dackkaFilesDirectory)
125
- val transformedFilesDirectory = firesiteTransform.flatMap { it.outputDirectory }
126
- val copyJavaDocToCommonDirectory = registerCopyJavaDocToCommonDirectoryTask(project, transformedFilesDirectory)
127
- val copyKotlinDocToCommonDirectory = registerCopyKotlinDocToCommonDirectoryTask(project, transformedFilesDirectory)
128
+ val dackkaOutputDirectory = project.provider { fileFromBuildDir(" dackkaRawOutput" ) }
129
+ val separatedFilesDirectory = project.provider { fileFromBuildDir(" dackkaSeparatedFiles" ) }
130
+ val transformedDackkaFilesDirectory = project.provider { fileFromBuildDir(" dackkaTransformedFiles" ) }
131
+
132
+ val generateDocumentation = registerGenerateDackkaDocumentationTask(project, dackkaOutputDirectory)
133
+ val separateJavadocAndKotlinDoc = registerSeparateJavadocAndKotlinDoc(project, dackkaOutputDirectory, separatedFilesDirectory)
134
+ val firesiteTransform = registerFiresiteTransformTask(project, separatedFilesDirectory, transformedDackkaFilesDirectory)
135
+ val copyJavaDocToCommonDirectory = registerCopyJavaDocToCommonDirectoryTask(project, transformedDackkaFilesDirectory)
136
+ val copyKotlinDocToCommonDirectory = registerCopyKotlinDocToCommonDirectoryTask(project, transformedDackkaFilesDirectory)
128
137
129
138
project.tasks.register(" kotlindoc" ) {
130
139
group = " documentation"
131
140
dependsOn(
132
141
generateDocumentation,
142
+ separateJavadocAndKotlinDoc,
133
143
firesiteTransform,
134
144
copyJavaDocToCommonDirectory,
135
145
copyKotlinDocToCommonDirectory
136
146
)
137
147
}
138
148
} else {
139
- project.tasks.register(" kotlindoc" )
149
+ project.tasks.register(" kotlindoc" ) {
150
+ group = " documentation"
151
+ }
140
152
}
141
153
}
142
154
}
@@ -158,7 +170,10 @@ abstract class DackkaPlugin : Plugin<Project> {
158
170
}
159
171
160
172
// TODO(b/243324828): Refactor when fixed, so we no longer need stubs
161
- private fun registerGenerateDackkaDocumentationTask (project : Project ): Provider <GenerateDocumentationTask > {
173
+ private fun registerGenerateDackkaDocumentationTask (
174
+ project : Project ,
175
+ targetDirectory : Provider <File >
176
+ ): Provider <GenerateDocumentationTask > {
162
177
val docStubs = project.tasks.register<GenerateStubsTask >(" docStubsForDackkaInput" )
163
178
val docsTask = project.tasks.register<GenerateDocumentationTask >(" generateDackkaDocumentation" )
164
179
with (project.extensions.getByType<LibraryExtension >()) {
@@ -194,6 +209,8 @@ abstract class DackkaPlugin : Plugin<Project> {
194
209
kotlinSources.set(sourcesForKotlin)
195
210
dependencies.set(classpath)
196
211
212
+ outputDirectory.set(targetDirectory)
213
+
197
214
applyCommonConfigurations()
198
215
}
199
216
}
@@ -232,20 +249,72 @@ abstract class DackkaPlugin : Plugin<Project> {
232
249
dependsOnAndMustRunAfter(" createFullJarRelease" )
233
250
234
251
val dackkaFile = project.provider { project.dackkaConfig.singleFile }
235
- val dackkaOutputDirectory = File (project.buildDir, " dackkaDocumentation" )
236
252
237
253
dackkaJarFile.set(dackkaFile)
238
- outputDirectory.set(dackkaOutputDirectory)
239
254
clientName.set(project.firebaseConfigValue { artifactId })
240
255
}
241
256
242
- private fun registerFiresiteTransformTask (project : Project , dackkaFilesDirectory : Provider <File >) =
243
- project.tasks.register<FiresiteTransformTask >(" firesiteTransform" ) {
244
- mustRunAfter(" generateDackkaDocumentation" )
257
+ // TODO(b/248302613): Remove when dackka exposes configuration for this
258
+ private fun registerSeparateJavadocAndKotlinDoc (
259
+ project : Project ,
260
+ dackkaOutputDirectory : Provider <File >,
261
+ outputDirectory : Provider <File >
262
+ ): TaskProvider <Task > {
263
+ val outputJavadocFolder = project.childFile(outputDirectory, " android" )
264
+ val outputKotlindocFolder = project.childFile(outputDirectory, " kotlin" )
265
+
266
+ val separateJavadoc = project.tasks.register<Copy >(" separateJavadoc" ) {
267
+ dependsOn(" generateDackkaDocumentation" )
268
+
269
+ val javadocClientFolder = project.childFile(dackkaOutputDirectory, " reference/client" )
270
+ val javadocComFolder = project.childFile(dackkaOutputDirectory, " reference/com" )
271
+
272
+ fromDirectory(javadocClientFolder)
273
+ fromDirectory(javadocComFolder)
274
+
275
+ into(outputJavadocFolder)
276
+ }
277
+
278
+ val separateKotlindoc = project.tasks.register<Copy >(" separateKotlindoc" ) {
279
+ dependsOn(" generateDackkaDocumentation" )
280
+
281
+ val kotlindocFolder = project.childFile(dackkaOutputDirectory, " reference/kotlin" )
282
+
283
+ from(kotlindocFolder)
284
+
285
+ into(outputKotlindocFolder)
286
+ }
287
+
288
+ return project.tasks.register(" separateJavadocAndKotlinDoc" ) {
289
+ dependsOn(separateJavadoc, separateKotlindoc)
290
+ }
291
+ }
292
+
293
+ private fun registerFiresiteTransformTask (
294
+ project : Project ,
295
+ separatedFilesDirectory : Provider <File >,
296
+ targetDirectory : Provider <File >
297
+ ): TaskProvider <Task > {
298
+ val transformJavadoc = project.tasks.register<FiresiteTransformTask >(" firesiteTransformJavadoc" ) {
299
+ dependsOnAndMustRunAfter(" separateJavadoc" )
300
+
301
+ referenceHeadTagsPath.set(" docs/reference/android" )
302
+ dackkaFiles.set(project.childFile(separatedFilesDirectory, " android" ))
303
+ outputDirectory.set(project.childFile(targetDirectory, " android" ))
304
+ }
305
+
306
+ val transformKotlindoc = project.tasks.register<FiresiteTransformTask >(" firesiteTransformKotlindoc" ) {
307
+ dependsOnAndMustRunAfter(" separateKotlindoc" )
308
+
309
+ referenceHeadTagsPath.set(" docs/reference/kotlin" )
310
+ dackkaFiles.set(project.childFile(separatedFilesDirectory, " kotlin" ))
311
+ outputDirectory.set(project.childFile(targetDirectory, " kotlin" ))
312
+ }
245
313
246
- dackkaFiles.set(dackkaFilesDirectory)
247
- outputDirectory.set(project.file( " ${project.buildDir} /dackkaTransformedFiles " ) )
314
+ return project.tasks.register( " firesiteTransform " ) {
315
+ dependsOn(transformJavadoc, transformKotlindoc )
248
316
}
317
+ }
249
318
250
319
// TODO(b/246593212): Migrate doc files to single directory
251
320
private fun registerCopyJavaDocToCommonDirectoryTask (project : Project , outputDirectory : Provider <File >) =
@@ -258,12 +327,10 @@ abstract class DackkaPlugin : Plugin<Project> {
258
327
if (project.rootProject.findProperty(" dackkaJavadoc" ) == " true" ) {
259
328
mustRunAfter(" firesiteTransform" )
260
329
261
- val outputFolder = project.file(" ${project.rootProject.buildDir} /firebase-kotlindoc/android" )
262
- val clientFolder = outputDirectory.map { project.file(" ${it.path} /reference/client" ) }
263
- val comFolder = outputDirectory.map { project.file(" ${it.path} /reference/com" ) }
330
+ val outputFolder = project.rootProject.fileFromBuildDir(" firebase-kotlindoc/android" )
331
+ val javaFolder = project.childFile(outputDirectory, " android" )
264
332
265
- fromDirectory(clientFolder)
266
- fromDirectory(comFolder)
333
+ fromDirectory(javaFolder)
267
334
268
335
into(outputFolder)
269
336
}
@@ -274,8 +341,8 @@ abstract class DackkaPlugin : Plugin<Project> {
274
341
project.tasks.register<Copy >(" copyKotlinDocToCommonDirectory" ) {
275
342
mustRunAfter(" firesiteTransform" )
276
343
277
- val outputFolder = project.file( " ${project. rootProject.buildDir} / firebase-kotlindoc" )
278
- val kotlinFolder = outputDirectory.map { project.file( " ${it.path} /reference/ kotlin" ) }
344
+ val outputFolder = project.rootProject.fileFromBuildDir( " firebase-kotlindoc" )
345
+ val kotlinFolder = project.childFile(outputDirectory, " kotlin" )
279
346
280
347
fromDirectory(kotlinFolder)
281
348
@@ -287,8 +354,9 @@ abstract class DackkaPlugin : Plugin<Project> {
287
354
project.tasks.register<Delete >(" cleanDackkaDocumentation" ) {
288
355
group = " cleanup"
289
356
290
- delete(" ${project.buildDir} /dackkaDocumentation" )
291
- delete(" ${project.buildDir} /dackkaTransformedFiles" )
292
- delete(" ${project.rootProject.buildDir} /firebase-kotlindoc" )
357
+ val outputDirs = listOf (" dackkaRawOutput" , " dackkaSeparatedFiles" , " dackkaTransformedFiles" )
358
+
359
+ delete(outputDirs.map { project.fileFromBuildDir(it) })
360
+ delete(project.rootProject.fileFromBuildDir(" firebase-kotlindoc" ))
293
361
}
294
362
}
0 commit comments