aboutsummaryrefslogtreecommitdiff
path: root/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src
diff options
context:
space:
mode:
authorAdam <897017+aSemy@users.noreply.github.com>2023-10-20 00:39:12 +1300
committerGitHub <noreply@github.com>2023-10-19 13:39:12 +0200
commit35d15601f2d129a7d3db67dd9e2f4c41c87ef083 (patch)
treef9098cb5b79fc31b4a393347f5cebcf9d87dd139 /dokka-runners/dokkatoo/modules/dokkatoo-plugin/src
parent8016c1face1283952e228aee348487bf0421ab90 (diff)
downloaddokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.tar.gz
dokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.tar.bz2
dokka-35d15601f2d129a7d3db67dd9e2f4c41c87ef083.zip
Contribute Dokkatoo (#3188)
Diffstat (limited to 'dokka-runners/dokkatoo/modules/dokkatoo-plugin/src')
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt355
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooExtension.kt130
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooPlugin.kt32
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/adapters/DokkatooAndroidAdapter.kt214
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/adapters/DokkatooJavaAdapter.kt40
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/adapters/DokkatooKotlinAdapter.kt459
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/distributions/DokkatooConfigurationAttributes.kt59
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/DokkaPublication.kt122
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaExternalDocumentationLinkSpec.kt120
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaGeneratorParametersSpec.kt93
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaModuleDescriptionSpec.kt49
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaPackageOptionsSpec.kt84
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaParametersKxs.kt78
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceLinkSpec.kt106
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceSetIdSpec.kt61
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/DokkaSourceSetSpec.kt366
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/HasConfigurableVisibilityModifiers.kt14
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/KotlinPlatform.kt54
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/VisibilityModifier.kt42
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/builders/DokkaModuleDescriptionBuilder.kt33
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/builders/DokkaParametersBuilder.kt77
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/parameters/builders/DokkaSourceSetBuilder.kt112
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/plugins/DokkaHtmlPluginParameters.kt129
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/plugins/DokkaPluginParametersBaseSpec.kt32
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/plugins/DokkaPluginParametersBuilder.kt232
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/dokka/plugins/DokkaVersioningPluginParameters.kt101
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooFormatDependencyContainers.kt152
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooFormatPlugin.kt174
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooFormatTasks.kt105
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooGfmPlugin.kt14
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooHtmlPlugin.kt72
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooJavadocPlugin.kt14
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/formats/DokkatooJekyllPlugin.kt14
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/DokkatooInternalApi.kt37
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/LoggerAdapter.kt65
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/collectionsUtils.kt7
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/gradleExtensionAccessors.kt9
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/gradleTypealiases.kt20
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/gradleUtils.kt187
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/kotlinxSerializationUtils.kt36
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/stringUtils.kt11
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/internal/uriUtils.kt9
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooGenerateTask.kt187
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooPrepareModuleDescriptorTask.kt62
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/tasks/DokkatooTask.kt22
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/tasks/LogHtmlPublicationLinkTask.kt156
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/workers/DokkaGeneratorWorker.kt77
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/DokkatooPluginTest.kt76
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/DokkaExternalDocumentationLinkSpecTest.kt102
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/DokkaSourceLinkSpecTest.kt58
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/KotlinPlatformTest.kt37
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/VisibilityModifierTest.kt17
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/builders/DokkaModuleDescriptionBuilderTest.kt7
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/builders/DokkaParametersBuilderTest.kt7
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/test/kotlin/dokka/parameters/builders/DokkaSourceSetBuilderTest.kt198
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/GradleTestKitUtils.kt274
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/KotestProjectConfig.kt10
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/fileTree.kt61
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/files.kt6
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/gradleRunnerUtils.kt47
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/kotestCollectionMatchers.kt20
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/kotestConditions.kt10
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/kotestGradleAssertions.kt130
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/kotestStringMatchers.kt65
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/samWithReceiverWorkarounds.kt77
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/stringUtils.kt21
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/systemVariableProviders.kt40
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFixtures/kotlin/text.kt24
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFunctional/kotlin/DokkatooPluginFunctionalTest.kt205
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFunctional/kotlin/GradlePluginProjectIntegrationTest.kt110
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFunctional/kotlin/KotlinMultiplatformFunctionalTest.kt247
-rw-r--r--dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/testFunctional/kotlin/MultiModuleFunctionalTest.kt468
72 files changed, 6941 insertions, 0 deletions
diff --git a/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt b/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt
new file mode 100644
index 00000000..9d67471a
--- /dev/null
+++ b/dokka-runners/dokkatoo/modules/dokkatoo-plugin/src/main/kotlin/DokkatooBasePlugin.kt
@@ -0,0 +1,355 @@
+package org.jetbrains.dokka.dokkatoo
+
+import org.jetbrains.dokka.dokkatoo.distributions.DokkatooConfigurationAttributes
+import org.jetbrains.dokka.dokkatoo.distributions.DokkatooConfigurationAttributes.Companion.DOKKATOO_BASE_ATTRIBUTE
+import org.jetbrains.dokka.dokkatoo.distributions.DokkatooConfigurationAttributes.Companion.DOKKATOO_CATEGORY_ATTRIBUTE
+import org.jetbrains.dokka.dokkatoo.distributions.DokkatooConfigurationAttributes.Companion.DOKKA_FORMAT_ATTRIBUTE
+import org.jetbrains.dokka.dokkatoo.dokka.parameters.DokkaSourceSetSpec
+import org.jetbrains.dokka.dokkatoo.dokka.parameters.KotlinPlatform
+import org.jetbrains.dokka.dokkatoo.dokka.parameters.VisibilityModifier
+import org.jetbrains.dokka.dokkatoo.internal.*
+import org.jetbrains.dokka.dokkatoo.tasks.DokkatooGenerateTask
+import org.jetbrains.dokka.dokkatoo.tasks.DokkatooPrepareModuleDescriptorTask
+import org.jetbrains.dokka.dokkatoo.tasks.DokkatooTask
+import java.io.File
+import javax.inject.Inject
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.json.Json
+import org.gradle.api.NamedDomainObjectContainer
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
+import org.gradle.api.file.ProjectLayout
+import org.gradle.api.file.RegularFileProperty
+import org.gradle.api.model.ObjectFactory
+import org.gradle.api.provider.Property
+import org.gradle.api.provider.Provider
+import org.gradle.api.provider.ProviderFactory
+import org.gradle.api.tasks.TaskContainer
+import org.gradle.kotlin.dsl.*
+import org.gradle.language.base.plugins.LifecycleBasePlugin
+
+/**
+ * The base plugin for Dokkatoo. Sets up Dokkatoo and configures default values, but does not
+ * add any specific config (specifically, it does not create Dokka Publications).
+ */
+abstract class DokkatooBasePlugin
+@DokkatooInternalApi
+@Inject
+constructor(
+ private val providers: ProviderFactory,
+ private val layout: ProjectLayout,
+ private val objects: ObjectFactory,
+) : Plugin<Project> {
+
+ override fun apply(target: Project) {
+ // apply the lifecycle-base plugin so the clean task is available
+ target.pluginManager.apply(LifecycleBasePlugin::class)
+
+ val dokkatooExtension = createExtension(target)
+
+ target.tasks.createDokkaLifecycleTasks()
+
+ val configurationAttributes = objects.newInstance<DokkatooConfigurationAttributes>()
+
+ target.dependencies.attributesSchema {
+ attribute(DOKKATOO_BASE_ATTRIBUTE)
+ attribute(DOKKATOO_CATEGORY_ATTRIBUTE)
+ attribute(DOKKA_FORMAT_ATTRIBUTE)
+ }
+
+ target.configurations.register(dependencyContainerNames.dokkatoo) {
+ description = "Fetch all Dokkatoo files from all configurations in other subprojects"
+ asConsumer()
+ isVisible = false
+ attributes {
+ attribute(DOKKATOO_BASE_ATTRIBUTE, configurationAttributes.dokkatooBaseUsage)
+ }
+ }
+
+ configureDokkaPublicationsDefaults(dokkatooExtension)
+ dokkatooExtension.dokkatooSourceSets.configureDefaults(
+ sourceSetScopeConvention = dokkatooExtension.sourceSetScopeDefault
+ )
+
+ target.tasks.withType<DokkatooGenerateTask>().configureEach {
+ cacheDirectory.convention(dokkatooExtension.dokkatooCacheDirectory)
+ workerDebugEnabled.convention(false)
+ workerLogFile.convention(temporaryDir.resolve("dokka-worker.log"))
+ workerJvmArgs.set(
+ listOf(
+ //"-XX:MaxMetaspaceSize=512m",
+ "-XX:+HeapDumpOnOutOfMemoryError",
+ "-XX:+AlwaysPreTouch", // https://github.com/gradle/gradle/issues/3093#issuecomment-387259298
+ //"-XX:StartFlightRecording=disk=true,name={path.drop(1).map { if (it.isLetterOrDigit()) it else '-' }.joinToString("")},dumponexit=true,duration=30s",
+ //"-XX:FlightRecorderOptions=repository=$baseDir/jfr,stackdepth=512",
+ )
+ )
+ dokkaConfigurationJsonFile.convention(temporaryDir.resolve("dokka-configuration.json"))
+ }
+
+ target.tasks.withType<DokkatooPrepareModuleDescriptorTask>().configureEach {
+ moduleName.convention(dokkatooExtension.moduleName)
+ includes.from(providers.provider { dokkatooExtension.dokkatooSourceSets.flatMap { it.includes } })
+ modulePath.convention(dokkatooExtension.modulePath)
+ }
+
+ target.tasks.withType<DokkatooGenerateTask>().configureEach {
+
+ publicationEnabled.convention(true)
+ onlyIf("publication must be enabled") { publicationEnabled.getOrElse(true) }
+
+ generator.dokkaSourceSets.addAllLater(
+ providers.provider {
+ // exclude suppressed source sets as early as possible, to avoid unnecessary dependency resolution
+ dokkatooExtension.dokkatooSourceSets.filterNot { it.suppress.get() }
+ }
+ )
+
+ generator.dokkaSourceSets.configureDefaults(
+ sourceSetScopeConvention = dokkatooExtension.sourceSetScopeDefault
+ )
+ }
+
+ dokkatooExtension.dokkatooSourceSets.configureDefaults(
+ sourceSetScopeConvention = dokkatooExtension.sourceSetScopeDefault
+ )
+ }
+
+ private fun createExtension(project: Project): DokkatooExtension {
+ val dokkatooExtension = project.extensions.create<DokkatooExtension>(EXTENSION_NAME).apply {
+ moduleName.convention(providers.provider { project.name })
+ moduleVersion.convention(providers.provider { project.version.toString() })
+ modulePath.convention(project.pathAsFilePath())
+ konanHome.convention(
+ providers
+ .provider {
+ // konanHome is set into in extraProperties:
+ // https://github.com/JetBrains/kotlin/blob/v1.9.0/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetPreset.kt#L35-L38
+ project.extensions.extraProperties.get("konanHome") as? String?
+ }
+ .map { File(it) }
+ )
+
+ sourceSetScopeDefault.convention(project.path)
+ dokkatooPublicationDirectory.convention(layout.buildDirectory.dir("dokka"))
+ dokkatooModuleDirectory.convention(layout.buildDirectory.dir("dokka-module"))
+ dokkatooConfigurationsDirectory.convention(layout.buildDirectory.dir("dokka-config"))
+ }
+
+ dokkatooExtension.versions {
+ jetbrainsDokka.convention(DokkatooConstants.DOKKA_VERSION)
+ jetbrainsMarkdown.convention("0.3.1")
+ freemarker.convention("2.3.31")
+ kotlinxHtml.convention("0.8.0")
+ kotlinxCoroutines.convention("1.6.4")
+ }
+
+ return dokkatooExtension
+ }
+
+ /** Set defaults in all [DokkatooExtension.dokkatooPublications]s */
+ private fun configureDokkaPublicationsDefaults(
+ dokkatooExtension: DokkatooExtension,
+ ) {
+ dokkatooExtension.dokkatooPublications.all {
+ enabled.convention(true)
+ cacheRoot.convention(dokkatooExtension.dokkatooCacheDirectory)
+ delayTemplateSubstitution.convention(false)
+ failOnWarning.convention(false)
+ finalizeCoroutines.convention(false)
+ moduleName.convention(dokkatooExtension.moduleName)
+ moduleVersion.convention(dokkatooExtension.moduleVersion)
+ offlineMode.convention(false)
+ outputDir.convention(dokkatooExtension.dokkatooPublicationDirectory)
+ suppressInheritedMembers.convention(false)
+ suppressObviousFunctions.convention(true)
+ }
+ }
+
+ /** Set conventions for all [DokkaSourceSetSpec] properties */
+ private fun NamedDomainObjectContainer<DokkaSourceSetSpec>.configureDefaults(
+ sourceSetScopeConvention: Property<String>,
+ ) {
+ configureEach dss@{
+ analysisPlatform.convention(KotlinPlatform.DEFAULT)
+ displayName.convention(
+ analysisPlatform.map { platform ->
+ // Match existing Dokka naming conventions. (This should probably be simplified!)
+ when {
+ // Multiplatform source sets (e.g. commonMain, jvmMain, macosMain)
+ name.endsWith("Main") -> name.substringBeforeLast("Main")
+
+ // indeterminate source sets should be named by the Kotlin platform
+ else -> platform.displayName
+ }
+ }
+ )
+ documentedVisibilities.convention(setOf(VisibilityModifier.PUBLIC))
+ jdkVersion.convention(8)
+
+ enableKotlinStdLibDocumentationLink.convention(true)
+ enableJdkDocumentationLink.convention(true)
+ enableAndroidDocumentationLink.convention(
+ analysisPlatform.map { it == KotlinPlatform.AndroidJVM }
+ )
+
+ reportUndocumented.convention(false)
+ skipDeprecated.convention(false)
+ skipEmptyPackages.convention(true)
+ sourceSetScope.convention(sourceSetScopeConvention)
+
+ // Manually added sourceSets should not be suppressed by default. dokkatooSourceSets that are
+ // automatically added by DokkatooKotlinAdapter will have a sensible value for suppress.
+ suppress.convention(false)
+
+ suppressGeneratedFiles.convention(true)
+
+ sourceLinks.configureEach {
+ localDirectory.convention(layout.projectDirectory)
+ remoteLineSuffix.convention("#L")
+ }
+
+ perPackageOptions.configureEach {
+ matchingRegex.convention(".*")
+ suppress.convention(false)
+ skipDeprecated.convention(false)
+ reportUndocumented.convention(false)
+ }
+
+ externalDocumentationLinks {
+ configureEach {
+ enabled.convention(true)
+ packageListUrl.convention(url.map { it.appendPath("package-list") })
+ }
+
+ maybeCreate("jdk") {
+ enabled.convention(this@dss.enableJdkDocumentationLink)
+ url(this@dss.jdkVersion.map { jdkVersion ->
+ when {
+ jdkVersion < 11 -> "https://docs.oracle.com/javase/${jdkVersion}/docs/api/"
+ else -> "https://docs.oracle.com/en/java/javase/${jdkVersion}/docs/api/"
+ }
+ })
+ packageListUrl(this@dss.jdkVersion.map { jdkVersion ->
+ when {
+ jdkVersion < 11 -> "https://docs.oracle.com/javase/${jdkVersion}/docs/api/package-list"
+ else -> "https://docs.oracle.com/en/java/javase/${jdkVersion}/docs/api/element-list"
+ }
+ })
+ }
+
+ maybeCreate("kotlinStdlib") {
+ enabled.convention(this@dss.enableKotlinStdLibDocumentationLink)
+ url("https://kotlinlang.org/api/latest/jvm/stdlib/")
+ }
+
+ maybeCreate("androidSdk") {
+ enabled.convention(this@dss.enableAndroidDocumentationLink)
+ url("https://developer.android.com/reference/kotlin/")
+ }
+
+ maybeCreate("androidX") {
+ enabled.convention(this@dss.enableAndroidDocumentationLink)
+ url("https://developer.android.com/reference/kotlin/")
+ packageListUrl("https://developer.android.com/reference/kotlin/androidx/package-list")
+ }