From 7345f9b4ac0ef9ebf1ad9fb0d9d6f7f659eb596f Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Thu, 4 Sep 2025 13:45:12 -0500 Subject: [PATCH 1/5] Add Kotlindoc-only publishing and enable for Dataconnect --- .../firebase-dataconnect.gradle.kts | 1 + .../gradle/plugins/BaseFirebaseLibraryPlugin.kt | 1 + .../gradle/plugins/DackkaGenerationTask.kt | 9 +++++++-- .../google/firebase/gradle/plugins/DackkaPlugin.kt | 14 ++++++++++++-- .../gradle/plugins/FirebaseLibraryExtension.kt | 14 ++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/firebase-dataconnect/firebase-dataconnect.gradle.kts b/firebase-dataconnect/firebase-dataconnect.gradle.kts index c4f115bece9..cb83540f353 100644 --- a/firebase-dataconnect/firebase-dataconnect.gradle.kts +++ b/firebase-dataconnect/firebase-dataconnect.gradle.kts @@ -28,6 +28,7 @@ firebaseLibrary { libraryGroup = "dataconnect" testLab.enabled = false publishJavadoc = true + onlyPublishKotlindoc = true releaseNotes { name.set("{{data_connect_short}}") versionName.set("data-connect") diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt index 6411a0953d8..f856f3257a7 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt @@ -56,6 +56,7 @@ abstract class BaseFirebaseLibraryPlugin : Plugin { project.gradle.sharedServices.registerIfAbsent("gmaven") previewMode.convention("") publishJavadoc.convention(true) + onlyPublishKotlindoc.convention(false) artifactId.convention(project.name) groupId.convention(project.provider { project.group.toString() }) libraryGroup.convention(artifactId) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt index 5e6c503ee94..ac2317273b3 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt @@ -98,6 +98,7 @@ data class ExternalDocumentationLink(val packageList: File, val externalLink: St abstract class GenerateDocumentationTask @Inject constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationTaskExtension() { + @get:Input abstract val kotlindocOnly: Property @TaskAction fun build() { @@ -120,7 +121,11 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT "java.lang.Override", ) val annotationsNotToDisplayKotlin = listOf("kotlin.ExtensionFunctionType") - + var javadoc: String? = "android" + if (kotlindocOnly.get()) { + // A null path disables javadoc generation + javadoc = null + } val jsonMap = mapOf( "moduleName" to "", @@ -152,7 +157,7 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT JSONObject( mapOf( "docRootPath" to "/docs/reference/", - "javaDocsPath" to "android", + "javaDocsPath" to javadoc, "kotlinDocsPath" to "kotlin", "projectPath" to "client/${clientName.get()}", "includedHeadTagsPathJava" to diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt index 4a289bebdd5..d7118f3c6d1 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt @@ -123,7 +123,8 @@ abstract class DackkaPlugin : Plugin { // TODO(b/270576405): remove afterEvalutate after fixed project.afterEvaluate { if (weShouldPublish(this)) { - val generateDocumentation = registerGenerateDackkaDocumentationTask(project) + val kdocOnly = publishKotlindocOnly(this) + val generateDocumentation = registerGenerateDackkaDocumentationTask(project, kdocOnly) val outputDir = generateDocumentation.flatMap { it.outputDirectory } @@ -153,6 +154,14 @@ abstract class DackkaPlugin : Plugin { */ private fun weShouldPublish(project: Project) = project.firebaseLibrary.publishJavadoc.get() + /** + * Checks if the [Project] should only release Kotlindocs + * + * This is done via the [FirebaseLibraryExtension.onlyPublishKotlindoc] property. + */ + private fun publishKotlindocOnly(project: Project) = + project.firebaseLibrary.onlyPublishKotlindoc.get() + /** * Applies common configuration to the [javadocConfig], that is otherwise not present. * @@ -168,9 +177,10 @@ abstract class DackkaPlugin : Plugin { } private fun registerGenerateDackkaDocumentationTask( - project: Project + project: Project, kotlindocOnly: Boolean ): TaskProvider = project.tasks.register("generateDackkaDocumentation") { + this.kotlindocOnly.set(kotlindocOnly) with(project.extensions.getByType()) { libraryVariants.all { if (name == "release") { diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt index ecc69e0e5a4..9f9e005d5a2 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt @@ -69,6 +69,20 @@ constructor(val project: Project, val type: LibraryType) { */ abstract val publishJavadoc: Property + /** + * Only publish Kotlindocs instead of also publishing Javadocs for this library. + * + * Defaults to `false`. + * + * ```sh + * ./gradlew :firebase-common:kotlindoc + * ``` + * + * @see [FirebaseLibraryExtension] + * @see publishJavadoc + */ + abstract val onlyPublishKotlindoc: Property + /** * Indicates the library is in a preview mode (such as `alpha` or `beta`). * From a6dae0cef53b61c9ac1262d9d455dcbd4863a6b6 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Thu, 4 Sep 2025 15:21:34 -0500 Subject: [PATCH 2/5] Fixes --- .../google/firebase/gradle/plugins/DackkaGenerationTask.kt | 7 ++----- .../firebase/gradle/plugins/FirebaseLibraryExtension.kt | 2 ++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt index ac2317273b3..34ea722d41b 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt @@ -121,11 +121,8 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT "java.lang.Override", ) val annotationsNotToDisplayKotlin = listOf("kotlin.ExtensionFunctionType") - var javadoc: String? = "android" - if (kotlindocOnly.get()) { - // A null path disables javadoc generation - javadoc = null - } + // A null path disables javadoc generation + val javadoc: String? = "android".takeUnless { kotlindocOnly.get() } val jsonMap = mapOf( "moduleName" to "", diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt index 9f9e005d5a2..d005752282c 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryExtension.kt @@ -72,6 +72,8 @@ constructor(val project: Project, val type: LibraryType) { /** * Only publish Kotlindocs instead of also publishing Javadocs for this library. * + * This property is only effective when `publishJavadoc` is `true`. + * * Defaults to `false`. * * ```sh From 38ec799351aba667eb11b4bdeea852c010a4016a Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Thu, 4 Sep 2025 15:46:14 -0500 Subject: [PATCH 3/5] Format --- .../java/com/google/firebase/gradle/plugins/DackkaPlugin.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt index d7118f3c6d1..af6dd8081a4 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt @@ -124,7 +124,9 @@ abstract class DackkaPlugin : Plugin { project.afterEvaluate { if (weShouldPublish(this)) { val kdocOnly = publishKotlindocOnly(this) - val generateDocumentation = registerGenerateDackkaDocumentationTask(project, kdocOnly) + val generateDocumentation = registerGenerateDackkaDocumentationTask( + project, kdocOnly + ) val outputDir = generateDocumentation.flatMap { it.outputDirectory } From 0eaec9371cf46076945fddefe360cde8074e4145 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Thu, 4 Sep 2025 16:28:18 -0500 Subject: [PATCH 4/5] Format --- .../com/google/firebase/gradle/plugins/DackkaPlugin.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt index af6dd8081a4..55b70f5b79f 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt @@ -124,9 +124,7 @@ abstract class DackkaPlugin : Plugin { project.afterEvaluate { if (weShouldPublish(this)) { val kdocOnly = publishKotlindocOnly(this) - val generateDocumentation = registerGenerateDackkaDocumentationTask( - project, kdocOnly - ) + val generateDocumentation = registerGenerateDackkaDocumentationTask(project, kdocOnly) val outputDir = generateDocumentation.flatMap { it.outputDirectory } @@ -179,7 +177,8 @@ abstract class DackkaPlugin : Plugin { } private fun registerGenerateDackkaDocumentationTask( - project: Project, kotlindocOnly: Boolean + project: Project, + kotlindocOnly: Boolean, ): TaskProvider = project.tasks.register("generateDackkaDocumentation") { this.kotlindocOnly.set(kotlindocOnly) From e845dac8ff2694b395a1ba28881986928549453d Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Fri, 5 Sep 2025 12:03:40 -0500 Subject: [PATCH 5/5] Remove argument configuration --- .../gradle/plugins/DackkaGenerationTask.kt | 14 +++++++++++--- .../firebase/gradle/plugins/DackkaPlugin.kt | 15 ++------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt index 34ea722d41b..e5931ab82d3 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaGenerationTask.kt @@ -19,6 +19,7 @@ package com.google.firebase.gradle.plugins import java.io.File import javax.inject.Inject import org.gradle.api.DefaultTask +import org.gradle.api.Project import org.gradle.api.file.FileCollection import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.ListProperty @@ -98,7 +99,6 @@ data class ExternalDocumentationLink(val packageList: File, val externalLink: St abstract class GenerateDocumentationTask @Inject constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationTaskExtension() { - @get:Input abstract val kotlindocOnly: Property @TaskAction fun build() { @@ -122,7 +122,7 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT ) val annotationsNotToDisplayKotlin = listOf("kotlin.ExtensionFunctionType") // A null path disables javadoc generation - val javadoc: String? = "android".takeUnless { kotlindocOnly.get() } + val javadocPath: String? = "android".takeUnless { publishKotlindocOnly(project) } val jsonMap = mapOf( "moduleName" to "", @@ -154,7 +154,7 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT JSONObject( mapOf( "docRootPath" to "/docs/reference/", - "javaDocsPath" to javadoc, + "javaDocsPath" to javadocPath, "kotlinDocsPath" to "kotlin", "projectPath" to "client/${clientName.get()}", "includedHeadTagsPathJava" to @@ -173,6 +173,14 @@ constructor(private val workerExecutor: WorkerExecutor) : GenerateDocumentationT return JSONObject(jsonMap) } + /** + * Checks if the [Project] should only release Kotlindocs + * + * This is done via the [FirebaseLibraryExtension.onlyPublishKotlindoc] property. + */ + private fun publishKotlindocOnly(project: Project) = + project.firebaseLibrary.onlyPublishKotlindoc.get() + private fun createExternalLinks( packageLists: ListProperty ): List { diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt index 55b70f5b79f..4a289bebdd5 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/DackkaPlugin.kt @@ -123,8 +123,7 @@ abstract class DackkaPlugin : Plugin { // TODO(b/270576405): remove afterEvalutate after fixed project.afterEvaluate { if (weShouldPublish(this)) { - val kdocOnly = publishKotlindocOnly(this) - val generateDocumentation = registerGenerateDackkaDocumentationTask(project, kdocOnly) + val generateDocumentation = registerGenerateDackkaDocumentationTask(project) val outputDir = generateDocumentation.flatMap { it.outputDirectory } @@ -154,14 +153,6 @@ abstract class DackkaPlugin : Plugin { */ private fun weShouldPublish(project: Project) = project.firebaseLibrary.publishJavadoc.get() - /** - * Checks if the [Project] should only release Kotlindocs - * - * This is done via the [FirebaseLibraryExtension.onlyPublishKotlindoc] property. - */ - private fun publishKotlindocOnly(project: Project) = - project.firebaseLibrary.onlyPublishKotlindoc.get() - /** * Applies common configuration to the [javadocConfig], that is otherwise not present. * @@ -177,11 +168,9 @@ abstract class DackkaPlugin : Plugin { } private fun registerGenerateDackkaDocumentationTask( - project: Project, - kotlindocOnly: Boolean, + project: Project ): TaskProvider = project.tasks.register("generateDackkaDocumentation") { - this.kotlindocOnly.set(kotlindocOnly) with(project.extensions.getByType()) { libraryVariants.all { if (name == "release") {