Skip to content

Instantly share code, notes, and snippets.

@IgnatBeresnev
Created November 9, 2023 12:39
Show Gist options
  • Save IgnatBeresnev/3ed43625bc01ea22421290458b9b2755 to your computer and use it in GitHub Desktop.
Save IgnatBeresnev/3ed43625bc01ea22421290458b9b2755 to your computer and use it in GitHub Desktop.
Dokka-3174-changes.patch
Subject: [PATCH] Update hardcoded project paths
Update coroutine's diff
Fix Dokka version in coroutines and serialization tests
Fix integration tests
Fix publishing after the update to Gradle 8
Add parent validatePlugins task
Fix CLI integration tests
Make dokka-subproject a non-included build
Return a lost `@Optional` annotation
Make integration tests runnable from IDEA
Enable parent publishPlugins task
Remove `gradle-plugin` subproject to minimize diff
Minor build scripts refactoring
Minor convention plugin refactoring
Rename convention plugins
Remove check's dependency on integration tests
Replace deprecated API
fix s3 script path
run clean task separately
ignore some tests for now
fix gradle plugin compatibility
restore BCV
fix workflows
update gradle to 8.4 (not fully yet)
add parent tasks to dokka-integration-tests
cli integration tests
fix maven plugin POM
maven integration tests
rollback gradle integration tests to use mavenLocal for now
restore gradle integration tests
remove todos
fix publishing of Gradle plugin and it markers
cleanup build scripts setup group and version in properties setup publishing for gradle plugin
Correct publishing information
Add parent composite build tasks
Correct publishing env properties
Setup publishing to multiple repositories (gradle-plugin publishing is not supported yet)
Rip out publishing
Rip out non essentials
Fix `dokka-core` artifact name for runners
Move gradle-plugin's versions into the common catalog
Rip out non-essential dependencies in gradle-plugin
Align gradle-plugin's formatting with the rest of the project
Move parts of Dokkatoo into gradle-plugin
Align included build toolchain and language versions
Add composite build parent tasks
Fix Gradle sync problems
Update dokka_version to 1.9.20-SNAPSHOT
Remove irrelevant project properties
Add Gradle properties to included builds (#3177)
Add version-catalog def in integration-tests (#3175)
Initial included-build refactor (#3161)
---
Index: build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build.gradle.kts b/build.gradle.kts
--- a/build.gradle.kts (revision 38e09dd0a2b0f0f111c33e30665faa933142959f)
+++ b/build.gradle.kts (revision a8e53e0dbcda24cecf42fa18ca0d5c140717889a)
@@ -2,51 +2,77 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.ValidatePublications
-import org.jetbrains.publicationChannels
-
-@Suppress("DSL_SCOPE_VIOLATION") // fixed in Gradle 8.1 https://github.com/gradle/gradle/pull/23639
plugins {
- id("org.jetbrains.conventions.base")
- id("org.jetbrains.conventions.dokka")
+ id("dokkabuild.base")
+}
+
+val publishedIncludedBuilds = listOf("runner-cli", "runner-gradle-classic", "runner-maven")
+val gradlePluginIncludedBuilds = listOf("runner-gradle-classic")
+
+addDependencyOnSameTasksOfIncludedBuilds("assemble", "build", "clean", "check")
- alias(libs.plugins.kotlinx.binaryCompatibilityValidator)
- alias(libs.plugins.nexusPublish)
+registerParentGroupTasks("publishing", taskNames = listOf(
+ "publishAllPublicationsToMavenCentralRepository",
+ "publishAllPublicationsToProjectLocalRepository",
+ "publishAllPublicationsToSnapshotRepository",
+ "publishAllPublicationsToSpaceDevRepository",
+ "publishAllPublicationsToSpaceTestRepository",
+ "publishToMavenLocal"
+)) {
+ it.name in publishedIncludedBuilds
}
-val dokka_version: String by project
+registerParentGroupTasks("verification", taskNames = listOf(
+ "test",
+ "apiCheck",
+ "apiDump"
+))
-group = "org.jetbrains.dokka"
-version = dokka_version
+registerParentGroupTasks("gradle plugin", taskNames = listOf(
+ "publishPlugins",
+ "validatePlugins"
+)) {
+ it.name in gradlePluginIncludedBuilds
+}
+tasks.register("integrationTest") {
+ group = "verification"
+ description = "Runs integration tests of this project. Might take a while and require additional setup."
-logger.lifecycle("Publication version: $dokka_version")
-tasks.register<ValidatePublications>("validatePublications")
+ dependsOn(includedBuildTasks("integrationTest") {
+ it.name == "dokka-integration-tests"
+ })
+}
-nexusPublishing {
- repositories {
- sonatype {
- username.set(System.getenv("SONATYPE_USER"))
- password.set(System.getenv("SONATYPE_PASSWORD"))
+fun addDependencyOnSameTasksOfIncludedBuilds(vararg taskNames: String) {
+ taskNames.forEach { taskName ->
+ tasks.named(taskName) {
+ dependsOn(includedBuildTasks(taskName))
}
}
}
-val dokkaPublish by tasks.registering {
- if (publicationChannels.any { it.isMavenRepository() }) {
- finalizedBy(tasks.named("closeAndReleaseSonatypeStagingRepository"))
+fun registerParentGroupTasks(
+ groupName: String,
+ taskNames: List<String>,
+ includedBuildFilter: (IncludedBuild) -> Boolean = { true }
+) = taskNames.forEach { taskName ->
+ tasks.register(taskName) {
+ group = groupName
+ description = "A parent task that calls tasks with the same name in all subprojects and included builds"
+
+ dependsOn(subprojectTasks(taskName), includedBuildTasks(taskName, includedBuildFilter))
}
}
-apiValidation {
- // note that subprojects are ignored by their name, not their path https://github.com/Kotlin/binary-compatibility-validator/issues/16
- ignoredProjects += setOf(
- // NAME PATH
- "frontend", // :plugins:base:frontend
+fun subprojectTasks(taskName: String): List<String> =
+ subprojects
+ .filter { it.getTasksByName(taskName, false).isNotEmpty() }
+ .map { ":${it.path}:$taskName" }
- "integration-tests", // :integration-tests
- "gradle", // :integration-tests:gradle
- "cli", // :integration-tests:cli
- "maven", // integration-tests:maven
- )
-}
+
+fun includedBuildTasks(taskName: String, filter: (IncludedBuild) -> Boolean = { true }): List<TaskReference> =
+ gradle.includedBuilds
+ .filter { it.name != "build-logic" }
+ .filter(filter)
+ .mapNotNull { it.task(":$taskName") }
Index: dokka-integration-tests/settings.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/settings.gradle.kts b/dokka-integration-tests/settings.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-integration-tests/settings.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+rootProject.name = "dokka-integration-tests"
+
+pluginManagement {
+ includeBuild("../build-logic")
+
+ repositories {
+ gradlePluginPortal()
+ mavenCentral()
+ }
+}
+
+dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ }
+
+ versionCatalogs {
+ create("libs") {
+ from(files("../gradle/libs.versions.toml"))
+ }
+ }
+}
+
+includeBuild("../dokka-runners/gradle-plugin-classic")
+includeBuild("../dokka-runners/cli")
+includeBuild("../dokka-runners/maven-plugin")
+includeBuild("../.") // include the very root aggregating build so that we can depend on its tasks
+
+include(
+ ":cli",
+ ":gradle",
+ ":maven",
+ ":utilities",
+)
+
+enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Index: dokka-runners/cli/settings.gradle.kts
===================================================================
diff --git a/dokka-runners/cli/settings.gradle.kts b/dokka-runners/cli/settings.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-runners/cli/settings.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+rootProject.name = "cli"
+
+pluginManagement {
+ includeBuild("../../build-logic")
+
+ repositories {
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ google()
+ }
+
+ versionCatalogs {
+ create("libs") {
+ from(files("../../gradle/libs.versions.toml"))
+ }
+ }
+}
+
+enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Index: dokka-runners/gradle-plugin-classic/build.gradle.kts
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/build.gradle.kts b/dokka-runners/gradle-plugin-classic/build.gradle.kts
new file mode 100644
--- /dev/null (revision f173958df66a5a7746951a4a25b0f0c3d126b4c4)
+++ b/dokka-runners/gradle-plugin-classic/build.gradle.kts (revision f173958df66a5a7746951a4a25b0f0c3d126b4c4)
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.PublicationName
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.gradle-plugin")
+ alias(libs.plugins.kotlinx.binaryCompatibilityValidator)
+}
+
+overridePublicationArtifactId("dokka-gradle-plugin", PublicationName.GRADLE_PLUGIN)
+
+dependencies {
+ // the version is required for Gradle plugin publishing
+ api("org.jetbrains.dokka:dokka-core:$version")
+
+ compileOnly(libs.gradlePlugin.kotlin)
+ compileOnly(libs.gradlePlugin.kotlin.klibCommonizerApi)
+ compileOnly(libs.gradlePlugin.android)
+
+ testImplementation(kotlin("test"))
+ testImplementation(libs.gradlePlugin.kotlin)
+ testImplementation(libs.gradlePlugin.kotlin.klibCommonizerApi)
+ testImplementation(libs.gradlePlugin.android)
+}
+
+@Suppress("UnstableApiUsage")
+gradlePlugin {
+ plugins {
+ create("dokka") {
+ id = "org.jetbrains.dokka"
+ implementationClass = "org.jetbrains.dokka.gradle.DokkaPlugin"
+
+ displayName = "Dokka plugin"
+ description = "Dokka is an API documentation engine for Kotlin"
+ tags.addAll("dokka", "kotlin", "kdoc", "android", "documentation", "api")
+ }
+ }
+}
+
+// Gradle will put its own version of the stdlib in the classpath, so not pull our own we will end up with
+// warnings like 'Runtime JAR files in the classpath should have the same version'
+listOf(
+ configurations.api,
+ configurations.implementation,
+ configurations.runtimeOnly
+).forEach {
+ it.configure { excludeGradleCommonDependencies() }
+}
+
+/**
+ * These dependencies will be provided by Gradle, and we should prevent version conflict
+ * Code taken from the Kotlin Gradle plugin:
+ * https://github.com/JetBrains/kotlin/blob/70e15b281cb43379068facb82b8e4bcb897a3c4f/buildSrc/src/main/kotlin/GradleCommon.kt#L72
+ */
+fun Configuration.excludeGradleCommonDependencies() {
+ dependencies
+ .withType<ModuleDependency>()
+ .configureEach {
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk7")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk8")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-common")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-reflect")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-script-runtime")
+ }
+}
Index: dokka-runners/gradle-plugin-classic/gradle.properties
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/gradle.properties b/dokka-runners/gradle-plugin-classic/gradle.properties
new file mode 100644
--- /dev/null (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
+++ b/dokka-runners/gradle-plugin-classic/gradle.properties (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
@@ -0,0 +1,13 @@
+#
+# Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+#
+
+# Project Settings
+group=org.jetbrains.dokka
+version=1.9.20-SNAPSHOT
+
+kotlin.stdlib.default.dependency=false
+
+org.jetbrains.dokka.javaToolchain.mainCompiler=8
+org.jetbrains.dokka.javaToolchain.testLauncher=8
+org.jetbrains.dokka.kotlinLanguageLevel=1.4
Index: dokka-runners/gradle-plugin-classic/settings.gradle.kts
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/settings.gradle.kts b/dokka-runners/gradle-plugin-classic/settings.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-runners/gradle-plugin-classic/settings.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+rootProject.name = "gradle-plugin-classic"
+
+pluginManagement {
+ includeBuild("../../build-logic")
+
+ repositories {
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ google()
+ }
+
+ versionCatalogs {
+ create("libs") {
+ from(files("../../gradle/libs.versions.toml"))
+ }
+ }
+}
+
+enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Index: dokka-runners/maven-plugin/settings.gradle.kts
===================================================================
diff --git a/dokka-runners/maven-plugin/settings.gradle.kts b/dokka-runners/maven-plugin/settings.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-runners/maven-plugin/settings.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+@file:Suppress("UnstableApiUsage")
+
+rootProject.name = "maven-plugin"
+
+pluginManagement {
+ includeBuild("../../build-logic")
+
+ repositories {
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+dependencyResolutionManagement {
+ repositories {
+ mavenCentral()
+ }
+
+ versionCatalogs {
+ create("libs") {
+ from(files("../../gradle/libs.versions.toml"))
+ }
+ }
+}
+
+enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Index: dokka-subprojects/analysis-java-psi/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-java-psi/build.gradle.kts b/dokka-subprojects/analysis-java-psi/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-java-psi/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+}
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ api(libs.intellij.java.psi.api)
+
+ implementation(projects.dokkaSubprojects.analysisMarkdownJb)
+
+ implementation(libs.intellij.java.psi.impl)
+ implementation(libs.intellij.platform.util.api)
+ implementation(libs.intellij.platform.util.rt)
+
+ implementation(libs.kotlinx.coroutines.core)
+ implementation(libs.jsoup)
+}
Index: dokka-subprojects/analysis-kotlin-api/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-api/build.gradle.kts b/dokka-subprojects/analysis-kotlin-api/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-kotlin-api/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ `java-test-fixtures`
+}
+
+overridePublicationArtifactId("analysis-kotlin-api")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ testFixturesApi(projects.dokkaSubprojects.dokkaCore)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.analysisKotlinDescriptors)
+}
+
+disableTestFixturesPublishing()
+
+/**
+ * Test fixtures are automatically published by default, which at this moment in time is unwanted
+ * as the test api is unstable and is internal to the Dokka project, so it shouldn't be used outside of it.
+ *
+ * @see https://docs.gradle.org/current/userguide/java_testing.html#ex-disable-publishing-of-test-fixtures-variants
+ */
+fun disableTestFixturesPublishing() {
+ val javaComponent = components["java"] as AdhocComponentWithVariants
+ javaComponent.withVariantsFromConfiguration(configurations["testFixturesApiElements"]) { skip() }
+ javaComponent.withVariantsFromConfiguration(configurations["testFixturesRuntimeElements"]) { skip() }
+}
Index: dokka-subprojects/analysis-kotlin-descriptors-compiler/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-descriptors-compiler/build.gradle.kts b/dokka-subprojects/analysis-kotlin-descriptors-compiler/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-kotlin-descriptors-compiler/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+}
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ api(libs.kotlin.compiler)
+
+ implementation(projects.dokkaSubprojects.analysisMarkdownJb)
+ implementation(projects.dokkaSubprojects.analysisJavaPsi)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreContentMatcherTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+
+ // TODO [beresnev] get rid of it
+ compileOnly(libs.kotlinx.coroutines.core)
+}
Index: dokka-subprojects/analysis-kotlin-descriptors-ide/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-descriptors-ide/build.gradle.kts b/dokka-subprojects/analysis-kotlin-descriptors-ide/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-kotlin-descriptors-ide/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+}
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.analysisKotlinDescriptorsCompiler)
+
+ // TODO [beresnev] get rid of it
+ compileOnly(libs.kotlinx.coroutines.core)
+}
Index: dokka-subprojects/analysis-kotlin-descriptors/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-descriptors/build.gradle.kts b/dokka-subprojects/analysis-kotlin-descriptors/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-kotlin-descriptors/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-shadow")
+}
+
+overridePublicationArtifactId("analysis-kotlin-descriptors")
+
+dependencies {
+ // to override some interfaces (JvmAnnotationEnumFieldValue, JvmAnnotationConstantValue) from compiler since thet are empty there
+ // should be `api` since we already have it in :analysis-java-psi
+ api(libs.intellij.java.psi.api) {
+ isTransitive = false
+ }
+ implementation(projects.dokkaSubprojects.analysisKotlinApi)
+ implementation(projects.dokkaSubprojects.analysisKotlinDescriptorsCompiler)
+ implementation(projects.dokkaSubprojects.analysisKotlinDescriptorsIde)
+}
+
+tasks.shadowJar {
+ // service files are merged to make sure all Dokka plugins
+ // from the dependencies are loaded, and not just a single one.
+ mergeServiceFiles()
+}
Index: dokka-subprojects/analysis-kotlin-symbols/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-symbols/build.gradle.kts b/dokka-subprojects/analysis-kotlin-symbols/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-kotlin-symbols/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-shadow")
+}
+
+overridePublicationArtifactId("analysis-kotlin-symbols")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.analysisMarkdownJb)
+ implementation(projects.dokkaSubprojects.analysisJavaPsi)
+
+
+ // ----------- IDE dependencies ----------------------------------------------------------------------------
+
+ listOf(
+ libs.intellij.platform.util.rt,
+ libs.intellij.platform.util.api,
+ libs.intellij.java.psi.api,
+ libs.intellij.java.psi.impl
+ ).forEach {
+ runtimeOnly(it) { isTransitive = false }
+ }
+
+ implementation(libs.intellij.java.psi.api) { isTransitive = false }
+
+
+ // TODO move to toml
+ listOf(
+ "com.jetbrains.intellij.platform:util-class-loader",
+ "com.jetbrains.intellij.platform:util-text-matching",
+ "com.jetbrains.intellij.platform:util-base",
+ "com.jetbrains.intellij.platform:util-xml-dom",
+ "com.jetbrains.intellij.platform:core-impl",
+ "com.jetbrains.intellij.platform:extensions",
+ ).forEach {
+ runtimeOnly("$it:213.7172.25") { isTransitive = false }
+ }
+
+ implementation("com.jetbrains.intellij.platform:core:213.7172.25") {
+ isTransitive = false
+ } // for Standalone prototype
+
+ // ----------- Analysis dependencies ----------------------------------------------------------------------------
+
+ listOf(
+ libs.kotlin.high.level.api.api,
+ libs.kotlin.analysis.api.standalone,
+ ).forEach {
+ implementation(it) {
+ isTransitive = false // see KTIJ-19820
+ }
+ }
+ listOf(
+ libs.kotlin.high.level.api.impl,
+ libs.kotlin.high.level.api.fir,
+ libs.kotlin.high.level.api.fe10,
+ libs.kotlin.low.level.api.fir,
+ libs.kotlin.analysis.project.structure,
+ libs.kotlin.analysis.api.providers,
+ libs.kotlin.symbol.light.classes,
+ ).forEach {
+ runtimeOnly(it) {
+ isTransitive = false // see KTIJ-19820
+ }
+ }
+ // copy-pasted from Analysis API https://github.com/JetBrains/kotlin/blob/a10042f9099e20a656dec3ecf1665eea340a3633/analysis/low-level-api-fir/build.gradle.kts#L37
+ runtimeOnly("com.github.ben-manes.caffeine:caffeine:2.9.3")
+
+ runtimeOnly(libs.kotlinx.collections.immutable)
+ implementation(libs.kotlin.compiler.k2) {
+ isTransitive = false
+ }
+
+ // TODO [beresnev] get rid of it
+ compileOnly(libs.kotlinx.coroutines.core)
+
+}
+
+tasks.shadowJar {
+ // service files are merged to make sure all Dokka plugins
+ // from the dependencies are loaded, and not just a single one.
+ mergeServiceFiles()
+}
Index: dokka-subprojects/analysis-markdown-jb/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-markdown-jb/build.gradle.kts b/dokka-subprojects/analysis-markdown-jb/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/analysis-markdown-jb/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("analysis-markdown")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(libs.jsoup)
+ implementation(libs.jetbrains.markdown)
+}
Index: dokka-subprojects/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/build.gradle.kts b/dokka-subprojects/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.base")
+ alias(libs.plugins.kotlinx.binaryCompatibilityValidator)
+}
Index: dokka-subprojects/core-content-matcher-test-utils/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/core-content-matcher-test-utils/build.gradle.kts b/dokka-subprojects/core-content-matcher-test-utils/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/core-content-matcher-test-utils/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+}
+
+dependencies {
+ implementation(projects.dokkaSubprojects.coreTestApi)
+
+ implementation(kotlin("reflect"))
+ implementation(kotlin("test"))
+}
Index: dokka-subprojects/core-test-api/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/core-test-api/build.gradle.kts b/dokka-subprojects/core-test-api/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/core-test-api/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,18 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("dokka-test-api")
+
+dependencies {
+ api(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(kotlin("reflect"))
+}
Index: dokka-subprojects/core/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/core/build.gradle.kts b/dokka-subprojects/core/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/core/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("dokka-core")
+
+dependencies {
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+ implementation(libs.jackson.kotlin)
+ implementation(libs.jackson.xml)
+ constraints {
+ implementation(libs.jackson.databind) {
+ because("CVE-2022-42003")
+ }
+ }
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
+
+tasks {
+ processResources {
+ inputs.property("dokkaVersion", project.version)
+ eachFile {
+ if (name == "dokka-version.properties") {
+ filter { line ->
+ line.replace("<dokka-version>", project.version.toString())
+ }
+ }
+ }
+ }
+}
Index: dokka-subprojects/plugin-all-modules-page/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-all-modules-page/build.gradle.kts b/dokka-subprojects/plugin-all-modules-page/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-all-modules-page/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("all-modules-page-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginTemplating)
+
+ implementation(projects.dokkaSubprojects.analysisMarkdownJb)
+
+ implementation(libs.kotlinx.html)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.pluginBase)
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils)
+ testImplementation(projects.dokkaSubprojects.pluginGfm)
+ testImplementation(projects.dokkaSubprojects.pluginGfmTemplateProcessing)
+ testImplementation(projects.dokkaSubprojects.coreContentMatcherTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-android-documentation/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-android-documentation/build.gradle.kts b/dokka-subprojects/plugin-android-documentation/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-android-documentation/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.test-k2")
+}
+
+overridePublicationArtifactId("android-documentation-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+
+ implementation(kotlin("reflect"))
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.pluginBase)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+
+ symbolsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ descriptorsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils) {
+ exclude(module = "analysis-kotlin-descriptors")
+ }
+}
Index: dokka-subprojects/plugin-base-frontend/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-base-frontend/build.gradle.kts b/dokka-subprojects/plugin-base-frontend/build.gradle.kts
new file mode 100644
--- /dev/null (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
+++ b/dokka-subprojects/plugin-base-frontend/build.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import com.github.gradle.node.npm.task.NpmTask
+import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
+
+@Suppress("DSL_SCOPE_VIOLATION") // fixed in Gradle 8.1 https://github.com/gradle/gradle/pull/23639
+plugins {
+ id("dokkabuild.setup-html-frontend-files")
+ alias(libs.plugins.gradleNode)
+}
+
+node {
+ version.set(libs.versions.node)
+
+ // https://github.com/node-gradle/gradle-node-plugin/blob/3.5.1/docs/faq.md#is-this-plugin-compatible-with-centralized-repositories-declaration
+ download.set(true)
+ distBaseUrl.set(null as String?) // Strange cast to avoid overload ambiguity
+}
+
+val distributionDirectory = layout.projectDirectory.dir("dist")
+
+val npmRunBuild by tasks.registering(NpmTask::class) {
+ dependsOn(tasks.npmInstall)
+
+ npmCommand.set(parseSpaceSeparatedArgs("run build"))
+
+ inputs.dir("src/main")
+ inputs.files(
+ "package.json",
+ "webpack.config.js",
+ )
+
+ outputs.dir(distributionDirectory)
+ outputs.cacheIf { true }
+}
+
+configurations.dokkaHtmlFrontendFilesElements.configure {
+ outgoing {
+ artifact(distributionDirectory) {
+ builtBy(npmRunBuild)
+ }
+ }
+}
+
+tasks.clean {
+ delete(
+ file("node_modules"),
+ file("dist"),
+ )
+}
Index: dokka-subprojects/plugin-base-test-utils/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-base-test-utils/build.gradle.kts b/dokka-subprojects/plugin-base-test-utils/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-base-test-utils/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("dokka-base-test-utils")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.pluginBase)
+
+ api(projects.dokkaSubprojects.analysisKotlinApi)
+
+ // TODO [beresnev] analysis switcher
+ //runtimeOnly(project(path = ":subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ runtimeOnly(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+
+ implementation(kotlin("reflect"))
+ implementation(libs.jsoup)
+
+ implementation(kotlin("test"))
+ implementation(projects.dokkaSubprojects.coreTestApi)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-base/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-base/build.gradle.kts b/dokka-subprojects/plugin-base/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-base/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.setup-html-frontend-files")
+ id("dokkabuild.test-k2")
+}
+
+overridePublicationArtifactId("dokka-base")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.analysisMarkdownJb)
+
+ // Other
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+ implementation(libs.jsoup)
+ implementation(libs.freemarker)
+ implementation(libs.kotlinx.html)
+ implementation(libs.jackson.kotlin)
+ constraints {
+ implementation(libs.jackson.databind) {
+ because("CVE-2022-42003")
+ }
+ }
+
+ // Test only
+ testImplementation(kotlin("test"))
+ testImplementation(libs.junit.jupiterParams)
+
+ symbolsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ descriptorsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils) {
+ exclude(module = "analysis-kotlin-descriptors")
+ }
+ testImplementation(projects.dokkaSubprojects.coreContentMatcherTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+
+ dokkaHtmlFrontendFiles(projects.dokkaSubprojects.pluginBaseFrontend) {
+ because("fetch frontend files from subproject :plugin-base-frontend")
+ }
+}
+
+// access the frontend files via the dependency on :plugins:base:frontend
+val dokkaHtmlFrontendFiles: Provider<FileCollection> =
+ configurations.dokkaHtmlFrontendFiles.map { frontendFiles ->
+ frontendFiles.incoming.artifacts.artifactFiles
+ }
+
+val preparedokkaHtmlFrontendFiles by tasks.registering(Sync::class) {
+ description = "copy Dokka Base frontend files into the resources directory"
+
+ from(dokkaHtmlFrontendFiles) {
+ include("*.js")
+ into("dokka/scripts")
+ }
+
+ from(dokkaHtmlFrontendFiles) {
+ include("*.css")
+ into("dokka/styles")
+ }
+
+ into(layout.buildDirectory.dir("generated/src/main/resources"))
+}
+
+sourceSets.main {
+ resources.srcDir(preparedokkaHtmlFrontendFiles.map { it.destinationDir })
+}
+
+tasks.test {
+ maxHeapSize = "4G"
+}
Index: dokka-subprojects/plugin-gfm-template-processing/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-gfm-template-processing/build.gradle.kts b/dokka-subprojects/plugin-gfm-template-processing/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-gfm-template-processing/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("gfm-template-processing-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginGfm)
+ implementation(projects.dokkaSubprojects.pluginAllModulesPage)
+ implementation(projects.dokkaSubprojects.pluginTemplating)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-gfm/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-gfm/build.gradle.kts b/dokka-subprojects/plugin-gfm/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-gfm/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("gfm-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.jackson.kotlin)
+ constraints {
+ implementation(libs.jackson.databind) {
+ because("CVE-2022-42003")
+ }
+ }
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.pluginBase)
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-javadoc/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-javadoc/build.gradle.kts b/dokka-subprojects/plugin-javadoc/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-javadoc/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.test-k2")
+}
+
+overridePublicationArtifactId("javadoc-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginKotlinAsJava)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.korlibs.template)
+ implementation(libs.kotlinx.html)
+ implementation(libs.kotlinx.coroutines.core)
+
+ testImplementation(kotlin("test"))
+ symbolsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ descriptorsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils) {
+ exclude(module = "analysis-kotlin-descriptors")
+ }
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+ testImplementation(libs.jsoup)
+}
Index: dokka-subprojects/plugin-jekyll-template-processing/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-jekyll-template-processing/build.gradle.kts b/dokka-subprojects/plugin-jekyll-template-processing/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-jekyll-template-processing/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("jekyll-template-processing-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginJekyll)
+ implementation(projects.dokkaSubprojects.pluginAllModulesPage)
+ implementation(projects.dokkaSubprojects.pluginTemplating)
+ implementation(projects.dokkaSubprojects.pluginGfm)
+ implementation(projects.dokkaSubprojects.pluginGfmTemplateProcessing)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-jekyll/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-jekyll/build.gradle.kts b/dokka-subprojects/plugin-jekyll/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-jekyll/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("jekyll-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginGfm)
+
+ implementation(kotlin("reflect"))
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-kotlin-as-java/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-kotlin-as-java/build.gradle.kts b/dokka-subprojects/plugin-kotlin-as-java/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-kotlin-as-java/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.test-k2")
+}
+
+overridePublicationArtifactId("kotlin-as-java-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+ compileOnly(projects.dokkaSubprojects.analysisKotlinApi)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+
+ implementation(kotlin("reflect"))
+
+ testImplementation(kotlin("test"))
+ testImplementation(libs.jsoup)
+ testImplementation(projects.dokkaSubprojects.pluginBase)
+ symbolsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ descriptorsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils) {
+ exclude(module = "analysis-kotlin-descriptors")
+ }
+ testImplementation(projects.dokkaSubprojects.coreContentMatcherTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: dokka-subprojects/plugin-mathjax/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-mathjax/build.gradle.kts b/dokka-subprojects/plugin-mathjax/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-mathjax/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.test-k2")
+}
+
+overridePublicationArtifactId("mathjax-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+
+ implementation(kotlin("reflect"))
+
+ testImplementation(kotlin("test"))
+ testImplementation(libs.jsoup)
+ testImplementation(projects.dokkaSubprojects.coreContentMatcherTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+
+ symbolsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-symbols", configuration = "shadow"))
+ descriptorsTestConfiguration(project(path = ":dokka-subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils) {
+ exclude(module = "analysis-kotlin-descriptors")
+ }
+}
Index: dokka-subprojects/plugin-templating/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-templating/build.gradle.kts b/dokka-subprojects/plugin-templating/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-templating/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("templating-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ api(libs.jsoup)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+
+ testImplementation(kotlin("test"))
+ testImplementation(libs.junit.jupiterParams)
+
+ testImplementation(projects.dokkaSubprojects.pluginBaseTestUtils)
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+ testImplementation(libs.kotlinx.html)
+}
Index: dokka-subprojects/plugin-versioning/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/plugin-versioning/build.gradle.kts b/dokka-subprojects/plugin-versioning/build.gradle.kts
new file mode 100644
--- /dev/null (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
+++ b/dokka-subprojects/plugin-versioning/build.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.overridePublicationArtifactId
+
+plugins {
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+}
+
+overridePublicationArtifactId("versioning-plugin")
+
+dependencies {
+ compileOnly(projects.dokkaSubprojects.dokkaCore)
+
+ implementation(projects.dokkaSubprojects.pluginBase)
+ implementation(projects.dokkaSubprojects.pluginTemplating)
+
+ implementation(kotlin("reflect"))
+ implementation(libs.kotlinx.coroutines.core)
+ implementation(libs.kotlinx.html)
+ implementation(libs.apacheMaven.artifact)
+ implementation(libs.jackson.kotlin)
+ constraints {
+ implementation(libs.jackson.databind) {
+ because("CVE-2022-42003")
+ }
+ }
+
+ testImplementation(kotlin("test"))
+ testImplementation(projects.dokkaSubprojects.coreTestApi)
+}
Index: settings.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/settings.gradle.kts b/settings.gradle.kts
--- a/settings.gradle.kts (revision 38e09dd0a2b0f0f111c33e30665faa933142959f)
+++ b/settings.gradle.kts (revision cbb3b9894374051ed16f351b0ed62ccde4aefe30)
@@ -58,53 +58,43 @@
`gradle-enterprise`
}
+includeBuild("dokka-integration-tests")
+includeBuild("dokka-runners/gradle-plugin-classic")
+includeBuild("dokka-runners/maven-plugin")
+includeBuild("dokka-runners/cli")
+
include(
- ":core",
- ":core:test-api",
- ":core:content-matcher-test-utils",
-
- ":subprojects",
-
- ":subprojects:analysis-java-psi",
- ":subprojects:analysis-kotlin-api",
- ":subprojects:analysis-kotlin-descriptors",
- ":subprojects:analysis-kotlin-descriptors:compiler",
- ":subprojects:analysis-kotlin-descriptors:ide",
- ":subprojects:analysis-kotlin-symbols",
- ":subprojects:analysis-markdown-jb",
-
- ":runners:gradle-plugin",
- ":runners:cli",
- ":runners:maven-plugin",
-
- ":plugins:base",
- ":plugins:base:frontend",
- ":plugins:base:base-test-utils",
- ":plugins:all-modules-page",
- ":plugins:templating",
- ":plugins:versioning",
- ":plugins:android-documentation",
-
- ":plugins:mathjax",
- ":plugins:gfm",
- ":plugins:gfm:gfm-template-processing",
- ":plugins:jekyll",
- ":plugins:jekyll:jekyll-template-processing",
- ":plugins:kotlin-as-java",
- ":plugins:javadoc",
-
- ":integration-tests",
- ":integration-tests:gradle",
- ":integration-tests:cli",
- ":integration-tests:maven",
-
":docs-developer",
+
+ ":dokka-subprojects",
+ ":dokka-subprojects:analysis-java-psi",
+ ":dokka-subprojects:analysis-kotlin-api",
+ ":dokka-subprojects:analysis-kotlin-descriptors",
+ ":dokka-subprojects:analysis-kotlin-descriptors-compiler",
+ ":dokka-subprojects:analysis-kotlin-descriptors-ide",
+ ":dokka-subprojects:analysis-kotlin-symbols",
+ ":dokka-subprojects:analysis-markdown-jb",
+ ":dokka-subprojects:core",
+ ":dokka-subprojects:core-content-matcher-test-utils",
+ ":dokka-subprojects:core-test-api",
+ ":dokka-subprojects:plugin-all-modules-page",
+ ":dokka-subprojects:plugin-android-documentation",
+ ":dokka-subprojects:plugin-base",
+ ":dokka-subprojects:plugin-base-frontend",
+ ":dokka-subprojects:plugin-base-test-utils",
+ ":dokka-subprojects:plugin-gfm",
+ ":dokka-subprojects:plugin-gfm-template-processing",
+ ":dokka-subprojects:plugin-javadoc",
+ ":dokka-subprojects:plugin-jekyll",
+ ":dokka-subprojects:plugin-jekyll-template-processing",
+ ":dokka-subprojects:plugin-kotlin-as-java",
+ ":dokka-subprojects:plugin-mathjax",
+ ":dokka-subprojects:plugin-templating",
+ ":dokka-subprojects:plugin-versioning",
)
val isCiBuild = System.getenv("GITHUB_ACTIONS") != null || System.getenv("TEAMCITY_VERSION") != null
-
-
gradleEnterprise {
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
@@ -113,5 +103,11 @@
}
}
+// This hack is required for included build support.
+// The name of the published artifact is `dokka-core`, but the module is named `core`.
+// For some reason, dependency substitution doesn't work in this case. Maybe we fall under one of the unsupported
+// cases: https://docs.gradle.org/current/userguide/composite_builds.html#included_build_substitution_limitations.
+// Should no longer be a problem once Dokka's artifacts are relocated, see #3245.
+project(":dokka-subprojects:core").name = "dokka-core"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
Index: dokka-integration-tests/gradle.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>ISO-8859-1
===================================================================
diff --git a/dokka-integration-tests/gradle.properties b/dokka-integration-tests/gradle.properties
new file mode 100644
--- /dev/null (revision f173958df66a5a7746951a4a25b0f0c3d126b4c4)
+++ b/dokka-integration-tests/gradle.properties (revision f173958df66a5a7746951a4a25b0f0c3d126b4c4)
@@ -0,0 +1,12 @@
+#
+# Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+#
+
+# while integration test projects aren't published,
+# the version here should be in sync with other versions,
+# because it's used to resolve dependencies
+version=1.9.20-SNAPSHOT
+
+org.jetbrains.dokka.javaToolchain.mainCompiler=8
+org.jetbrains.dokka.javaToolchain.testLauncher=8
+dokka_integration_test_parallelism=2
Index: dokka-runners/cli/gradle.properties
===================================================================
diff --git a/dokka-runners/cli/gradle.properties b/dokka-runners/cli/gradle.properties
new file mode 100644
--- /dev/null (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
+++ b/dokka-runners/cli/gradle.properties (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
@@ -0,0 +1,11 @@
+#
+# Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+#
+
+# Project Settings
+group=org.jetbrains.dokka
+version=1.9.20-SNAPSHOT
+
+org.jetbrains.dokka.javaToolchain.mainCompiler=8
+org.jetbrains.dokka.javaToolchain.testLauncher=8
+org.jetbrains.dokka.kotlinLanguageLevel=1.4
Index: dokka-runners/maven-plugin/gradle.properties
===================================================================
diff --git a/dokka-runners/maven-plugin/gradle.properties b/dokka-runners/maven-plugin/gradle.properties
new file mode 100644
--- /dev/null (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
+++ b/dokka-runners/maven-plugin/gradle.properties (revision 76199295019e7d2bfb48154da0e13d6d122ded82)
@@ -0,0 +1,9 @@
+#
+# Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+#
+group=org.jetbrains.dokka
+version=1.9.20-SNAPSHOT
+
+org.jetbrains.dokka.javaToolchain.mainCompiler=8
+org.jetbrains.dokka.javaToolchain.testLauncher=8
+org.jetbrains.dokka.kotlinLanguageLevel=1.4
Index: dokka-runners/cli/build.gradle.kts
===================================================================
diff --git a/dokka-runners/cli/build.gradle.kts b/dokka-runners/cli/build.gradle.kts
--- a/dokka-runners/cli/build.gradle.kts (revision fedd09b8d7f49bf7e408fb8b37ec401c2daf0ca9)
+++ b/dokka-runners/cli/build.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,34 +2,25 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.DokkaPublicationBuilder.Component.Shadow
-import org.jetbrains.registerDokkaArtifactPublication
+import dokkabuild.overridePublicationArtifactId
plugins {
- id("org.jetbrains.conventions.kotlin-jvm")
- id("org.jetbrains.conventions.maven-publish")
- id("com.github.johnrengelman.shadow")
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-shadow")
+ alias(libs.plugins.kotlinx.binaryCompatibilityValidator)
}
+
+overridePublicationArtifactId("dokka-cli")
dependencies {
- implementation(projects.core)
+ implementation("org.jetbrains.dokka:dokka-core")
implementation(libs.kotlinx.cli)
testImplementation(kotlin("test"))
}
-tasks {
- shadowJar {
- val dokka_version: String by project
- archiveFileName.set("dokka-cli-$dokka_version.jar")
- archiveClassifier.set("")
- manifest {
- attributes("Main-Class" to "org.jetbrains.dokka.MainKt")
- }
+tasks.shadowJar {
+ manifest {
+ attributes("Main-Class" to "org.jetbrains.dokka.MainKt")
}
}
-
-registerDokkaArtifactPublication("dokkaCli") {
- artifactId = "dokka-cli"
- component = Shadow
-}
Index: dokka-runners/maven-plugin/build.gradle.kts
===================================================================
diff --git a/dokka-runners/maven-plugin/build.gradle.kts b/dokka-runners/maven-plugin/build.gradle.kts
--- a/dokka-runners/maven-plugin/build.gradle.kts (revision fedd09b8d7f49bf7e408fb8b37ec401c2daf0ca9)
+++ b/dokka-runners/maven-plugin/build.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,16 +2,20 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.registerDokkaArtifactPublication
+import dokkabuild.overridePublicationArtifactId
plugins {
- id("org.jetbrains.conventions.kotlin-jvm")
- id("org.jetbrains.conventions.maven-publish")
- id("org.jetbrains.conventions.maven-cli-setup")
+ id("dokkabuild.kotlin-jvm")
+ id("dokkabuild.publish-jvm")
+ id("dokkabuild.setup-maven-cli")
+ alias(libs.plugins.kotlinx.binaryCompatibilityValidator)
}
+
+overridePublicationArtifactId("dokka-maven-plugin")
dependencies {
- implementation(projects.core)
+ // this version is required, so that it will be available in the POM of plugin
+ implementation("org.jetbrains.dokka:dokka-core:$version")
implementation(libs.apacheMaven.core)
implementation(libs.apacheMaven.pluginApi)
@@ -25,8 +29,7 @@
description = "Generate pom.xml for Maven Plugin Plugin"
group = mavenPluginTaskGroup
- val dokka_version: String by project
- inputs.property("dokka_version", dokka_version)
+ inputs.property("dokka_version", project.version)
val pomTemplateFile = layout.projectDirectory.file("pom.template.xml")
@@ -38,7 +41,7 @@
expand(
"mavenVersion" to mavenVersion,
- "dokka_version" to dokka_version,
+ "dokka_version" to project.version,
"mavenPluginToolsVersion" to mavenPluginToolsVersion,
)
}
@@ -132,7 +135,3 @@
})
}
}
-
-registerDokkaArtifactPublication("dokkaMavenPlugin") {
- artifactId = "dokka-maven-plugin"
-}
Index: gradle/libs.versions.toml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
--- a/gradle/libs.versions.toml (revision 744cf9c7bf5bb13e2d8cb98dacec5c07cba40a6a)
+++ b/gradle/libs.versions.toml (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
@@ -3,10 +3,12 @@
gradlePlugin-kotlin = "1.9.10"
# See: https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin
gradlePlugin-android = "4.2.2"
+gradlePlugin-android-dokkatoo = "8.0.2"
gradlePlugin-dokka = "1.9.10"
kotlinx-coroutines = "1.7.3"
kotlinx-collections-immutable = "0.3.6"
+kotlinx-serialization = "1.6.0"
kotlinx-bcv = "0.13.2"
## Analysis
@@ -45,27 +47,37 @@
node = "16.13.0"
## Publishing
-gradlePlugin-shadow = "7.1.2"
-gradlePlugin-nexusPublish = "1.1.0"
-gradlePlugin-gradlePluginPublish = "0.20.0"
+gradlePlugin-shadow = "8.1.1"
+gradlePlugin-gradlePluginPublish = "1.2.1"
gradlePlugin-gradleNode = "3.5.1"
## Test
junit = "5.9.3"
+kotest = "5.6.2"
eclipse-jgit = "5.13.2.202306221912-r" # jgit 6.X requires Java 11 to run
[libraries]
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm", version.ref = "kotlinx-collections-immutable" }
+kotlinx-serialization-bom = { module = "org.jetbrains.kotlinx:kotlinx-serialization-bom", version.ref = "kotlinx-serialization" }
+kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json" }
+
+#### Dokka ####
+# TODO [structure-refactoring] Needed for Dokkatoo only, needs to be removed.
+dokka-core = { module = "org.jetbrains.dokka:dokka-core", version.ref = "gradlePlugin-dokka" }
+dokka-allModulesPagePlugin = { module = "org.jetbrains.dokka:all-modules-page-plugin", version.ref = "gradlePlugin-dokka" }
+dokka-templatingPlugin = { module = "org.jetbrains.dokka:templating-plugin", version.ref = "gradlePlugin-dokka" }
#### Gradle plugins ####
# The Maven coordinates of Gradle plugins that are either used in convention plugins, or in Dokka subprojects
gradlePlugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "gradlePlugin-kotlin" }
gradlePlugin-kotlin-klibCommonizerApi = { module = "org.jetbrains.kotlin:kotlin-klib-commonizer-api", version.ref = "gradlePlugin-kotlin" }
gradlePlugin-android = { module = "com.android.tools.build:gradle", version.ref = "gradlePlugin-android" }
+gradlePlugin-android-dokkatoo = { module = "com.android.tools.build:gradle", version.ref = "gradlePlugin-android-dokkatoo" }
+gradlePlugin-androidApi-dokkatoo = { module = "com.android.tools.build:gradle-api", version.ref = "gradlePlugin-android-dokkatoo" }
gradlePlugin-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "gradlePlugin-dokka" }
-gradlePlugin-shadow = { module = "gradle.plugin.com.github.johnrengelman:shadow", version.ref = "gradlePlugin-shadow" }
+gradlePlugin-shadow = { module = "com.github.johnrengelman:shadow", version.ref = "gradlePlugin-shadow" }
gradlePlugin-gradlePublish= { module = "com.gradle.publish:plugin-publish-plugin", version.ref = "gradlePlugin-gradlePluginPublish" }
#### Kotlin analysis ####
@@ -83,7 +95,6 @@
kotlin-analysis-api-providers = { module = "org.jetbrains.kotlin:analysis-api-providers-for-ide", version.ref = "kotlin-compiler-k2" }
kotlin-symbol-light-classes = { module = "org.jetbrains.kotlin:symbol-light-classes-for-ide", version.ref = "kotlin-compiler-k2" }
-
#### Java analysis ####
intellij-java-psi-api = { module = "com.jetbrains.intellij.java:java-psi", version.ref = "intellij-platform" }
intellij-java-psi-impl = { module = "com.jetbrains.intellij.java:java-psi-impl", version.ref = "intellij-platform" }
@@ -124,11 +135,17 @@
junit-jupiterApi = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" }
junit-jupiterParams = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" }
+kotest-bom = { module = "io.kotest:kotest-bom", version.ref = "kotest" }
+kotest-datatest = { module = "io.kotest:kotest-framework-datatest" }
+kotest-junit5Runner = { module = "io.kotest:kotest-runner-junit5" }
+kotest-assertionsCore = { module = "io.kotest:kotest-assertions-core" }
+kotest-assertionsJson = { module = "io.kotest:kotest-assertions-json" }
+
[plugins]
# Gradle Plugins that are applied directly to subprojects
# (Before defining plugins here, first consider creating convention plugins instead,
# and define the Maven coordinates above to be used in build-logic/build.gradle.kts)
kotlinx-binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinx-bcv" }
-nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "gradlePlugin-nexusPublish" }
gradleNode = { id = "com.github.node-gradle.node", version.ref = "gradlePlugin-gradleNode" }
+shadow = { id = "com.github.johnrengelman.shadow", version.ref = "gradlePlugin-shadow" }
\ No newline at end of file
Index: build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersion.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,23 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains
-
-import org.gradle.api.Project
-import org.gradle.kotlin.dsl.extra
-import org.gradle.kotlin.dsl.provideDelegate
-
-@Suppress("LocalVariableName") // property name with underscore as taken from gradle.properties
-fun Project.configureDokkaVersion(): String {
- val dokka_version: String? by this.extra
- return checkNotNull(dokka_version)
-}
-
-val Project.dokkaVersion: String
- get() = configureDokkaVersion()
-
-val Project.dokkaVersionType: DokkaVersionType?
- get() = DokkaVersionType.values().find {
- it.suffix.matches(dokkaVersion.substringAfter("-", ""))
- }
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka.gradle.kts (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,17 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.conventions
-
-import org.gradle.kotlin.dsl.invoke
-import org.jetbrains.isLocalPublication
-
-plugins {
- id("org.jetbrains.dokka")
-}
-
-tasks.dokkaHtml {
- onlyIf { !isLocalPublication }
- outputDirectory.set(layout.buildDirectory.dir("dokka"))
-}
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts b/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-publish.gradle.kts (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,72 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains.conventions
-
-import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
-
-plugins {
- id("org.jetbrains.conventions.base")
- `maven-publish`
- signing
- id("org.jetbrains.conventions.dokka")
-}
-
-val javadocJar by tasks.registering(Jar::class) {
- group = JavaBasePlugin.DOCUMENTATION_GROUP
- description = "Assembles a Javadoc JAR using Dokka HTML"
- archiveClassifier.set("javadoc")
- from(tasks.dokkaHtml)
-}
-
-publishing {
- repositories {
- // Publish to a project-local Maven directory, for verification. To test, run:
- // ./gradlew publishAllPublicationsToMavenProjectLocalRepository
- // and check $rootDir/build/maven-project-local
- maven(rootProject.layout.buildDirectory.dir("maven-project-local")) {
- name = "MavenProjectLocal"
- }
- }
-
- publications.withType<MavenPublication>().configureEach {
- artifact(javadocJar)
-
- pom {
- name.convention(provider { "Dokka ${project.name}" })
- description.convention("Dokka is an API documentation engine for Kotlin and Java, performing the same function as Javadoc for Java")
- url.convention("https://github.com/Kotlin/dokka")
-
- licenses {
- license {
- name.convention("The Apache Software License, Version 2.0")
- url.convention("https://www.apache.org/licenses/LICENSE-2.0.txt")
- distribution.convention("repo")
- }
- }
-
- developers {
- developer {
- id.convention("JetBrains")
- name.convention("JetBrains Team")
- organization.convention("JetBrains")
- organizationUrl.convention("https://www.jetbrains.com")
- }
- }
-
- scm {
- connection.convention("scm:git:git://github.com/Kotlin/dokka.git")
- url.convention("https://github.com/Kotlin/dokka/tree/master")
- }
- }
- }
-}
-
-plugins.withType<ShadowPlugin>().configureEach {
- // manually disable publication of Shadow elements https://github.com/johnrengelman/shadow/issues/651#issue-839148311
- // This is done to preserve compatibility and have the same behaviour as previous versions of Dokka.
- // For more details, see https://github.com/Kotlin/dokka/pull/2704#issuecomment-1499517930
- val javaComponent = components["java"] as AdhocComponentWithVariants
- javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) { skip() }
-}
Index: docs-developer/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/docs-developer/build.gradle.kts b/docs-developer/build.gradle.kts
--- a/docs-developer/build.gradle.kts (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ b/docs-developer/build.gradle.kts (revision f173958df66a5a7746951a4a25b0f0c3d126b4c4)
@@ -2,14 +2,11 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.dokkaVersionType
-import org.jetbrains.DokkaVersionType
-
plugins {
id("ru.vyarus.mkdocs") version "2.4.0"
}
-if (dokkaVersionType != DokkaVersionType.RELEASE) {
+if (!project.version.toString().endsWith("-SNAPSHOT")) {
// Do not generate the root index.html file with the redirect
// to a non-release version, otherwise GitHub pages based documentation
// will always lead to the non-stable documentation.
Index: dokka-integration-tests/gradle/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/build.gradle.kts b/dokka-integration-tests/gradle/build.gradle.kts
--- a/dokka-integration-tests/gradle/build.gradle.kts (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ b/dokka-integration-tests/gradle/build.gradle.kts (revision a8e53e0dbcda24cecf42fa18ca0d5c140717889a)
@@ -2,14 +2,13 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.dependsOnMavenLocalPublication
plugins {
- id("org.jetbrains.conventions.dokka-integration-test")
+ id("dokkabuild.test-integration")
}
dependencies {
- implementation(projects.integrationTestUtilities)
+ implementation(projects.utilities)
implementation(kotlin("test-junit5"))
implementation(libs.junit.jupiterApi)
@@ -20,11 +19,14 @@
implementation(libs.jsoup)
}
+val aggregatingProject = gradle.includedBuild("dokka")
+
tasks.integrationTest {
- val dokka_version: String by project
- environment("DOKKA_VERSION", dokka_version)
+ dependsOn(aggregatingProject.task(":publishToMavenLocal"))
+
+ environment("DOKKA_VERSION", project.version)
+
inputs.dir(file("projects"))
- dependsOnMavenLocalPublication()
javaLauncher.set(javaToolchains.launcherFor {
// kotlinx.coroutines requires Java 11+
Index: dokka-integration-tests/maven/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/maven/build.gradle.kts b/dokka-integration-tests/maven/build.gradle.kts
--- a/dokka-integration-tests/maven/build.gradle.kts (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ b/dokka-integration-tests/maven/build.gradle.kts (revision a8e53e0dbcda24cecf42fa18ca0d5c140717889a)
@@ -2,29 +2,34 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-import org.jetbrains.dependsOnMavenLocalPublication
-
plugins {
- id("org.jetbrains.conventions.dokka-integration-test")
- id("org.jetbrains.conventions.maven-cli-setup")
+ id("dokkabuild.test-integration")
+ id("dokkabuild.setup-maven-cli")
}
dependencies {
- implementation(projects.integrationTestUtilities)
+ implementation(projects.utilities)
implementation(kotlin("test-junit5"))
+ implementation(libs.junit.jupiterApi)
}
+
+val dokkaSubprojects = gradle.includedBuild("dokka")
+val mavenPlugin = gradle.includedBuild("runner-maven")
tasks.integrationTest {
- dependsOnMavenLocalPublication()
+ dependsOn(
+ dokkaSubprojects.task(":publishToMavenLocal"),
+ mavenPlugin.task(":publishToMavenLocal"),
+ )
dependsOn(tasks.installMavenBinary)
val mvn = mavenCliSetup.mvn
inputs.file(mvn)
- val dokka_version: String by project
- environment("DOKKA_VERSION", dokka_version)
+
doFirst("workaround for https://github.com/gradle/gradle/issues/24267") {
+ environment("DOKKA_VERSION", project.version)
environment("MVN_BINARY_PATH", mvn.get().asFile.invariantSeparatorsPath)
}
}
Index: gradle.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>ISO-8859-1
===================================================================
diff --git a/gradle.properties b/gradle.properties
--- a/gradle.properties (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ b/gradle.properties (revision 8346ca0c56b0b7f0b308bba3f2c549c9a3577f0f)
@@ -3,14 +3,16 @@
#
# Project Settings
-dokka_version=1.9.20-SNAPSHOT
+group=org.jetbrains.dokka
+version=1.9.20-SNAPSHOT
+
org.jetbrains.dokka.javaToolchain.mainCompiler=8
org.jetbrains.dokka.javaToolchain.testLauncher=8
org.jetbrains.dokka.kotlinLanguageLevel=1.4
-dokka_integration_test_parallelism=2
# Code style
kotlin.code.style=official
+
# Gradle settings
org.gradle.jvmargs=-Xmx6g -XX:MaxMetaspaceSize=2g
org.gradle.parallel=true
Index: dokka-integration-tests/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/build.gradle.kts b/dokka-integration-tests/build.gradle.kts
--- a/dokka-integration-tests/build.gradle.kts (revision f39f5a48e6dd13515036021c577e399afdbf7c5a)
+++ b/dokka-integration-tests/build.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -3,5 +3,32 @@
*/
plugins {
- id("org.jetbrains.conventions.base")
+ id("dokkabuild.base")
}
+
+addDependencyToSubprojectTasks("assemble")
+addDependencyToSubprojectTasks("build")
+addDependencyToSubprojectTasks("clean")
+addDependencyToSubprojectTasks("check")
+
+registerParentTask("test", groupName = "verification")
+registerParentTask("integrationTest", groupName = "verification")
+
+fun addDependencyToSubprojectTasks(existingTaskName: String) {
+ tasks.named(existingTaskName) {
+ dependsOn(subprojectTasks(existingTaskName))
+ }
+}
+
+fun registerParentTask(taskName: String, groupName: String) {
+ tasks.register(taskName) {
+ group = groupName
+ description = "Runs $taskName tasks of all subprojects"
+ dependsOn(subprojectTasks(taskName))
+ }
+}
+
+fun subprojectTasks(taskName: String): List<String> =
+ subprojects
+ .filter { it.getTasksByName(taskName, false).isNotEmpty() }
+ .map { ":${it.name}:$taskName" }
Index: dokka-integration-tests/gradle/projects/template.root.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/template.root.gradle.kts b/dokka-integration-tests/gradle/projects/template.root.gradle.kts
--- a/dokka-integration-tests/gradle/projects/template.root.gradle.kts (revision f39f5a48e6dd13515036021c577e399afdbf7c5a)
+++ b/dokka-integration-tests/gradle/projects/template.root.gradle.kts (revision 8346ca0c56b0b7f0b308bba3f2c549c9a3577f0f)
@@ -4,7 +4,11 @@
allprojects {
repositories {
- mavenLocal()
+ mavenLocal {
+ content {
+ includeGroup("org.jetbrains.dokka")
+ }
+ }
mavenCentral()
google()
maven("https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven") {
@@ -18,6 +22,7 @@
afterEvaluate {
logger.quiet("Gradle version: ${gradle.gradleVersion}")
logger.quiet("Kotlin version: ${properties["dokka_it_kotlin_version"]}")
+ logger.quiet("Dokka version: ${properties["dokka_it_dokka_version"]}")
properties["dokka_it_android_gradle_plugin_version"]?.let { androidVersion ->
logger.quiet("Android version: $androidVersion")
}
Index: dokka-integration-tests/gradle/projects/template.settings.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/template.settings.gradle.kts b/dokka-integration-tests/gradle/projects/template.settings.gradle.kts
--- a/dokka-integration-tests/gradle/projects/template.settings.gradle.kts (revision f39f5a48e6dd13515036021c577e399afdbf7c5a)
+++ b/dokka-integration-tests/gradle/projects/template.settings.gradle.kts (revision 8346ca0c56b0b7f0b308bba3f2c549c9a3577f0f)
@@ -6,6 +6,7 @@
pluginManagement {
val dokka_it_kotlin_version: String by settings
+ val dokka_it_dokka_version: String by settings
val dokka_it_android_gradle_plugin_version: String? by settings
plugins {
@@ -13,12 +14,13 @@
id("org.jetbrains.kotlin.jvm") version dokka_it_kotlin_version
id("org.jetbrains.kotlin.android") version dokka_it_kotlin_version
id("org.jetbrains.kotlin.multiplatform") version dokka_it_kotlin_version
+ id("org.jetbrains.dokka") version dokka_it_dokka_version
}
resolutionStrategy {
eachPlugin {
if (requested.id.id == "org.jetbrains.dokka") {
- useModule("org.jetbrains.dokka:dokka-gradle-plugin:for-integration-tests-SNAPSHOT")
+ useModule("org.jetbrains.dokka:dokka-gradle-plugin:${System.getenv("DOKKA_VERSION")}")
}
if (requested.id.id == "com.android.library") {
@@ -31,7 +33,16 @@
}
}
repositories {
- mavenLocal()
+ mavenLocal {
+ content {
+ includeGroup("org.jetbrains.dokka")
+ }
+ }
+ mavenLocal {
+ content {
+ includeGroup("org.jetbrains.dokka")
+ }
+ }
mavenCentral()
gradlePluginPortal()
google()
Index: dokka-integration-tests/integration-test-utilities/src/main/kotlin/org/jetbrains/dokka/it/gitSubmoduleUtils.kt
===================================================================
diff --git a/dokka-integration-tests/integration-test-utilities/src/main/kotlin/org/jetbrains/dokka/it/gitSubmoduleUtils.kt b/dokka-integration-tests/integration-test-utilities/src/main/kotlin/org/jetbrains/dokka/it/gitSubmoduleUtils.kt
--- a/dokka-integration-tests/integration-test-utilities/src/main/kotlin/org/jetbrains/dokka/it/gitSubmoduleUtils.kt (revision f39f5a48e6dd13515036021c577e399afdbf7c5a)
+++ b/dokka-integration-tests/integration-test-utilities/src/main/kotlin/org/jetbrains/dokka/it/gitSubmoduleUtils.kt (revision b8b944ef0385fc84a2bd6f1635be6bfcd45bf90e)
@@ -39,7 +39,5 @@
private fun removeGitFile(repository: Path) =
repository.toFile()
.listFiles().orEmpty()
- .filter { it.name.toLowerCase() == ".git" }
+ .filter { it.name.equals(".git", ignoreCase = true) }
.forEach { it.delete() }
-
-
Index: dokka-integration-tests/gradle/projects/coroutines/coroutines.diff
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/coroutines/coroutines.diff b/dokka-integration-tests/gradle/projects/coroutines/coroutines.diff
--- a/dokka-integration-tests/gradle/projects/coroutines/coroutines.diff (revision b8b944ef0385fc84a2bd6f1635be6bfcd45bf90e)
+++ b/dokka-integration-tests/gradle/projects/coroutines/coroutines.diff (revision f2dd01750577f3e2f8e608a638085440e1ff0be2)
@@ -1,27 +1,38 @@
diff --git a/build.gradle b/build.gradle
-index e7d405e12..0ca2169fe 100644
+index e7d405e12..236310823 100644
--- a/build.gradle
+++ b/build.gradle
-@@ -107,6 +107,9 @@ allprojects {
+@@ -59,8 +59,9 @@ buildscript {
+ }
+
+ dependencies {
++ def dokkaVersion = System.getenv('DOKKA_VERSION')
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+- classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
++ classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokkaVersion"
+ classpath "org.jetbrains.kotlinx:atomicfu-gradle-plugin:$atomicfu_version"
+ classpath "org.jetbrains.kotlinx:kotlinx-knit:$knit_version"
+ classpath "com.github.node-gradle:gradle-node-plugin:$gradle_node_version"
+@@ -107,6 +108,9 @@ allprojects {
mavenLocal()
}
}
+ repositories {
+ mavenLocal()
+ }
-
+
ext.unpublished = unpublished
-
-@@ -142,6 +145,7 @@ allprojects {
+
+@@ -142,6 +146,7 @@ allprojects {
google()
mavenCentral()
CommunityProjectsBuild.addDevRepositoryIfEnabled(delegate, project)
+ mavenLocal()
}
}
-
+
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
-index ae54ad0f6..4655940a9 100644
+index ae54ad0f6..786cff366 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -25,6 +25,7 @@ repositories {
@@ -30,8 +41,23 @@
}
+ mavenLocal()
}
-
+
val gradleProperties = Properties().apply {
+@@ -49,12 +50,12 @@ dependencies {
+ * our version of Gradle bundles Kotlin 1.4.x and can read metadata only up to 1.5.x,
+ * thus we're excluding stdlib compiled with 1.6.0 from dependencies.
+ */
+- implementation("org.jetbrains.dokka:dokka-gradle-plugin:${version("dokka")}") {
++ implementation("org.jetbrains.dokka:dokka-gradle-plugin:${System.getenv("DOKKA_VERSION")}") {
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk8")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk7")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
+ }
+- implementation("org.jetbrains.dokka:dokka-core:${version("dokka")}") {
++ implementation("org.jetbrains.dokka:dokka-core:${System.getenv("DOKKA_VERSION")}") {
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk8")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk7")
+ exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts
index c2e859f65..43dc4f749 100644
--- a/buildSrc/settings.gradle.kts
@@ -44,7 +70,7 @@
}
}
diff --git a/gradle.properties b/gradle.properties
-index 3d9431be0..b60114bc2 100644
+index 3d9431be0..9af01ef86 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -14,7 +14,7 @@ atomicfu_version=0.21.0
@@ -52,7 +78,7 @@
html_version=0.7.2
lincheck_version=2.18.1
-dokka_version=1.8.10
-+dokka_version=for-integration-tests-SNAPSHOT
++dokka_version=non-existing-sanity-check-SNAPSHOT
byte_buddy_version=1.10.9
reactor_version=3.4.1
reactive_streams_version=1.0.3
@@ -67,4 +93,4 @@
+ mavenLocal()
}
}
-
+
Index: dokka-integration-tests/gradle/projects/serialization/serialization.diff
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/serialization/serialization.diff b/dokka-integration-tests/gradle/projects/serialization/serialization.diff
--- a/dokka-integration-tests/gradle/projects/serialization/serialization.diff (revision b8b944ef0385fc84a2bd6f1635be6bfcd45bf90e)
+++ b/dokka-integration-tests/gradle/projects/serialization/serialization.diff (revision 8346ca0c56b0b7f0b308bba3f2c549c9a3577f0f)
@@ -1,13 +1,29 @@
+diff --git a/build.gradle b/build.gradle
+index 73b566ae..c7224a7a 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -76,9 +76,10 @@ buildscript {
+ }
+
+ dependencies {
++ def dokkaVersion = System.getenv('DOKKA_VERSION')
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
+- classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version"
++ classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokkaVersion"
+ classpath "org.jetbrains.kotlinx:kover:$kover_version"
+ classpath "org.jetbrains.kotlinx:binary-compatibility-validator:$validator_version"
+ classpath "org.jetbrains.kotlinx:kotlinx-knit:$knit_version"
diff --git a/gradle.properties b/gradle.properties
-index 5ef66cd9..51a90924 100644
+index 5ef66cd9..7e7323fd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,7 +13,7 @@ kotlin.version.snapshot=1.9.255-SNAPSHOT
-
+
junit_version=4.12
jackson_version=2.10.0.pr1
-dokka_version=1.8.10
-+dokka_version=for-integration-tests-SNAPSHOT
++dokka_version=non-existing-sanity-check-SNAPSHOT
native.deploy=
validator_version=0.13.2
knit_version=0.5.0-Beta
Index: dokka-integration-tests/cli/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/cli/build.gradle.kts b/dokka-integration-tests/cli/build.gradle.kts
--- a/dokka-integration-tests/cli/build.gradle.kts (revision b5d971c301435e926b2dfaeff96e754bad6ad3d9)
+++ b/dokka-integration-tests/cli/build.gradle.kts (revision f90f6819ae43338e2c9ce98ed55de51424170129)
@@ -5,17 +5,14 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
- id("org.jetbrains.conventions.dokka-integration-test")
+ id("dokkabuild.test-integration")
id("com.github.johnrengelman.shadow")
}
-val dokka_version: String by project
-evaluationDependsOn(":runners:cli")
-evaluationDependsOn(":plugins:base")
-
dependencies {
implementation(kotlin("test-junit5"))
- implementation(projects.integrationTestUtilities)
+ implementation(libs.junit.jupiterApi)
+ implementation(projects.utilities)
}
/* Create a fat base plugin jar for cli tests */
@@ -25,16 +22,31 @@
}
}
+val cliConfiguration: Configuration by configurations.creating {
+ attributes {
+ attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage::class.java, Usage.JAVA_RUNTIME))
+ attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling::class.java, Bundling.SHADOWED))
+ }
+ // we should have single artifact here
+ isTransitive = false
+}
+
dependencies {
- basePluginShadow(projects.plugins.base)
+ cliConfiguration("org.jetbrains.dokka:runner-cli")
+
+ basePluginShadow("org.jetbrains.dokka:plugin-base")
// TODO [beresnev] analysis switcher
- basePluginShadow(project(path = ":subprojects:analysis-kotlin-descriptors", configuration = "shadow"))
+ basePluginShadow("org.jetbrains.dokka:analysis-kotlin-descriptors") {
+ attributes {
+ attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling::class.java, Bundling.SHADOWED))
+ }
+ }
}
val basePluginShadowJar by tasks.register("basePluginShadowJar", ShadowJar::class) {
configurations = listOf(basePluginShadow)
- archiveFileName.set("fat-base-plugin-$dokka_version.jar")
+ archiveFileName.set("fat-base-plugin-${project.version}.jar")
archiveClassifier.set("")
// service files are merged to make sure all Dokka plugins
@@ -43,10 +55,10 @@
}
tasks.integrationTest {
+ dependsOn(cliConfiguration)
+ dependsOn(basePluginShadowJar)
+
inputs.dir(file("projects"))
- val cliJar = tasks.getByPath(":runners:cli:shadowJar") as ShadowJar
- environment("CLI_JAR_PATH", cliJar.archiveFile.get())
+ environment("CLI_JAR_PATH", cliConfiguration.singleFile)
environment("BASE_PLUGIN_JAR_PATH", basePluginShadowJar.archiveFile.get())
- dependsOn(cliJar)
- dependsOn(basePluginShadowJar)
}
Index: dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleExternalDocumentationLinkBuilder.kt
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleExternalDocumentationLinkBuilder.kt b/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleExternalDocumentationLinkBuilder.kt
--- a/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleExternalDocumentationLinkBuilder.kt (revision f06e47af007f16d4dc79acd875697ea10adfce6e)
+++ b/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleExternalDocumentationLinkBuilder.kt (revision c3f4f75b47445dbf6ad674772a0cc919de8393eb)
@@ -56,9 +56,12 @@
* java.net.URL("https://kotlinlang.org/api/kotlinx.serialization/")
* ```
*/
- @Input
+ @Internal
val url: Property<URL> = project.objects.property()
+ @Input // URL is deprecated in gradle inputs
+ internal fun getUrlString() = url.map(URL::toString)
+
/**
* Specifies the exact location of a `package-list` instead of relying on Dokka
* automatically resolving it. Can also be a locally cached file to avoid network calls.
@@ -69,10 +72,13 @@
* rootProject.projectDir.resolve("serialization.package.list").toURL()
* ```
*/
- @Optional
- @Input
+ @Internal
val packageListUrl: Property<URL> = project.objects.property()
+ @Input // URL is deprecated in gradle inputs
+ @Optional
+ internal fun getPackageListUrlString() = packageListUrl.map(URL::toString)
+
override fun build(): ExternalDocumentationLinkImpl = ExternalDocumentationLink(
url = checkNotNull(url.get()) { "url not specified " },
packageListUrl = packageListUrl.orNull,
Index: dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleSourceLinkBuilder.kt
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleSourceLinkBuilder.kt b/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleSourceLinkBuilder.kt
--- a/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleSourceLinkBuilder.kt (revision f06e47af007f16d4dc79acd875697ea10adfce6e)
+++ b/dokka-runners/gradle-plugin-classic/src/main/kotlin/org/jetbrains/dokka/gradle/GradleSourceLinkBuilder.kt (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
@@ -7,7 +7,9 @@
import org.gradle.api.Project
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
-import org.gradle.api.tasks.*
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.Internal
+import org.gradle.api.tasks.Optional
import org.gradle.kotlin.dsl.property
import org.jetbrains.dokka.DokkaConfigurationBuilder
import org.jetbrains.dokka.SourceLinkDefinitionImpl
@@ -69,9 +71,13 @@
* java.net.URL("https://github.com/username/projectname/tree/master/src"))
* ```
*/
- @Input
+ @Internal
val remoteUrl: Property<URL> = project.objects.property()
+ @Input // TODO: URL is deprecated in grapdle inputs
+ internal fun getRemoteUrlString() = remoteUrl.map(URL::toString)
+
+
/**
* Suffix used to append source code line number to the URL. This will help readers navigate
* not only to the file, but to the specific line number of the declaration.
Index: gradle/wrapper/gradle-wrapper.properties
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>ISO-8859-1
===================================================================
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
--- a/gradle/wrapper/gradle-wrapper.properties (revision f06e47af007f16d4dc79acd875697ea10adfce6e)
+++ b/gradle/wrapper/gradle-wrapper.properties (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
@@ -4,7 +4,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Index: gradlew
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/gradlew b/gradlew
--- a/gradlew (revision f06e47af007f16d4dc79acd875697ea10adfce6e)
+++ b/gradlew (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
@@ -83,10 +83,8 @@
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,10 +131,13 @@
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
@@ -144,7 +145,7 @@
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +153,7 @@
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
- # shellcheck disable=SC3045
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -197,11 +198,15 @@
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Index: .github/workflows/preview-publish-ga.yml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.github/workflows/preview-publish-ga.yml b/.github/workflows/preview-publish-ga.yml
--- a/.github/workflows/preview-publish-ga.yml (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
+++ b/.github/workflows/preview-publish-ga.yml (revision d19865a2ea55b50b2acf85f9fcba1adbfaf2673a)
@@ -27,7 +27,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.CoroutinesGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
+ arguments: :dokka-integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.CoroutinesGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/coroutines
- name: Copy files to GitHub Actions Artifacts
@@ -56,7 +56,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.SerializationGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
+ arguments: :dokka-integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.SerializationGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/serialization
- name: Copy files to GitHub Actions Artifacts
@@ -85,7 +85,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:maven:integrationTest --tests org.jetbrains.dokka.it.maven.BiojavaIntegrationTest --stacktrace
+ arguments: :dokka-integration-tests:maven:integrationTest --tests org.jetbrains.dokka.it.maven.BiojavaIntegrationTest --stacktrace
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/biojava
- name: Copy files to GitHub Actions Artifacts
Index: .github/workflows/preview-publish-web-s3.yml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.github/workflows/preview-publish-web-s3.yml b/.github/workflows/preview-publish-web-s3.yml
--- a/.github/workflows/preview-publish-web-s3.yml (revision 95c7ff696fe22f40b880000ce791717d7fb77da2)
+++ b/.github/workflows/preview-publish-web-s3.yml (revision 1003938f440f5b21ffa49ceb0fdc328fcaa818f8)
@@ -24,7 +24,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.CoroutinesGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
+ arguments: :dokka-integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.CoroutinesGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/coroutines
- name: Configure AWS credentials for S3 access
@@ -34,7 +34,7 @@
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-central-1
- name: Copy files to dokka's S3 bucket
- run: ./integration-tests/aws_sync.sh s3://${{ env.bucket-name }} coroutines ../coroutines
+ run: ./dokka-integration-tests/aws_sync.sh s3://${{ env.bucket-name }} coroutines ../coroutines
- name: Print link
run: echo https://dokka-snapshots.s3.eu-central-1.amazonaws.com/${{ env.branch-name }}/coroutines/${GITHUB_SHA::7}/index.html
@@ -55,7 +55,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.SerializationGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
+ arguments: :dokka-integration-tests:gradle:integrationTest --tests org.jetbrains.dokka.it.gradle.kotlin.SerializationGradleIntegrationTest --stacktrace "-Dorg.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=500m"
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/serialization
- name: Configure AWS credentials for S3 access
@@ -65,7 +65,7 @@
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-central-1
- name: Copy files to dokka's S3 bucket
- run: ./integration-tests/aws_sync.sh s3://${{ env.bucket-name }} serialization ../serialization
+ run: ./dokka-integration-tests/aws_sync.sh s3://${{ env.bucket-name }} serialization ../serialization
- name: Print link
run: echo https://dokka-snapshots.s3.eu-central-1.amazonaws.com/${{ env.branch-name }}/serialization/${GITHUB_SHA::7}/index.html
@@ -86,7 +86,7 @@
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
- arguments: :integration-tests:maven:integrationTest --tests org.jetbrains.dokka.it.maven.BiojavaIntegrationTest --stacktrace
+ arguments: :dokka-integration-tests:maven:integrationTest --tests org.jetbrains.dokka.it.maven.BiojavaIntegrationTest --stacktrace
env:
DOKKA_TEST_OUTPUT_PATH: /home/runner/work/dokka/biojava
- name: Configure AWS credentials for S3 access
@@ -96,6 +96,6 @@
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-central-1
- name: Copy files to dokka's S3 bucket
- run: ./integration-tests/aws_sync.sh s3://${{ env.bucket-name }} biojava ../biojava
+ run: ./dokka-integration-tests/aws_sync.sh s3://${{ env.bucket-name }} biojava ../biojava
- name: Print link
run: echo https://dokka-snapshots.s3.eu-central-1.amazonaws.com/${{ env.branch-name }}/biojava/${GITHUB_SHA::7}/index.html
Index: dokka-runners/gradle-plugin-classic/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt b/dokka-runners/gradle-plugin-classic/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt
--- a/dokka-runners/gradle-plugin-classic/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt (revision 2905c85cbe48eff1f7d45e01a15baf65b4470074)
+++ b/dokka-runners/gradle-plugin-classic/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt (revision 1c57d441da14d18e19b8377c198d8814146f4754)
@@ -45,6 +45,7 @@
}
}
+ @Ignore // TODO: find where `maven` plugin is used, which was removed in Gradle 8
@Test
fun `test source sets are suppressed`() {
val dokkaTasks = project.tasks.withType<DokkaTask>().toList()
@@ -65,6 +66,7 @@
}
}
+ @Ignore // TODO: find where `maven` plugin is used, which was removed in Gradle 8
@Test
fun `source sets have non-empty classpath`() {
val dokkaTasks = project.tasks.withType<DokkaTask>().toList()
@@ -72,15 +74,15 @@
project.evaluate()
dokkaTasks.flatMap { it.dokkaSourceSets }
- .filterNot { it.name == "androidTestRelease" && it.suppress.get() } // androidTestRelease has empty classpath, but it makes no sense for suppressed source set
+ .filterNot { it.name == "androidTestRelease" && it.suppress.get() } // androidTestRelease has empty classpath, but it makes no sense for suppressed source set
.forEach { sourceSet ->
- /*
+ /*
- There is no better way of checking for empty classpath at the moment (without resolving dependencies).
- We assume, that an empty classpath can be resolved
- We assume, that a non-empty classpath will not be able to resolve (no repositories defined)
- */
- assertFailsWith<ResolveException>("SourceSet: " + sourceSet.name) { sourceSet.classpath.files }
- }
+ There is no better way of checking for empty classpath at the moment (without resolving dependencies).
+ We assume, that an empty classpath can be resolved
+ We assume, that a non-empty classpath will not be able to resolve (no repositories defined)
+ */
+ assertFailsWith<ResolveException>("SourceSet: " + sourceSet.name) { sourceSet.classpath.files }
+ }
}
}
Index: .github/workflows/tests-smoke.yml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.github/workflows/tests-smoke.yml b/.github/workflows/tests-smoke.yml
--- a/.github/workflows/tests-smoke.yml (revision 1c57d441da14d18e19b8377c198d8814146f4754)
+++ b/.github/workflows/tests-smoke.yml (revision c0f9c5e487f8d61fec1d7313fb2ed821ccbe7f7f)
@@ -26,16 +26,17 @@
- uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
+ arguments: clean
- name: Run tests under Windows
if: matrix.os == 'windows-latest'
# Running tests with the Gradle daemon on windows agents leads to some very strange
# JVM crashes for some reason. Most likely a problem of Gradle/GitHub/Windows server
run: >
- ./gradlew clean test --stacktrace --no-daemon --no-parallel
+ ./gradlew test --stacktrace --no-daemon --no-parallel
"-Dorg.gradle.jvmargs=-Xmx1g -XX:MaxMetaspaceSize=500m"
"-Porg.jetbrains.dokka.javaToolchain.testLauncher=${{ env.JAVA_TEST_VERSION }}"
- name: Run tests under Ubuntu
if: matrix.os != 'windows-latest'
run: >
- ./gradlew clean test --stacktrace
+ ./gradlew test --stacktrace
"-Porg.jetbrains.dokka.javaToolchain.testLauncher=${{ env.JAVA_TEST_VERSION }}"
Index: .github/workflows/tests-thorough.yml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/.github/workflows/tests-thorough.yml b/.github/workflows/tests-thorough.yml
--- a/.github/workflows/tests-thorough.yml (revision 1c57d441da14d18e19b8377c198d8814146f4754)
+++ b/.github/workflows/tests-thorough.yml (revision c0f9c5e487f8d61fec1d7313fb2ed821ccbe7f7f)
@@ -24,16 +24,17 @@
- uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-cleanup: true
+ arguments: clean
- name: Run tests under Windows
if: matrix.os == 'windows-latest'
# Running tests with the Gradle daemon on windows agents leads to some very strange
# JVM crashes for some reason. Most likely a problem of Gradle/GitHub/Windows server
run: >
- ./gradlew clean test --stacktrace --no-daemon --no-parallel
+ ./gradlew test --stacktrace --no-daemon --no-parallel
"-Dorg.gradle.jvmargs=-Xmx1g -XX:MaxMetaspaceSize=500m"
"-Porg.jetbrains.dokka.javaToolchain.testLauncher=${{ matrix.javaVersion }}"
- name: Run tests under Ubuntu/Macos
if: matrix.os != 'windows-latest'
run: >
- ./gradlew clean test --stacktrace
+ ./gradlew test --stacktrace
"-Porg.jetbrains.dokka.javaToolchain.testLauncher=${{ matrix.javaVersion }}"
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.base.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.base.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base.gradle.kts (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ b/build-logic/src/main/kotlin/dokkabuild.base.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,9 +2,7 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
-import org.jetbrains.DokkaBuildProperties
+import dokkabuild.DokkaBuildProperties
/**
* A convention plugin that sets up common config and sensible defaults for all subprojects.
@@ -16,12 +14,7 @@
base
}
-val dokkaBuildProperties: DokkaBuildProperties = extensions.create(DokkaBuildProperties.EXTENSION_NAME)
-
-if (project != rootProject) {
- project.group = rootProject.group
- project.version = rootProject.version
-}
+extensions.create<DokkaBuildProperties>(DokkaBuildProperties.EXTENSION_NAME)
tasks.withType<AbstractArchiveTask>().configureEach {
// https://docs.gradle.org/current/userguide/working_with_files.html#sec:reproducible_archives
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/gradle-plugin.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/gradle-plugin.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.gradle-plugin.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/gradle-plugin.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.gradle-plugin.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/gradle-plugin.gradle.kts (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ b/build-logic/src/main/kotlin/dokkabuild.gradle-plugin.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -2,12 +2,34 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.gradle.kotlin.kotlin-dsl")
- id("org.jetbrains.conventions.maven-publish")
- id("com.gradle.plugin-publish")
- id("org.jetbrains.conventions.base-java")
+ id("dokkabuild.java")
kotlin("jvm")
+ id("dokkabuild.publish-gradle-plugin")
+}
+
+// org.gradle.kotlin.kotlin-dsl sets languageVersion and apiVersion to 1.8 by default starting from Gradle 8.
+// As we need to be compatible with previous Gradle versions, we need to set it back to 1.4.
+// Note: we should do it directly on tasks and not via top-level `kotlin.compilerOptions`
+// because `kotlin-dsl plugin` declares them on task level, and so top-level config is overridden
+tasks.withType<KotlinCompile>().configureEach {
+ compilerOptions {
+ languageVersion.set(dokkaBuild.kotlinLanguageLevel)
+ apiVersion.set(dokkaBuild.kotlinLanguageLevel)
+
+ freeCompilerArgs.addAll(
+ // need 1.4 support, otherwise there might be problems
+ // with Gradle 6.x (it's bundling Kotlin 1.4)
+ "-Xsuppress-version-warnings",
+ "-Xjsr305=strict",
+ "-Xskip-metadata-version-check",
+ )
+ }
+}
+
+tasks.validatePlugins {
+ enableStricterValidation.set(true)
}
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.java.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.java.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-java.gradle.kts (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ b/build-logic/src/main/kotlin/dokkabuild.java.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -2,17 +2,12 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
/**
- * Base configuration for Java projects.
- *
- * This convention plugin contains shared Java config for both the [KotlinJvmPlugin] convention plugin and
- * the Gradle Plugin subproject (which cannot have the `kotlin("jvm")` plugin applied).
+ * Base configuration for Java/JVM projects.
*/
plugins {
- id("org.jetbrains.conventions.base")
+ id("dokkabuild.base")
java
}
@@ -20,7 +15,6 @@
toolchain {
languageVersion.set(dokkaBuild.mainJavaVersion)
}
- withSourcesJar()
}
tasks.withType<Test>().configureEach {
@@ -40,3 +34,7 @@
dependencies {
testImplementation(platform(libs.junit.bom))
}
+
+tasks.processResources {
+ duplicatesStrategy = DuplicatesStrategy.FAIL
+}
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.kotlin-jvm.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.kotlin-jvm.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/kotlin-jvm.gradle.kts (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ b/build-logic/src/main/kotlin/dokkabuild.kotlin-jvm.gradle.kts (revision b3913d0b32e90bee2ccd9fe7325b20be561851a2)
@@ -2,57 +2,35 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
-import org.jetbrains.configureDokkaVersion
-import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-
plugins {
- id("org.jetbrains.conventions.base-java")
+ id("dokkabuild.java")
kotlin("jvm")
}
-configureDokkaVersion()
+val rootProjectsWithoutDependencyOnDokkaCore = listOf("dokka-integration-tests")
kotlin {
- explicitApi = ExplicitApiMode.Strict
-
+ explicitApi()
compilerOptions {
allWarningsAsErrors.set(true)
languageVersion.set(dokkaBuild.kotlinLanguageLevel)
apiVersion.set(dokkaBuild.kotlinLanguageLevel)
+ // These projects know nothing about the `@InternalDokkaApi` annotation, so the Kotlin compiler
+ // will complain about an unresolved opt-in requirement marker and fail the build if it's not excluded.
+ if (rootProject.name !in rootProjectsWithoutDependencyOnDokkaCore) {
+ optIn.addAll(
+ "kotlin.RequiresOptIn",
+ "org.jetbrains.dokka.InternalDokkaApi"
+ )
+ }
+
freeCompilerArgs.addAll(
- listOf(
- // need 1.4 support, otherwise there might be problems
- // with Gradle 6.x (it's bundling Kotlin 1.4)
- "-Xsuppress-version-warnings",
- "-Xjsr305=strict",
- "-Xskip-metadata-version-check",
- )
+ // need 1.4 support, otherwise there might be problems
+ // with Gradle 6.x (it's bundling Kotlin 1.4)
+ "-Xsuppress-version-warnings",
+ "-Xjsr305=strict",
+ "-Xskip-metadata-version-check",
)
- }
-}
-
-val projectsWithoutInternalDokkaApiUsage = setOf(
- ":integration-tests",
- ":integration-tests:gradle",
- ":integration-tests:maven",
- ":integration-tests:cli"
-)
-
-tasks.withType<KotlinCompile>().configureEach {
- // By path because Dokka has multiple projects with the same name (i.e. 'cli')
- if (project.path in projectsWithoutInternalDokkaApiUsage) {
- return@configureEach
- }
- compilerOptions {
- freeCompilerArgs.addAll(
- listOf(
- "-opt-in=kotlin.RequiresOptIn",
- "-opt-in=org.jetbrains.dokka.InternalDokkaApi",
- )
- )
}
}
Index: build-logic/src/main/kotlin/dokkabuild.publish-base.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/dokkabuild.publish-base.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.publish-base.gradle.kts
new file mode 100644
--- /dev/null (revision c08b7ae9694129e963c9c5e7db8769067fc77c6c)
+++ b/build-logic/src/main/kotlin/dokkabuild.publish-base.gradle.kts (revision c08b7ae9694129e963c9c5e7db8769067fc77c6c)
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ `maven-publish`
+ signing
+}
+
+publishing {
+ repositories {
+ maven {
+ name = "mavenCentral"
+ url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
+ credentials {
+ username = System.getenv("DOKKA_SONATYPE_USER")
+ password = System.getenv("DOKKA_SONATYPE_PASSWORD")
+ }
+ }
+ maven {
+ name = "spaceDev"
+ url = uri("https://maven.pkg.jetbrains.space/kotlin/p/dokka/dev")
+ credentials {
+ username = System.getenv("DOKKA_SPACE_PACKAGES_USER")
+ password = System.getenv("DOKKA_SPACE_PACKAGES_SECRET")
+ }
+ }
+ maven {
+ name = "spaceTest"
+ url = uri("https://maven.pkg.jetbrains.space/kotlin/p/dokka/test")
+ credentials {
+ username = System.getenv("DOKKA_SPACE_PACKAGES_USER")
+ password = System.getenv("DOKKA_SPACE_PACKAGES_SECRET")
+ }
+ }
+ // Publish to a project-local Maven directory, for verification. To test, run:
+ // ./gradlew publishAllPublicationsToProjectLocalRepository
+ // and check $rootDir/build/maven-project-local
+ maven {
+ name = "projectLocal"
+ url = uri(rootProject.layout.buildDirectory.dir("maven-project-local"))
+ }
+ }
+
+ publications.withType<MavenPublication>().configureEach {
+ pom {
+ name.convention("Dokka ${project.name}")
+ description.convention("Dokka is an API documentation engine for Kotlin")
+ url.convention("https://github.com/Kotlin/dokka")
+
+ licenses {
+ license {
+ name.convention("The Apache Software License, Version 2.0")
+ url.convention("https://www.apache.org/licenses/LICENSE-2.0.txt")
+ distribution.convention("repo")
+ }
+ }
+
+ developers {
+ developer {
+ id.convention("JetBrains")
+ name.convention("JetBrains Team")
+ organization.convention("JetBrains")
+ organizationUrl.convention("https://www.jetbrains.com")
+ }
+ }
+
+ scm {
+ connection.convention("scm:git:git://github.com/Kotlin/dokka.git")
+ url.convention("https://github.com/Kotlin/dokka")
+ }
+ }
+ }
+}
+
+signing {
+ useInMemoryPgpKeys(
+ System.getenv("DOKKA_SIGN_KEY_ID")?.takeIf(String::isNotBlank),
+ System.getenv("DOKKA_SIGN_KEY")?.takeIf(String::isNotBlank),
+ System.getenv("DOKKA_SIGN_KEY_PASSPHRASE")?.takeIf(String::isNotBlank),
+ )
+ sign(publishing.publications)
+ setRequired(provider { !project.version.toString().endsWith("-SNAPSHOT") })
+}
+
+// This is a hack for a Gradle 8 problem, see https://github.com/gradle/gradle/issues/26091
+//
+// Fails with the following error otherwise:
+// > Task ':runner-gradle-classic:publishDokkaPluginMarkerMavenPublicationToSpaceTestRepository' uses
+// > this output of task ':runner-gradle-classic:signPluginMavenPublication' without declaring an
+// > explicit or implicit dependency.
+tasks.withType<AbstractPublishToMaven>().configureEach {
+ val signingTasks = tasks.withType<Sign>()
+ mustRunAfter(signingTasks)
+}
Index: build-logic/src/main/kotlin/dokkabuild.publish-gradle-plugin.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/dokkabuild.publish-gradle-plugin.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.publish-gradle-plugin.gradle.kts
new file mode 100644
--- /dev/null (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
+++ b/build-logic/src/main/kotlin/dokkabuild.publish-gradle-plugin.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.PublicationName
+
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.publish-base")
+ id("com.gradle.plugin-publish")
+}
+
+@Suppress("UnstableApiUsage")
+gradlePlugin {
+ website.set("https://kotl.in/dokka")
+ vcsUrl.set("https://github.com/kotlin/dokka.git")
+}
+
+// com.gradle.plugin-publish configures publication in afterEvaluate block
+// so to be able to configure it directly in build scripts (f.e. to change artifactId) we need to register it earlier
+// more info: https://docs.gradle.org/current/userguide/java_gradle_plugin.html#maven_publish_plugin
+publishing.publications.register<MavenPublication>(PublicationName.GRADLE_PLUGIN)
+
+// com.gradle.plugin-publish configures javadoc only for the main plugin artifact,
+// so we need to link it manually to other publications
+// specifically with artifact `org.jetbrains.dokka.gradle.plugin`
+// which is used to resolve plugins via `plugins { id("org.jetbrains.dokka") }`
+// it's not needed for gradle plugin portal, but needed for Maven Central
+// NOTE: it should be configured in `afterEvaluate`
+// because `javadocJar` task is created in `afterEvaluate` block in `com.gradle.plugin-publish` plugin
+afterEvaluate {
+ publishing.publications.withType<MavenPublication>()
+ .matching { it.name != PublicationName.GRADLE_PLUGIN }
+ .configureEach {
+ artifact(tasks.named("javadocJar"))
+ }
+}
Index: build-logic/src/main/kotlin/dokkabuild.publish-jvm.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/dokkabuild.publish-jvm.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.publish-jvm.gradle.kts
new file mode 100644
--- /dev/null (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
+++ b/build-logic/src/main/kotlin/dokkabuild.publish-jvm.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.PublicationName
+
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.java")
+ id("dokkabuild.publish-base")
+}
+
+java {
+ withSourcesJar()
+ withJavadocJar()
+}
+
+publishing.publications.register<MavenPublication>(PublicationName.JVM) {
+ from(components["java"])
+}
Index: build-logic/src/main/kotlin/dokkabuild.publish-shadow.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/dokkabuild.publish-shadow.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.publish-shadow.gradle.kts
new file mode 100644
--- /dev/null (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
+++ b/build-logic/src/main/kotlin/dokkabuild.publish-shadow.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+import dokkabuild.PublicationName
+
+/*
+ * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+plugins {
+ id("dokkabuild.java")
+ id("dokkabuild.publish-base")
+ id("com.github.johnrengelman.shadow")
+}
+
+java {
+ withSourcesJar()
+ withJavadocJar()
+}
+
+tasks.shadowJar {
+ // separate directory because otherwise Gradle complains about multiple tasks writing into the same file
+ destinationDirectory.set(project.layout.buildDirectory.dir("shadowLibs"))
+ // removes the `-all` classifier from the artifact name
+ archiveClassifier.set("")
+}
+
+publishing.publications.register<MavenPublication>(PublicationName.JVM) {
+ // shadow.component call should be after the shadowJar task is configured in a build script,
+ // because if not, shadow uses the wrong archiveFile (as we change destinationDirectory and archiveClassifier)
+ shadow.component(this)
+ artifact(tasks.named("sourcesJar"))
+ artifact(tasks.named("javadocJar"))
+}
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.setup-html-frontend-files.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.setup-html-frontend-files.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-html-frontend-files.gradle.kts (revision 1ac627a2c5a689e690fd9f1135ecc86bab2b20f3)
+++ b/build-logic/src/main/kotlin/dokkabuild.setup-html-frontend-files.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,8 +2,6 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
/**
@@ -11,7 +9,7 @@
*/
plugins {
- id("org.jetbrains.conventions.base")
+ id("dokkabuild.base")
}
/** Apply a distinct attribute to the incoming/outgoing configuration */
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/maven-cli-setup.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-cli-setup.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.setup-maven-cli.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/maven-cli-setup.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.setup-maven-cli.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/maven-cli-setup.gradle.kts (revision 1003938f440f5b21ffa49ceb0fdc328fcaa818f8)
+++ b/build-logic/src/main/kotlin/dokkabuild.setup-maven-cli.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,8 +2,6 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
import org.gradle.kotlin.dsl.support.serviceOf
/**
@@ -45,7 +43,7 @@
mavenInstallDir.convention(layout.buildDirectory.dir("apache-maven"))
val isWindowsProvider =
- providers.systemProperty("os.name").map { "win" in it.toLowerCase() }
+ providers.systemProperty("os.name").map { "win" in it.lowercase() }
mvn.convention(
providers.zip(mavenInstallDir, isWindowsProvider) { mavenInstallDir, isWindows ->
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.test-integration.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.test-integration.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/dokka-integration-test.gradle.kts (revision 0ab2f67e0af9d1583047de561ef32a8ee77f31c2)
+++ b/build-logic/src/main/kotlin/dokkabuild.test-integration.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -2,13 +2,11 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
plugins {
- id("org.jetbrains.conventions.kotlin-jvm")
+ id("dokkabuild.kotlin-jvm")
}
val integrationTestSourceSet: SourceSet = sourceSets.create("integrationTest") {
@@ -59,7 +57,6 @@
maxParallelForks = parallelism
}
-
environment(
"isExhaustive",
project.properties["dokka_integration_test_is_exhaustive"]?.toString()?.toBoolean()
@@ -75,7 +72,3 @@
showStackTraces = true
}
}
-
-tasks.check {
- dependsOn(integrationTest)
-}
Index: build-logic/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt b/build-logic/src/main/kotlin/dokkabuild/DokkaBuildProperties.kt
rename from build-logic/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt
rename to build-logic/src/main/kotlin/dokkabuild/DokkaBuildProperties.kt
--- a/build-logic/src/main/kotlin/org/jetbrains/DokkaBuildProperties.kt (revision 1ac627a2c5a689e690fd9f1135ecc86bab2b20f3)
+++ b/build-logic/src/main/kotlin/dokkabuild/DokkaBuildProperties.kt (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -2,7 +2,7 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains
+package dokkabuild
import org.gradle.api.provider.Provider
import org.gradle.api.provider.ProviderFactory
Index: dokka-integration-tests/integration-test-utilities/build.gradle.kts
===================================================================
diff --git a/dokka-integration-tests/integration-test-utilities/build.gradle.kts b/dokka-integration-tests/integration-test-utilities/build.gradle.kts
--- a/dokka-integration-tests/integration-test-utilities/build.gradle.kts (revision 1ac627a2c5a689e690fd9f1135ecc86bab2b20f3)
+++ b/dokka-integration-tests/integration-test-utilities/build.gradle.kts (revision 1fe49876c61d07a72e26fbf54c28dc44ddd53f7c)
@@ -3,7 +3,7 @@
*/
plugins {
- id("org.jetbrains.conventions.kotlin-jvm")
+ id("dokkabuild.kotlin-jvm")
}
dependencies {
Index: build-logic/README.md
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/README.md b/build-logic/README.md
--- a/build-logic/README.md (revision 8c6a479b4f663e8c4aa8b127b1fc962366a5b774)
+++ b/build-logic/README.md (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -1,7 +1,18 @@
-# About build-logic Module
+# build-logic
+
+This project aims to share common build logic between subprojects.
+
+In principle, this is similar to `buildSrc`, but this project utilizes [composite builds][1] to avoid various
+[inconvenient side effects][2] of `buildSrc`.
+
+For more information, see [Sharing Build Logic between Subprojects][3]
-This module aims to share common build logic for whole projects, previously we were using [buildSrc](https://docs.gradle.org/7.6/userguide/organizing_gradle_projects.html#sec:build_sources),
-but for some reasons like "A change in buildSrc causes the whole project to become out-of-date", we are migrating to [composite builds](https://docs.gradle.org/7.6/userguide/composite_builds.html),
-which avoids the side effects of buildSrc.
+___
-For more information, you can ref https://proandroiddev.com/stop-using-gradle-buildsrc-use-composite-builds-instead-3c38ac7a2ab3.
\ No newline at end of file
+Note: the filename pattern used for convention plugins is inspired by how Gradle configures its
+own convention plugins; [example project here][4].
+
+[1]: https://docs.gradle.org/7.6/userguide/composite_builds.html
+[2]: https://proandroiddev.com/stop-using-gradle-buildsrc-use-composite-builds-instead-3c38ac7a2ab3
+[3]: https://docs.gradle.org/8.4/userguide/sharing_build_logic_between_subprojects.html
+[4]: https://github.com/gradle/gradle/tree/b165da7de15e70afb6cac564bf4aadf16aa157b3/build-logic/jvm/src/main/kotlin
Index: build-logic/src/main/kotlin/org/jetbrains/conventions/base-unit-test.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-unit-test.gradle.kts b/build-logic/src/main/kotlin/dokkabuild.test-k2.gradle.kts
rename from build-logic/src/main/kotlin/org/jetbrains/conventions/base-unit-test.gradle.kts
rename to build-logic/src/main/kotlin/dokkabuild.test-k2.gradle.kts
--- a/build-logic/src/main/kotlin/org/jetbrains/conventions/base-unit-test.gradle.kts (revision 1ac627a2c5a689e690fd9f1135ecc86bab2b20f3)
+++ b/build-logic/src/main/kotlin/dokkabuild.test-k2.gradle.kts (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -2,15 +2,13 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains.conventions
-
/**
- * Utility to run ynit tests for K1 and K2 (analysis API).
+ * Utility to run unit tests for K1 and K2 (analysis API).
*/
plugins {
- id("org.jetbrains.conventions.base")
- id("org.jetbrains.conventions.base-java")
+ id("dokkabuild.base")
+ id("dokkabuild.java")
}
val descriptorsTestConfiguration: Configuration by configurations.creating {
Index: build-logic/src/main/kotlin/org/jetbrains/publication.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/publication.kt b/build-logic/src/main/kotlin/dokkabuild/PublicationUtils.kt
rename from build-logic/src/main/kotlin/org/jetbrains/publication.kt
rename to build-logic/src/main/kotlin/dokkabuild/PublicationUtils.kt
--- a/build-logic/src/main/kotlin/org/jetbrains/publication.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ b/build-logic/src/main/kotlin/dokkabuild/PublicationUtils.kt (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -2,124 +2,26 @@
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
-package org.jetbrains
+package dokkabuild
-import com.github.jengelman.gradle.plugins.shadow.ShadowExtension
import org.gradle.api.Project
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
-import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
-import org.gradle.kotlin.dsl.*
-import org.gradle.plugins.signing.SigningExtension
-import org.jetbrains.DokkaPublicationChannel.*
-import java.net.URI
-
-class DokkaPublicationBuilder {
- enum class Component {
- Java, Shadow
- }
+import org.gradle.kotlin.dsl.configure
+import org.gradle.kotlin.dsl.withType
- var artifactId: String? = null
- var component: Component = Component.Java
+object PublicationName {
+ const val JVM = "jvm"
+ const val GRADLE_PLUGIN = "pluginMaven"
}
-
-fun Project.registerDokkaArtifactPublication(
- publicationName: String,
- configure: DokkaPublicationBuilder.() -> Unit
+fun Project.overridePublicationArtifactId(
+ artifactId: String,
+ publicationName: String = PublicationName.JVM
) {
- configure<PublishingExtension> {
- publications {
- register<MavenPublication>(publicationName) {
- val builder = DokkaPublicationBuilder().apply(configure)
- artifactId = builder.artifactId
- when (builder.component) {
- DokkaPublicationBuilder.Component.Java -> from(components["java"])
- DokkaPublicationBuilder.Component.Shadow -> run {
- extensions.getByType<ShadowExtension>().component(this)
- artifact(tasks["sourcesJar"])
- }
- }
- }
- }
- }
-
- configureSpacePublicationIfNecessary(publicationName)
- configureSonatypePublicationIfNecessary(publicationName)
- createDokkaPublishTaskIfNecessary()
-}
-
-fun Project.configureSpacePublicationIfNecessary(vararg publications: String) {
- if (SPACE_DOKKA_DEV in this.publicationChannels) {
- configure<PublishingExtension> {
- repositories {
- /* already registered */
- findByName(SPACE_DOKKA_DEV.name)?.let { return@repositories }
- maven {
- name = SPACE_DOKKA_DEV.name
- url = URI.create("https://maven.pkg.jetbrains.space/kotlin/p/dokka/dev")
- credentials {
- username = System.getenv("SPACE_PACKAGES_USER")
- password = System.getenv("SPACE_PACKAGES_SECRET")
- }
- }
- }
- }
- }
-
- whenEvaluated {
- tasks.withType<PublishToMavenRepository> {
- if (this.repository.name == SPACE_DOKKA_DEV.name) {
- this.isEnabled = this.isEnabled && publication.name in publications
- if (!this.isEnabled) {
- this.group = "disabled"
- }
- }
- }
- }
-}
-
-fun Project.createDokkaPublishTaskIfNecessary() {
- tasks.maybeCreate("dokkaPublish").run {
- if (publicationChannels.any { it.isSpaceRepository() }) {
- dependsOn(tasks.named("publish"))
- }
-
- if (publicationChannels.any { it.isMavenRepository() }) {
- dependsOn(tasks.named("publishToSonatype"))
- }
-
- if (publicationChannels.any { it.isGradlePluginPortal() }) {
- dependsOn(tasks.named("publishPlugins"))
- }
- }
-}
-
-fun Project.configureSonatypePublicationIfNecessary(vararg publications: String) {
- if (publicationChannels.any { it.isMavenRepository() }) {
- signPublicationsIfKeyPresent(*publications)
- }
-}
-
-@Suppress("UnstableApiUsage")
-private fun Project.signPublicationsIfKeyPresent(vararg publications: String) {
- val signingKeyId: String? = System.getenv("SIGN_KEY_ID")
- val signingKey: String? = System.getenv("SIGN_KEY")
- val signingKeyPassphrase: String? = System.getenv("SIGN_KEY_PASSPHRASE")
-
- if (!signingKey.isNullOrBlank()) {
- extensions.configure<SigningExtension>("signing") {
- if (signingKeyId?.isNotBlank() == true) {
- useInMemoryPgpKeys(signingKeyId, signingKey, signingKeyPassphrase)
- } else {
- useInMemoryPgpKeys(signingKey, signingKeyPassphrase)
- }
- publications.forEach { publicationName ->
- extensions.getByType<PublishingExtension>()
- .publications
- .findByName(publicationName)
- ?.let { sign(it) }
- }
+ extensions.configure<PublishingExtension> {
+ publications.withType<MavenPublication>().named(publicationName) {
+ this.artifactId = artifactId
}
}
}
Index: build-logic/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt b/build-logic/src/main/kotlin/dokkabuild/internal/GradleKotlinDslAccessors.kt
rename from build-logic/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt
rename to build-logic/src/main/kotlin/dokkabuild/internal/GradleKotlinDslAccessors.kt
--- a/build-logic/src/main/kotlin/org/jetbrains/internal/gradleKotlinDslAccessors.kt (revision 1ac627a2c5a689e690fd9f1135ecc86bab2b20f3)
+++ b/build-logic/src/main/kotlin/dokkabuild/internal/GradleKotlinDslAccessors.kt (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -8,7 +8,7 @@
import org.gradle.api.Project
import org.gradle.accessors.dm.LibrariesForLibs
-import org.jetbrains.DokkaBuildProperties
+import dokkabuild.DokkaBuildProperties
/*
* Utility functions for accessing Gradle extensions that are created by convention plugins.
Index: dokka-subprojects/analysis-kotlin-descriptors/README.md
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-descriptors/README.md b/dokka-subprojects/analysis-kotlin-descriptors/README.md
--- a/dokka-subprojects/analysis-kotlin-descriptors/README.md (revision 8c6a479b4f663e8c4aa8b127b1fc962366a5b774)
+++ b/dokka-subprojects/analysis-kotlin-descriptors/README.md (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -1,8 +1,21 @@
# Analysis: Kotlin descriptors
-An internal descriptor-based implementation for [analysis-kotlin-api](../analysis-kotlin-api), also known as K1 or
-"the old compiler".
+An internal descriptor-based implementation for [analysis-kotlin-api](../analysis-kotlin-api). This implementation is
+also known as K1 or "the old compiler".
-Contains no stable public API and must not be used by anyone directly, only via [analysis-kotlin-api](../analysis-kotlin-api).
+Contains no stable public API and **must not** be used by anyone directly, only via [analysis-kotlin-api](../analysis-kotlin-api).
Can be added as a runtime dependency by the runner.
+
+## Shadowing
+
+The `.jar` produced by this project shadows all dependencies. There are several reasons for it:
+
+1. Some of the artifacts Dokka depends on, like `com.jetbrains.intellij.java:java-psi`, are not
+ published to Maven Central, so the users would need to add custom repositories to their build scripts.
+2. There are many intertwining transitive dependencies of different versions, as well as direct copy-paste,
+ that can lead to runtime errors due to classpath conflicts, so it's best to let Gradle take care of
+ dependency resolution, and then pack everything into a single jar in a single place that can be tuned.
+3. The `compiler` and `ide` subprojects are internal details that are likely to change, so packing everything into
+ a single jar provides some stability for the CLI users, while not exposing too many internals. Publishing
+ the compiler, ide and other subprojects separately would also make it difficult to refactor the project structure.
Index: dokka-subprojects/analysis-kotlin-symbols/README.md
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-subprojects/analysis-kotlin-symbols/README.md b/dokka-subprojects/analysis-kotlin-symbols/README.md
--- a/dokka-subprojects/analysis-kotlin-symbols/README.md (revision 8c6a479b4f663e8c4aa8b127b1fc962366a5b774)
+++ b/dokka-subprojects/analysis-kotlin-symbols/README.md (revision ca4c3e2dbbba0f8db6cab66ff939d4b2a2f1c0d0)
@@ -1,8 +1,18 @@
# Analysis: Kotlin symbols
-An internal symbols-based implementation for [analysis-kotlin-api](../analysis-kotlin-api), also known as K2 or
-"the new compiler".
+An internal symbols-based implementation for [analysis-kotlin-api](../analysis-kotlin-api). This implementation is
+also known as K2 or "the new compiler".
Contains no stable public API and must not be used by anyone directly, only via [analysis-kotlin-api](../analysis-kotlin-api).
Can be added as a runtime dependency by the runner.
+
+## Shadowing
+
+The `.jar` produced by this project shadows all dependencies. There are several reasons for it:
+
+1. Some of the artifacts Dokka depends on, like `com.jetbrains.intellij.java:java-psi`, are not
+ published to Maven Central, so the users would need to add custom repositories to their build scripts.
+2. There are many intertwining transitive dependencies of different versions, as well as direct copy-paste,
+ that can lead to runtime errors due to classpath conflicts, so it's best to let Gradle take care of
+ dependency resolution, and then pack everything into a single jar in a single place that can be tuned.
Index: dokka-integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt b/dokka-integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt
--- a/dokka-integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt (revision c08b7ae9694129e963c9c5e7db8769067fc77c6c)
+++ b/dokka-integration-tests/gradle/src/main/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleIntegrationTest.kt (revision 8346ca0c56b0b7f0b308bba3f2c549c9a3577f0f)
@@ -36,7 +36,7 @@
.withTestKitDir(File("build", "gradle-test-kit").absoluteFile)
.withArguments(
listOfNotNull(
- "-Pkotlin_version=${buildVersions.kotlinVersion}",
+ "-Pdokka_it_dokka_version=${System.getenv("DOKKA_VERSION")}",
"-Pdokka_it_kotlin_version=${buildVersions.kotlinVersion}",
buildVersions.androidGradlePluginVersion?.let { androidVersion ->
"-Pdokka_it_android_gradle_plugin_version=$androidVersion"
Index: docs-developer/src/doc/docs/developer_guide/architecture/extension_points/core_extension_points.md
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/docs-developer/src/doc/docs/developer_guide/architecture/extension_points/core_extension_points.md b/docs-developer/src/doc/docs/developer_guide/architecture/extension_points/core_extension_points.md
--- a/docs-developer/src/doc/docs/developer_guide/architecture/extension_points/core_extension_points.md (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/docs-developer/src/doc/docs/developer_guide/architecture/extension_points/core_extension_points.md (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -98,6 +98,6 @@
`PostAction` can be used for when you want to run some actions after the documentation has been generated - for example,
if you want to move some files around or log some informational messages.
-Dokka's [Versioning plugin](https://github.com/Kotlin/dokka/tree/master/plugins/versioning) utilizes `PostAction`
+Dokka's [Versioning plugin](https://github.com/Kotlin/dokka/tree/master/dokka-subprojects/plugin-versioning) utilizes `PostAction`
to move generated documentation to the versioned directories.
Index: dokka-integration-tests/gradle/projects/it-basic-groovy/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/it-basic-groovy/build.gradle b/dokka-integration-tests/gradle/projects/it-basic-groovy/build.gradle
--- a/dokka-integration-tests/gradle/projects/it-basic-groovy/build.gradle (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/projects/it-basic-groovy/build.gradle (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -31,7 +31,7 @@
remoteUrl.set(
new URL(
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic-groovy/src/main"
+ "dokka-integration-tests/gradle/projects/it-basic-groovy/src/main"
)
)
}
Index: dokka-integration-tests/gradle/projects/it-basic/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/it-basic/build.gradle.kts b/dokka-integration-tests/gradle/projects/it-basic/build.gradle.kts
--- a/dokka-integration-tests/gradle/projects/it-basic/build.gradle.kts (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/projects/it-basic/build.gradle.kts (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -51,7 +51,7 @@
remoteUrl.set(
URL(
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic/src/main"
+ "dokka-integration-tests/gradle/projects/it-basic/src/main"
)
)
}
Index: dokka-integration-tests/gradle/projects/it-collector-0/moduleA/build.gradle.kts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/projects/it-collector-0/moduleA/build.gradle.kts b/dokka-integration-tests/gradle/projects/it-collector-0/moduleA/build.gradle.kts
--- a/dokka-integration-tests/gradle/projects/it-collector-0/moduleA/build.gradle.kts (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/projects/it-collector-0/moduleA/build.gradle.kts (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -13,7 +13,7 @@
tasks.withType<org.jetbrains.dokka.gradle.AbstractDokkaTask> {
pluginsMapConfiguration.set(
mapOf(
- "org.jetbrains.dokka.base.DokkaBase" to """{ "homepageLink" : "https://github.com/Kotlin/dokka/tree/master/integration-tests/gradle/projects/it-multimodule-0/" }"""
+ "org.jetbrains.dokka.base.DokkaBase" to """{ "homepageLink" : "https://github.com/Kotlin/dokka/tree/master/dokka-integration-tests/gradle/projects/it-multimodule-0/" }"""
)
)
}
Index: dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt
--- a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/AbstractGradleCachingIntegrationTest.kt (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -104,7 +104,7 @@
assertTrue(
allHtmlFiles().any { file ->
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic/" +
+ "dokka-integration-tests/gradle/projects/it-basic/" +
"src/main/kotlin/it/basic/PublicClass.kt" in file.readText()
},
"Expected `PublicClass` source link to GitHub"
@@ -113,7 +113,7 @@
assertTrue(
allHtmlFiles().any { file ->
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic/" +
+ "dokka-integration-tests/gradle/projects/it-basic/" +
"src/main/java/it/basic/java/SampleJavaClass.java" in file.readText()
},
"Expected `SampleJavaClass` source link to GitHub"
Index: dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt
--- a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -111,7 +111,7 @@
assertTrue(
allHtmlFiles().any { file ->
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic/" +
+ "dokka-integration-tests/gradle/projects/it-basic/" +
"src/main/kotlin/it/basic/PublicClass.kt" in file.readText()
},
"Expected `PublicClass` source link to GitHub"
@@ -120,7 +120,7 @@
assertTrue(
allHtmlFiles().any { file ->
"https://github.com/Kotlin/dokka/tree/master/" +
- "integration-tests/gradle/projects/it-basic/" +
+ "dokka-integration-tests/gradle/projects/it-basic/" +
"src/main/java/it/basic/java/SampleJavaClass.java" in file.readText()
},
"Expected `SampleJavaClass` source link to GitHub"
Index: dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt
--- a/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt (revision 496c0e323e74e790df3d9c20f7f574d70727275a)
+++ b/dokka-integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/MultiModule0IntegrationTest.kt (revision ee62c25d89917d18b293d60ef368897f9a8c520a)
@@ -82,7 +82,7 @@
htmlsWithHomepageLink.forEach {
assertTrue(
it.readText().contains(
- """https://github.com/Kotlin/dokka/tree/master/integration-tests/gradle/projects/it-multimodule-0/"""
+ """https://github.com/Kotlin/dokka/tree/master/dokka-integration-tests/gradle/projects/it-multimodule-0/"""
),
"File ${it.absolutePath} doesn't contain link to homepage"
)
Index: build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/DokkaPublicationChannel.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,66 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-@file:Suppress("LocalVariableName")
-
-package org.jetbrains
-
-import org.gradle.api.Project
-
-enum class DokkaPublicationChannel {
- SPACE_DOKKA_DEV,
- MAVEN_CENTRAL,
- MAVEN_CENTRAL_SNAPSHOT,
- GRADLE_PLUGIN_PORTAL;
-
- val acceptedDokkaVersionTypes: List<DokkaVersionType>
- get() = when(this) {
- MAVEN_CENTRAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC)
- MAVEN_CENTRAL_SNAPSHOT -> listOf(DokkaVersionType.SNAPSHOT)
- SPACE_DOKKA_DEV -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC, DokkaVersionType.DEV, DokkaVersionType.SNAPSHOT)
- GRADLE_PLUGIN_PORTAL -> listOf(DokkaVersionType.RELEASE, DokkaVersionType.RC)
- }
-
- fun isSpaceRepository() = this == SPACE_DOKKA_DEV
-
- fun isMavenRepository() = this == MAVEN_CENTRAL || this == MAVEN_CENTRAL_SNAPSHOT
-
- fun isGradlePluginPortal() = this == GRADLE_PLUGIN_PORTAL
-
- companion object {
- fun fromPropertyString(value: String): DokkaPublicationChannel = when (value) {
- "space-dokka-dev" -> SPACE_DOKKA_DEV
- "maven-central-release" -> MAVEN_CENTRAL
- "maven-central-snapshot" -> MAVEN_CENTRAL_SNAPSHOT
- "gradle-plugin-portal" -> GRADLE_PLUGIN_PORTAL
- else -> throw IllegalArgumentException("Unknown dokka_publication_channel=$value")
- }
- }
-}
-
-val Project.publicationChannels: Set<DokkaPublicationChannel>
- get() {
- val publicationChannel = this.properties["dokka_publication_channel"]?.toString()
- val publicationChannels = this.properties["dokka_publication_channels"]?.toString()
- if (publicationChannel != null && publicationChannels != null) {
- throw IllegalArgumentException(
- "Only one of dokka_publication_channel and dokka_publication_channel*s* can be set. Found: \n" +
- "dokka_publication_channel=$publicationChannel\n" +
- "dokka_publication_channels=$publicationChannels"
- )
- }
-
- if (publicationChannel != null) {
- return setOf(DokkaPublicationChannel.fromPropertyString(publicationChannel))
- }
-
- if (publicationChannels != null) {
- return publicationChannels.split("&").map { channel ->
- DokkaPublicationChannel.fromPropertyString(channel)
- }.toSet()
- }
-
- return emptySet()
- }
-
Index: build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt b/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/DokkaVersionType.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,12 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains
-
-enum class DokkaVersionType(val suffix: Regex) {
- RELEASE("^$".toRegex()),
- RC("RC\\d?".toRegex()),
- SNAPSHOT("SNAPSHOT".toRegex()),
- DEV("dev-\\d+".toRegex());
-}
Index: build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt b/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/ValidatePublications.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,49 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains
-
-import org.gradle.api.DefaultTask
-import org.gradle.api.GradleException
-import org.gradle.api.Project
-import org.gradle.api.artifacts.Dependency
-import org.gradle.api.artifacts.ProjectDependency
-import org.gradle.api.publish.PublishingExtension
-import org.gradle.api.publish.maven.MavenPublication
-import org.gradle.api.tasks.TaskAction
-import org.gradle.kotlin.dsl.findByType
-
-open class ValidatePublications : DefaultTask() {
-
- init {
- group = "verification"
- project.tasks.named("check") {
- dependsOn(this@ValidatePublications)
- }
- }
-
- @TaskAction
- fun validatePublicationConfiguration() {
- project.subprojects.forEach { subProject ->
- val publishing = subProject.extensions.findByType<PublishingExtension>() ?: return@forEach
- publishing.publications
- .filterIsInstance<MavenPublication>()
- .filter { it.version == project.dokkaVersion }
- .forEach { _ ->
- subProject.assertPublicationVersion()
- }
- }
- }
-
- private fun Project.assertPublicationVersion() {
- val versionTypeMatchesPublicationChannels = publicationChannels.all { publicationChannel ->
- publicationChannel.acceptedDokkaVersionTypes.any { acceptedVersionType ->
- acceptedVersionType == dokkaVersionType
- }
- }
- if (!versionTypeMatchesPublicationChannels) {
- throw AssertionError("Wrong version $dokkaVersion for configured publication channels $publicationChannels")
- }
- }
-}
Index: build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt b/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/taskUtils.kt (revision 467fb3b7b2f553d33954c76501274574b50435ae)
+++ /dev/null (revision 467fb3b7b2f553d33954c76501274574b50435ae)
@@ -1,26 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains
-
-import org.gradle.api.Project
-import org.gradle.api.Task
-
-fun Task.dependsOnMavenLocalPublication() {
- project.rootProject.allprojects.forEach { otherProject ->
- otherProject.invokeWhenEvaluated { evaluatedProject ->
- evaluatedProject.tasks.findByName("publishToMavenLocal")?.let { publishingTask ->
- this.dependsOn(publishingTask)
- }
- }
- }
-}
-
-val Project.isLocalPublication: Boolean
- get() = gradle.startParameter.taskNames.any {
- it.endsWith("publishToMavenLocal", ignoreCase = true) ||
- it.endsWith("integrationTest", ignoreCase = true) ||
- it.endsWith("check", ignoreCase = true) ||
- it.endsWith("test", ignoreCase = true)
- }
Index: build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt
===================================================================
diff --git a/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt b/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt
deleted file mode 100644
--- a/build-logic/src/main/kotlin/org/jetbrains/projectUtils.kt (revision 73ba7bbddf14c63eedaada441317e961c4bb05ef)
+++ /dev/null (revision 73ba7bbddf14c63eedaada441317e961c4bb05ef)
@@ -1,20 +0,0 @@
-/*
- * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
- */
-
-package org.jetbrains
-
-import org.gradle.api.Project
-
-fun Project.whenEvaluated(action: Project.() -> Unit) {
- if (state.executed) {
- action()
- } else {
- afterEvaluate { action() }
- }
-}
-
-fun Project.invokeWhenEvaluated(action: (project: Project) -> Unit) {
- whenEvaluated { action(this) }
-}
-
Index: dokka-runners/gradle-plugin-classic/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties
===================================================================
diff --git a/dokka-runners/gradle-plugin-classic/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties b/dokka-runners/gradle-plugin-classic/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties
deleted file mode 100644
--- a/dokka-runners/gradle-plugin-classic/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka.properties (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
+++ /dev/null (revision e0780bf980b84ec74940d60d5d6a14c87ceba634)
@@ -1,6 +0,0 @@
-#
-# Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
-#
-
-implementation-class=org.jetbrains.dokka.gradle.DokkaPlugin
-dokka-version=<version>
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..7f93135c49b765f8051ef9d0a6055ff8e46073d8
GIT binary patch
literal 63721
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
diff --git a/dokka-runners/cli/api/cli.api b/dokka-runners/cli/api/cli.api
index 74769272a2be4299afb976ef8ab054136a17f5cc..cfa173c55ff0605f175f4e3f421b4d611aee7429
GIT binary patch
literal 5366
zc%0=}OOMkq5I(cNB8NTfo+7R+LRzI;DD)+|DiWNWWRiO8*v5~Fg81*)O`1)bM^k7J
z6_>VhX6Bpu#{N7h*FM346Jd&o6A&b&!$j;pf${~yRJtKsuaSE%;>Rrq^Q9A@%6a9i
znIf2ea|43+Pn{oEFL)MDQ|C3NSiNy>#zj+aJbIuCtL@$G^4WTaZhZola7GQnOXudc
z!7+D}TdG!|GPr=z4G3lMp3nxl1ku=CD1m8wS6#U+EY18U2-ICE_Y;HFQ8uuj9-|SC
zwLl6pdc9j(Ff9UDKoPM}Ki@VpR*Q4cngTrvsT!8}_Bw<JX=1DE60jkgQI*0I6SVoj
zSB;1)@w^ZAxnvlF8h{K0=9WskJ1Tvs;nR3cSf~k1Q34&dl=WF5x$;<O%}1pNilspH
z;6Jaf_(_LphzT4$NLdrJiZGDS8BG_D_fzk|X=B?4|D!FvTf)pO2kP<2b!qU)9KQp?
z^8@#9sMdLjJA-nRI69krl%t+WLmE>3&xK@8kcyZ{dJ~g9z@=Qh)qHysm^slgradxm
z!(R&TH6u@2KxyqSbS2e@F{bMQL{`vk=)QVX2X?_7YcHp_mMyWwJ|;#)du!A)#09sf
zu88wD<t<@8BKwhDnwE4+uVI+_Qd98qFntdNEBMHm%9F2*pLwAKZ66`wM(1IneQEAq
zot0g=?1u=G8U2I=O>f+)f#m{!2agG6qEL`!tKtlh@?sB%%(FB;#2sT<JC@}>a}=ym
z46|K(PIX?0z+!gxDv!N49Y*gF4TuimAhCwGRAc{Mo-{j+Ssa6~4t4v;Vi}zQneM36
zxFwRo8N&w1@pwh+O3meguBDQq`4WUYJ~tLUx;J~u7MgPbQqKGhW?Bw44fgw`vTtWm
zWJD4s>4aH*tQFU4fJMu3DuU0EkZFq!)Hi)lDK5R)rDrvSBeiO+vg}e)jN@+kPHty1
zGtL+s(G>`+Ae=zro1WEC)XH{uv9w2Xf;b29K{Z}e1~GeY%GBdG|1@eQpn}J3<MwC=
nUez$&>z$b2?UnAvhD=mTy{;|#;Iip_7q*n17{{h-#}xVtVh4d3
diff --git a/dokka-runners/gradle-plugin-classic/api/gradle-plugin.api b/dokka-runners/gradle-plugin-classic/api/gradle-plugin-classic.api
rename from dokka-runners/gradle-plugin-classic/api/gradle-plugin.api
rename to dokka-runners/gradle-plugin-classic/api/gradle-plugin-classic.api
index 0ec172b7b74053a499b3cbbd97a2fac4b1dd966a..7e10ebf1a0e487c36e37396c6d0cdf0f5f1f1def
GIT binary patch
literal 11893
zc%0>0OK;;g5I#4*!UrF=C$-n6D3G<2z=;zZ@g@uGC7>nBW=xR;Nd+;A{`XR(Y>PG}
zQIDj%+fy8w^Ko9B`8YC5ml%ZuuoRMmP!2*2gcwl13SOXGa)5{kBD&dtV8ua%VQ`VJ
z9A^)w5X4`A*bM&g7SYT9KKq54jpLLI{zL@HzXqRveL6fw1YrH;3L3cuO?e0xPztqh
zn(daO1BQZokick66Senj`2s^ZqC~2HAU{`-oJ#cwMmFjr5h-IF3IQV<`~|#%Ae9IQ
zQzYd1**|AztdpDOfI}kR*-;>hMr(v4E%(V7fdN?s3&{~#o%;wi(XAd(SZYip<Y0;6
zxxZ?Qbg6=;<LSn%lIJj?udumGPUX6L<p{IHF&#wP*(P%13MXl9{9Ps9AS#_tPT|ZH
zlpMntq*yjRArZYoTu7zsic|W!HQJ6a6)9KVKX!!<XC=&$z(pt#C3Qf1PvmuI1j03Z
zpj0~QT8z|(G2+VCly6mR802#6Qc3|`0fcAdE8s+V-vOqA_KG6NgBqMW8l@O!CABli
z6XZg<qyx?@j<Kra3a+6x$8MgblBII*%dXCz<8-A`*8u~#M6udf1gZ(eXq9rH)1nf`
zT3Tgj){*>Fy93M{RjsW7eMpH!&Wvbg?;`KH6S9UJsiu4flcma%4k@yOoGo7wO~qA8
z^f~l|Jd`K{T3erVUHYufYnET^3g~RPm4!kir1C&fNn7N!aFn@lx}j2Kf52gkRaOSK
zqfEKHz#OY*Z_<vnXp9lXSf7E0gr&f8N{g~XDMVBgQ`SRI_3l*VN2a`7sS`T|TbdTV
zZykIIcvfPwK6O$6s`~ozPP&9QBmz~*r$4k!KBotUBbqR!z=W7MR0qz>lXe~>h@-*e
ze(~kvesno#;=FPt&#gT99|h~4jwsuHpD{AJ{h*;~SnG~d>$%#wY1$!-oe0f@ggA|$
ztIcU9vu`C!6WzS5+pXC^Wmb$KgCv3^L{3OurIi(d%;<h#No*(imj__6C2|dAqb*#>
z#nAdi)Ucn^J461wHdeOgfHAzaE;nYrVBL=j>&kCa?W%{-dWc9yf}^1T$q)^d(6d?e
ztTuTz*N)+Dr#72!N^IVdi<j3Vh<BVR*s-VIPj7&>XW$zQQwd9a)A~R*JcauKR1?PG
zugN@PX3F&UQK(jrYyHO_e|=6>4Tii#rJTSONaSvPNfMmg+RIY7cI1{bVfW;~wqY`M
z&I`(EZ9%fE#w;^C_tU##I$DPBmwD`!Fzmel>*^$C#CxPvlyDZk{hogE^-&+%rgVTU
zy1o@keJ;Ck;hSkHV;ZK3YPH&~DI%M)`At)h)71BiW-TUxGI)HLp4<O5#wwXEJsoqu
z<GNgeIE>8HtbLe#JT|FpmH&;#?s!ydYEiZehPqF(^xd5Sx$Z>RtoI^0O_G)GM)vxt
z?`u>XBf&7(b{zff;s~QBB+wFJB;ACsfo7LwInog~C(-wm%+0s$&F+Pd7XfdgP4}#u
zs`O65s)tGJE-Oxse93ZpK_X63w1_sQptawb-t>U6kP$}9jxck`=OElDht62-kkM;a
z3uH`r(m|yM$S9YOB-$UlF0)jiNKcPByx1V7$`pqo=%|<ix=fhd=I-w_FxKU=hw5Q~
zvUfK<daOv2n^I!uT)c<T`ZXkwXA#Uy=mW4EsfE|r(V=WY5FN6$yz3w>_L<aVPfM!t
zZst{?DZ_{cnR|Sfm%g3#97$AAt*k+ltiy=vS0O#z7N#Lh0$`d;pzm|qbCJNouI0Gy
zJs+e>F_s^#jV+hYcXC0dCrQDre(0yt#$Nm3iuIYFUhnBvwepRB4dOjEX=`mMGwyj%
zRR24X{^v2Jwv~-$GDc;pdB(jSIquM^yro+P&gPLnL9}dxDnj%g7sMVfa(6(6Yt<qj
z;0nHdH^jU*BHf4;w#@AV!~O~K`e4i$#+f2Y&5G=v(oj{bir*Re=TAaqwl7?yag4g9
zVg~ho6>Z-wO&7mb#n*~zb=wW|rSL0~>)RiVbnM@Zo^*d-POP)<Mo@C}d#z?v<6G5e
W#yNO(@9Q^pb?omNs5(?q4*nNpjq1Yy
diff --git a/dokka-subprojects/analysis-kotlin-descriptors-compiler/api/compiler.api b/dokka-subprojects/analysis-kotlin-descriptors-compiler/api/analysis-kotlin-descriptors-compiler.api
rename from dokka-subprojects/analysis-kotlin-descriptors-compiler/api/compiler.api
rename to dokka-subprojects/analysis-kotlin-descriptors-compiler/api/analysis-kotlin-descriptors-compiler.api
index 373ec268df8fab0abd509cb2ace5477272a75ee7..373ec268df8fab0abd509cb2ace5477272a75ee7
GIT binary patch
literal 10146
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
M1JQD*B6ei<FATcQMF0Q*
diff --git a/dokka-subprojects/analysis-kotlin-descriptors-ide/api/ide.api b/dokka-subprojects/analysis-kotlin-descriptors-ide/api/analysis-kotlin-descriptors-ide.api
rename from dokka-subprojects/analysis-kotlin-descriptors-ide/api/ide.api
rename to dokka-subprojects/analysis-kotlin-descriptors-ide/api/analysis-kotlin-descriptors-ide.api
index a59658a3693bcec4b246e8f8879ada9b3c5925df..a59658a3693bcec4b246e8f8879ada9b3c5925df
GIT binary patch
literal 173
zc${sHy9xp^5JhYA6;o<8y@()eV`pVQdAN)jCLxm)i}>%ZuvpoibGY0(yl{XAD+vT4
zGbnAwXX?HYt6?lT6Vj>|W5Zm!uwqOW8rNQ$A;*N*n5G}PZ1GLT%nHZ9i*=RcS-3Aa
YeaTk8+^%k)hQf)J`x*9!yL&tL0d1~7sQ>@~
diff --git a/dokka-subprojects/core-content-matcher-test-utils/api/content-matcher-test-utils.api b/dokka-subprojects/core-content-matcher-test-utils/api/core-content-matcher-test-utils.api
rename from dokka-subprojects/core-content-matcher-test-utils/api/content-matcher-test-utils.api
rename to dokka-subprojects/core-content-matcher-test-utils/api/core-content-matcher-test-utils.api
index 58881a15b3c859563f33c0d762ffc99967a4e982..58881a15b3c859563f33c0d762ffc99967a4e982
GIT binary patch
literal 6193
zc$~dhOLLnr5I#4*f<q6<Nt3pxxYHTpq^&23+nIQJ$W6c+%a$c7i6ov(|9e+}1K9Y1
zjde0(wBNTc_Ms#VI19Zo6O?-)r&@b+YQhO9O+qOQ2t)e$??e9ob;@`I%6mKekQBnH
z@V+v^%s21+ekKiPf+!es2o1UGTg=|YpYn7@Wn}`3<egvKOBItTm_Sh`G>PPFMu`D!
zh>?<O(xA{hk(wDORO&T=$6)#s#8)6J#gsl%k{ZUzJ=3O1AQe<Ce)CkL5!q=@MNA%z
zVj{Ns|2sP?WN4s`qM`8^s-wm<1dj?K4K+-P{hX+8H21E&lBWb9eu?!~VQmp2i+*P+
z5z-c~YAhY2=4j}CvF<ISI(?oK6c4R(ntU&wF00{Pr_vgf8OjKduPM?AjX^Jo?YX1q
z0vJmLZcGbWxNsXzNRuqwPLxKRaOQ{#gL%!ROS*wTX-DCY*fXdYF&)$WP%=#%a}ET)
z6QLu|#_lYfP<{J~#e4*>ZQ|I}AvSXWjarr45`BR0<AY4p3t=W;ivFCd@G*ihP5EJl
z?yJh6BJ(Sl;uNseISA#bK5*>(ZkQb9Zo;X-Za4pF2a(7Pr=GFI=X@x0P)z-9dZ3nb
zc)_!dDvY5)3!=?q%ZLU6M1|OBksLR?m<-KfeMdsxt;d@O*0vMAFBT@tt*h3eh03=a
z=C(C&8iE<%?lBlXj{IT&)@!|jEEVi^Wbo=rbAaJ?bY4ogTFzFNqc#auYcd`445|mR
zT?_q7Zt@m}35r`-8XBn{sG8NQOP1Pdk$Ge9t)qFzJ1m@QN!U%6EMb+Bs<uA**^-4`
z%U^8>|Ju;fI_>Lr^`0t_qluC)ww&ydAC43`B7rJP1%8+UIWFI?5vq!BllXMV-NuSx
z+weal{?oPtU+OBCj%gH177kP7U|5^qz3sEEHKj7?9>wG?Ro92+j(lWY0)JD=>o;3V
zmZl7f!T2JaU?n+82EW7m`88BkhvMpvrW$r<Z+`dzw8m<_<NM5ay-7d2h`Jcmdxgx8
zH$#-Q`>?8AZOk3cGy8PhQ+4vwb?#b{EW4Vvf!V>?3~`r-tQ23dq{ETnn8t2zA5NVj
Q+pa8XKFhB{Hhc;H0U?6uMF0Q*
diff --git a/dokka-subprojects/core-test-api/api/test-api.api b/dokka-subprojects/core-test-api/api/core-test-api.api
rename from dokka-subprojects/core-test-api/api/test-api.api
rename to dokka-subprojects/core-test-api/api/core-test-api.api
index e09692580bc53be04002c9b213d411d30ecd1dd2..e09692580bc53be04002c9b213d411d30ecd1dd2
GIT binary patch
literal 13008
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
diff --git a/dokka-subprojects/core/api/core.api b/dokka-subprojects/core/api/dokka-core.api
rename from dokka-subprojects/core/api/core.api
rename to dokka-subprojects/core/api/dokka-core.api
index 2399880b9301b03a73c1ae2fbb059599f9c02847..2399880b9301b03a73c1ae2fbb059599f9c02847
GIT binary patch
literal 309179
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
a!|e9*I@lz2xy_a5$8~R>>|bU^{{I8L<3BY3
diff --git a/dokka-subprojects/plugin-all-modules-page/api/all-modules-page.api b/dokka-subprojects/plugin-all-modules-page/api/plugin-all-modules-page.api
rename from dokka-subprojects/plugin-all-modules-page/api/all-modules-page.api
rename to dokka-subprojects/plugin-all-modules-page/api/plugin-all-modules-page.api
index 3e6dc898ec61be55bc08780d7328b09b285617ec..3e6dc898ec61be55bc08780d7328b09b285617ec
GIT binary patch
literal 6469
zc%02xOLN*V5I#4*!iOB%lcv|E(-{gRWoiOLNDsMWgi%02mRw0@!esj2yRwa6NX8_l
z(*uLS+SjMuZ&!-q1*3uYL^)<&z_3!DkSp{|^g?3F6<UhT1|!VaSS({k)D*7>>Q#Q;
z5Kbi4RB-Q$ReF^#K&7>>7ayX`dd$7AlvDl9`{>&gL@Zw61!Yw4(7^oD7hIDUef8;A
zp(F{xs0t*(npAysC~g_o<$yflnCaqu?ttB2kXC3Wgf@C^#gbfE{Ddc})>A10q7>z;
zyLb_%+P#nEz+h>Hpeu|y4T-!ukkLg1w>SjhPyRFBV#F|Cp*t<Xrp>P?^=J$M(==Sy
zwj73O-H=RSCBE})hsC%gd`aXxBaktl3Z;92F<;xBe36!zt0y7DR;gz*-8z~6TwFw*
zR<09LM@i?g5~(r|`=;zb)n3q1-$@3>nlj{5rRz!CNCTRL5rZmFXr4Yn0?&v7w;e<v
z!bot!_2)eG3&Ym+(az%GnNwA1SP5S{uGd6oI2czhm#OTzxT_xMsKgGF#WM-cAG-;a
z{EjhGd)zD5A1s>$w00}_FpTtWT(F6Ab3tN_)w&O51M5bW7h0qwXeY*wYHSL<i@G}F
zL1W8S+iS;~<bX%jU{Z%dx;VCMa`>VNSFlx6LAkXgT-u!!ZdKn(b7?f_T=%@7tIlxw
zjur7mka!GDd`qFtT;l-1*>w?sc`xC28ih~!2B=Q3ZHEz*I{cgUH>pm$eI27N)K9V0
z6tgbiZvrSo#DLQmVTk$i2YlGcF}#^dG6rqP1v{_Q)HKMSZ3+kY_LD#huqyg0F3HqW
zhffS*QD`t5W!;PlbWNEVr5YyPLaTvdE>c)VFekoL+E6Cg+#K*i!7vnP57LOpCmfLW
z+uLeias%f<!=}CiSXyJy#1!`AUI6i;%u|>?8A!1-fozm~QidOn+NWi%1*M`ksuSM7
zc4XvlgoXq`&)X0sxylV}DZzjkWI=4$bByKY@GyxvoZ!;F-{5fRBy)V)&U#!zkw=cE
z<_wATdM*qiCwXv;09qDO6389Vj$P=|bWK^CH4mMRuMGuxxo@y16sD_3cini>j5-`P
z-go$J6;d}~muL6Zhwie_YyC)>)fy#i>B0OGVQxyT&5_RT)@82b;PhHHHNN-fqw!>L
z?++iRz5dVM4Sf5({_w}d9}H*Sk@Dyy6)4||&3|<3SLOaj?~Y%s{ELgCV;NAc-^$=$
z+WgsMGJgaTbq#<8%f8)D_lWMOq5KZ1w)_ly6kwiecj!sTMdw#pdygvj9{D}-egw;B
zx~i>pVkpzFx2HrLAr6V4(2$Xka7P1kIa0OQ-hNM+2QYVH;Pt8D?e^z*b*gPAV$DuK
G=Kci@lSKXi
diff --git a/dokka-subprojects/plugin-android-documentation/api/android-documentation.api b/dokka-subprojects/plugin-android-documentation/api/plugin-android-documentation.api
rename from dokka-subprojects/plugin-android-documentation/api/android-documentation.api
rename to dokka-subprojects/plugin-android-documentation/api/plugin-android-documentation.api
index 23e021a1bf5071096e42f95251b98a989a179109..23e021a1bf5071096e42f95251b98a989a179109
GIT binary patch
literal 676
zc$}4yK~KXl42941SLC>za;Fm#V;~M3keE1dOB%0uOPwfoq)mwbPCF*ridBPCB*%XK
z-gC^>W2H7o#;eL3W))Jcw;(ndB-SqMc19a=DWKE0-|s3^xd9R*80gvO8cAKB9gOX#
zvFK3_dev1<-5<qOJgv^87Dy;JYBqoE%SWQ_vj%y|F(zOJw>&(egSDxD5Uhs>^a80J
zf4YQlzZW2Gq08d4DB}OjOEScpkQzv=r!me4VGYAr!3{=P4=vsWa@a-tTYcRtOk{X5
rgX0<66#{!HrxG7F{Uz9u=!lEoL-uY7y}=2_COGhVXt|ufb!YklqQ3iC
diff --git a/dokka-subprojects/plugin-base-test-utils/api/base-test-utils.api b/dokka-subprojects/plugin-base-test-utils/api/plugin-base-test-utils.api
rename from dokka-subprojects/plugin-base-test-utils/api/base-test-utils.api
rename to dokka-subprojects/plugin-base-test-utils/api/plugin-base-test-utils.api
index a6bdc192c0bc8839d75be5e26b4b6b84885cd923..a6bdc192c0bc8839d75be5e26b4b6b84885cd923
GIT binary patch
literal 10848
zc%1E8OK;;g5I#4*!iOGqfday&uWelvNE~nLuAOY{YyzYwN}^>ZGO3bO9w_?XJJiFb
zEK(0kLIboX8xrT6;mpV3%-B)vhQu2oS4fULIr2gz#E9|0xyRDwh*079?BM}9E)v+0
zSje-8B%jNeQp}xmcz%|NU&G_kk4ABWWI^h$lP{vwmUT==KM_jg&!abQZ;X%URT@GT
z1c0tk=gHTxh9X|5++f)aZ#I8mG9=Wwf808RO3Wz=oeR81aVRH@!nR^hGQL3kAyxnP
z$w|Hq0&9<S^MzWW?Dz%4BLo_nJKG>@cDd0Pi8SnNO@bJN38Q1<x>%BsNP<Nwk@?HG
zv}&Wu&IOhm=8N(C9zCYO&YTE&WH4XR2HLYn4^xna4<~1%A6hA6&tnq$xCNhdp+;xd
zRg2+iCtq4ZUx{roz66=NF!iy#U|zh%R3bOTV#0AknUzF=a=acuSnsKK!ugPWd)EYV
zfq6h^&?DkCM^vmC-}YeYClD4{qUZ;#SL?zUd?!{|#!*Kkj#VJ=V2)g33J0WdpieC@
zH-NDwURQ%eHLvRs^#g6iEE2mHNMk^bMK)8r6I#FamC1cHRAY7@tKpE|b?mm`82H`5
zr2cNd>@H}2`%M@x2wF<1nmzot-&^S5v2DaC(DmJMNp2^9+EM=Nj`H7hl>fG){C6GY
zzwapjzN7pP$6c2mi(dXedbLNdr!rh3S*pfW1itjse#X*{HSV2WwHyEK_ovWHCe3At
zXy9DA_t=wtMOFn8{~4oDKnTl9?hcyL!5gLzgbR6Cyx^!6c%OaP03BFQy;qN2S0DXW
z=SHZH76>plNNgs|S8}t$3&~beS*8H@L{FcMEk!0zwu8BFmgq^HALVXK`5384I7`No
zMVDa0R~73fj7lI>g4bd|R}fY@#^t?egD8k)X)e{zpltv{x(>|bWJ5w9Lbi+W9=o(O
zHQY8!D(|i;BiK;3AP5`KR+eEnDO#%>b+~A{b+PYbe~AT)xrarA4PK%xHZ$EEY_Jv1
z9rg>iKsk;nV=8=>bH8X%U+DVjYN4SGft#P3dRS$uo>~rme$lc^o;I&&_>zoV;l8e)
zx9;$CRzF)=o!13ky3AQH?;#TzTQO79u&<q%QkhVjJ@eH0QU3ubD=PQ3fXowY{ZwFX
z%*-}J1PLgTF;Do(;bh2U1g>HUwxPh{=|2nwk!>7dQXz)ZvC6-GR`}I!U8|C6Cy?iJ
zNF|X&f%n3hhFB%2oY96ic5pCkFl>HEy?N$M2=`SiqgdW@BGvCUr6b>5T`>(FsMOk<
z#;WbLdaKQgmQEEo1XcN~a_^=cGvroaR{OG~#mv;yS!X@-KSLD)bNQ>>hSQ{PnFW+7
zJ8w4-5D_7-Cd;5&dHXF@a7(qB=YwqiJcOM6d(0#r2Hutyi(Vu+^hdMH)%DrsWICGX
zvej(3@CPyZf;<j`8x8|22Z5apg8G{}^9^no=sUelMNTnjzSG+dQzlL@564Rlu}vws
zq;7Bi6Oo&V+P12!=Q}qRpm(`&|GLt3p9TrY>Uuf*I2{H$LbL~99ny|ccB}!neWQ8|
zYKN{<A7V|PBS443A?Hy=ho;Ld6wOts_~xy_ShI}1x2p>9Vd-KSV<Z#AeRW-sX!Yl<
zyV`i&_2m1kSUYg~0!76Z@kwo>+1+k<l3D68&H$cfO&+0f`Y$6>S5#82HSj~}Y{P(b
z;Ab0W!As<-e@VTh|B=d8zfumUy=5%5&2+R4O`m}<Lix~)wnws*{gr<HJV=7RL4EhE
PDb}sqq38qQ#25bnz7<);
diff --git a/dokka-subprojects/plugin-base/api/base.api b/dokka-subprojects/plugin-base/api/plugin-base.api
rename from dokka-subprojects/plugin-base/api/base.api
rename to dokka-subprojects/plugin-base/api/plugin-base.api
index 788444b93c23cfcec96df6cb7d783d05251d1c36..788444b93c23cfcec96df6cb7d783d05251d1c36
GIT binary patch
literal 146221
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
HLdx|2CrM#C
diff --git a/dokka-subprojects/plugin-gfm-template-processing/api/gfm-template-processing.api b/dokka-subprojects/plugin-gfm-template-processing/api/plugin-gfm-template-processing.api
rename from dokka-subprojects/plugin-gfm-template-processing/api/gfm-template-processing.api
rename to dokka-subprojects/plugin-gfm-template-processing/api/plugin-gfm-template-processing.api
index e94d666e53ceba9a6fe1c46849c3216721531697..e94d666e53ceba9a6fe1c46849c3216721531697
GIT binary patch
literal 897
zc$~G8F;BxV5QS&*D?BjJ$vZ(T6j+KB3B<s5NiODE$F}Tq)e7<7aY72TO({q)`uY65
zJHK<W)KrOv3}{hl2tin{<Q%#5KqkoAE*2nF(@MtHX<#h8tuO>KO5Qf@!=75`sK|)(
zQIJcQP?9EI%W0<!)i2qJ8(N7*T#zBY6lasiPr2`~yHv=@cV;VKvL^X1sYaiQXU7b$
zSBxg4NBKc)0iFr;KhgI;>z;i&tMxApUbD>oeR3bojAysO1o_R=@gR@R*6+fVHH<6H
zzs8;*X+#Ro2{MNzNV4*VH0FnPV}ShRL$^$~EZzHHyPi9zG5&_xkcz(Fq0?Tvvvt%s
P#ZY;2ot#gex)|R8<9AC<
diff --git a/dokka-subprojects/plugin-gfm/api/gfm.api b/dokka-subprojects/plugin-gfm/api/plugin-gfm.api
rename from dokka-subprojects/plugin-gfm/api/gfm.api
rename to dokka-subprojects/plugin-gfm/api/plugin-gfm.api
index f77c9b68e4d88635f183a649227ad21402ed97ef..f77c9b68e4d88635f183a649227ad21402ed97ef
GIT binary patch
literal 6537
zc$~FZO^=%}5Ir})g2NuVC)6IBs#5o(+m+HbN>{xbm{2dqMz%?JRrSAj4CHGW2qx?$
zLEw3Q^E@*iyC@^U<A6oRY8Kld7R;DH=`?%<8)?R+2@{oNEKJvVc(=~4Rh~1M1b=65
zirUs#X7O*$B@_4yA_;I%!6a8QSe%Bs*o~gg{>^3$Y7IA(&K~1{Si`84K?-)u`|ToA
zR&W_wc(UO)X5-&0Fr~2b%f%zxuuw3WhCi+5GM&><3l@Qx0_XwqLNE&rw-u!D6uiAW
z0<K<C_V(Bq`Rr%?TofP^773USSb+I<!pBV>B6Ms~M-zT&p5DzbfB7%WQj{r|!3T0o
zfgf4K1-H-PjeFCKK3F^S@FSPpenLTh(ehns4r}KFNW0WfXcdDoN;?Tp&3gM}L7FP&
zNNnf90i^N5Tq-VYSMaEqIaQZhZFmBckX^DkV<{}SvDX@yokoHch7jm!7_O8WNzE_t
zFawp?pb|1Ws8w_jb{4e5*dwW8u4E>>S>4aOLi0xRE<g9ip1z4Da<JCuEKz@CE0kzI
zBW57fwJ_RLFrv=77J!Ea1qPf6-MTLE>AOlgN=+-(ua$I#&A+Ie^#9@u?qEtk`{?iz
zV+-M<M30AuAY}3n)s~K>K`!~mnQrnv?5wY}zSuxWvsOBHRB9I-{fGVQ0reeUbGcC&
zoGT46@IZ%w3OMJL%rV|}#jrQF>M@wzux8i^?2IOkCi5)qZ?FwqRC1AAqk~tt{@GC<
z@FRMJ*mfjlB~XPf?aq9_Sf}U9*zVy_cR*Ke0LJ3$Qt1%pUSiRO@ygWp=SoAc7^BT-
zGK4s|3%RXwoHC8^P$u;hrR5_039aJTNyk^B$yiZxaV)bbnvN7~YksFyS)3D2G!bv9
zCgXFfwd&u@8icxF_lo=#SiLj06uv)=UmFiO(6oFY<~<hlRi-Bd!0?4D?3Ky1q?pqN
z$K+2=Nf&|EL3WI?r*it7Nl0hR$OLtk6PB|U5#I!zh7Tdpcedea)g*cfwQsrze>+eI
zd)*7}J`SlcwHUnt^uG6ohLCG1m~|cO4Y+F+|N6hR|H_eK(h!|6(E9le*Z*~B5`wy8
zda2`)E!k}zL6X1@<(!?1Wa68r6A&UqdT{r5;}m-6zWN&#U~MYC5>3R2k_it-BUK^}
z=`^Ibx4j28cVqYRZgD@?y#-x~h1ObGbOn-rvr4FHuQ+n0K8~KOoBQjVrf9|r+d+#x
qMePokWmVIUie{s6hl77KE2^Gy+`4$Rqn-^3P0e?Gr)KzXHv11E!eH9~
diff --git a/dokka-subprojects/plugin-javadoc/api/javadoc.api b/dokka-subprojects/plugin-javadoc/api/plugin-javadoc.api
rename from dokka-subprojects/plugin-javadoc/api/javadoc.api
rename to dokka-subprojects/plugin-javadoc/api/plugin-javadoc.api
index a6b686d7ae44b3cf37b735f16c1957095e7f3bd5..a6b686d7ae44b3cf37b735f16c1957095e7f3bd5
GIT binary patch
literal 56136
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
Yx;m};JL~EDl%;XzgukultavBj|Af~Z$N&HU
diff --git a/dokka-subprojects/plugin-jekyll-template-processing/api/jekyll-template-processing.api b/dokka-subprojects/plugin-jekyll-template-processing/api/plugin-jekyll-template-processing.api
rename from dokka-subprojects/plugin-jekyll-template-processing/api/jekyll-template-processing.api
rename to dokka-subprojects/plugin-jekyll-template-processing/api/plugin-jekyll-template-processing.api
index 482a0d407d81a2fafacf8f2dc42731133df75d17..482a0d407d81a2fafacf8f2dc42731133df75d17
GIT binary patch
literal 354
zc$}q<Jr9B~5Qb;@6&-czuEt3h!@ywN4>+2Wqix#5NR0p8q9hI)9bDh9=k<NbRH=q6
zu&NkhR4y2OLMa1~jk<Pi3)(cD7VJEOU=dt}F_JZUkL|#Gcryy_4OzAPxaE@xB{9jM
zx1%zpui4B`Z+ffNWJxw^zBs<*$H~z&C{J|mDiCruq0dxfNcsF1b9WK6F_l)|mJ0|%
J@Gsz&Wp~<bgMR=3
diff --git a/dokka-subprojects/plugin-jekyll/api/jekyll.api b/dokka-subprojects/plugin-jekyll/api/plugin-jekyll.api
rename from dokka-subprojects/plugin-jekyll/api/jekyll.api
rename to dokka-subprojects/plugin-jekyll/api/plugin-jekyll.api
index 2d75b214d2e3d7bd738119ba24281577fb8acbb2..2d75b214d2e3d7bd738119ba24281577fb8acbb2
GIT binary patch
literal 1007
zc$}@0O;5ux42I9_SM<nEkvLMsfdLYzhiXXN-OdYcQ@cvsX%phVlUCI>p-vOiPWiC?
z`i=9nUE!!q*2LhF(m@D`cxx)u!UJ(IE2(RU=X&Ryc^{VCb(T1}pUiAy5DIdnJM-M%
zjM?9_n|AEgaq>V+`k36#KM&V~g+6FepFH7uAx(p<xyRN^i6MxO71_D2FIz<pB%Drb
zkB>M~4gZqOg;-B$XHtUpIbJrj!mIerp{&7TMnM-IL9a7~C35t49fwPi3$6XkX6*$8
z?#)j#XxEMLV~Xi15^liP`>JUc&-xy4UI;60H9aObiWD8WRUW_Tluir<GZaUn;~~vz
zQAcd5O=F@$*<%yT>$tm1=UD|CFb>$75B0?MF#WJ&{X!jk_l*3d`B3|&=%H{p4Eq;s
CzH*xY
diff --git a/dokka-subprojects/plugin-kotlin-as-java/api/kotlin-as-java.api b/dokka-subprojects/plugin-kotlin-as-java/api/plugin-kotlin-as-java.api
rename from dokka-subprojects/plugin-kotlin-as-java/api/kotlin-as-java.api
rename to dokka-subprojects/plugin-kotlin-as-java/api/plugin-kotlin-as-java.api
index e7766e36f3427fff5c73e9e77f99c61a62302819..e7766e36f3427fff5c73e9e77f99c61a62302819
GIT binary patch
literal 9826
zc%1E8OOMkq5I(cNB8NRt2`PdjMM%3Xiwb3_Xj!Daxv87=*0F=_R8)xn&N#0osq@?v
zD(J0o?3vH=@O;kH50;cT)|xOxEr%j0EiPR95v!#@gh_kFHydPcxT1tz$q#6Y?2nm;
z84X;*tk=d>KD<OrLW$bhV?7ej{(14tkM#!3dP5jdZ>{HpyZvwoN56Ej(rV_!Wk>}A
z&jjC+6&5gkTBq{e4~3Z|oDE9^Z@pXO;e|j<uDS5~k(#y6m^*=onL<m77kq}?NEt<n
zA6HlBE&aN<@H>P=s&K*e^GB8Ou~bOqfUEpu>$wr2$5)uz<B<kH$p#N=w-JWeh%<$M
zsG)h+2SR&7c@r>4X#=(cIepZ|qlmfoTnWP5;r$>Q3lyRDlt|SV!WnWl5PyAIF%j7p
zLcx73)UGAO`$HpEqfXQmVapv;4_L*gQUUtq3a?Q>)t?H3NoMTx@)0}Q7d4U5!v^~E
zfpG(k+|uy~ayZ+904!u&prU<`lHro7(=s3Kjs>s!$lO<}x&oL}s`hn2+64if4K0&e
z3?hxC*-QqONaEbut(PwS3NbBTG+K73t|z}{g&@Ybb^&LyVZLOO^Aqxi-Na=|cs~;T
z2p<8%eIx1t3cWzHbgZ$CYs#HXiK5U!Dy21gc)ts2Ytj>1nW^i5P;l5~cANQE=3^(?
z%2f(yfdu43h0j8`dcPBwae-H-hCE~SxqfUC_g4xIR-~{CXLFQ}0FVen?I^d)guya=
zYSyU3dv;`G7{EZ*1Wxj!WxS6B6bN0TP9fnlY$~?X<JPm+@u0Mm*RP6(f>U1GD8JFd
zW2GHZZ*@DZ^W-cPsCHnQ$$E@^fgNyuStK{|p>btW&ep^YL>Qx&;n181!ofN^2Zd<O
zAyhmqtWosk3^?MH;>Z_+!#J%KbQ(D;FZaKXoT`DuHI=^lrVvkB?0h^+a&kDh@0+oO
zw5uy!E2XOh)0H*3oiDC#NAIk9l3IzbBau4uvQw<*XI^&ZW&fTd&%Er9@v<|G`ui#N
z|I#Sa*R-;(i<wmAB&43w8?eg+)%VI^n6NG1)ZA7+@l`;3{r(?I?9-ezAN7naLI&$@
zbU&>ngEQw|QS5uH^vB~?Y_pl<`SBztjexMv)y6RGoTfe2kNcZ6GS4a1-aBO<$16|X
zG@Kmn`J90TU+Qi{lK^zMzcY&O6j_!1Ev>4isZ}HY2~De}$Td*>JwR0EtdhvSH@Ed~
zzK6bRXmeQ5U^+~EK=NS(aRxIdMY0id43mhb#9~ZJ8viHaX*ph$c7)DQi({eWe-{8z
z+R+pZ_ZHS<B0U%4Jt_Obx!SAh*_|Q76u82BH57FmrEpeG3%`ZJLx)|%uN-l&Ag8&2
zii`wjoyH`Aq(?s%JZ8sfi?$itJ!nvxm+1=u3GXH$`YCr^EQZCe$i}4z+_sZM#tyOx
sz!Wf+ONQveGKEAAV1Gb=rRKhc3mLotx{#2J##E#tuCceoA{T7G0Tl5{_5c6?
diff --git a/dokka-subprojects/plugin-mathjax/api/mathjax.api b/dokka-subprojects/plugin-mathjax/api/plugin-mathjax.api
rename from dokka-subprojects/plugin-mathjax/api/mathjax.api
rename to dokka-subprojects/plugin-mathjax/api/plugin-mathjax.api
index da5caeb2137ce9125119be237f6cfc1acdd98de8..da5caeb2137ce9125119be237f6cfc1acdd98de8
GIT binary patch
literal 1417
zc%0o-NlU{(6h7NuF^3-NY3@dZZi1kt*rMR=C7Fz`oy-igl#2M@ooNF}aH_bRJcYdN
zTk>AC&jl8wLJ5Kt0<0y<aJpeGH-OU8Qf;?DYjDpS*wee?b16JWNiLGLIwT=Sf$oLQ
zVx*~l9h~U~%}a8L65SOUoj<hU1BsaA%r!`B;8P_XlWu9$4ohZ2%k5XN^L^;BsAQHN
zzBV9jrA+<pac_fx{*h$~A!++^u#CEvprsl(v(y2%bn2~Bbz)X)u65vAy~spKZWgQc
zcrl%mq|z^mX1xzr9Fy0|OboJ$jFLlJ6#|?xF<kgM^g%9ym}QXEpiDf905Y6)3i_!m
ziEvo0P*@@NCP-FtcnGbOHw9ZUmu{<7$wXw+diiKT>j2YT#h%a^vxPw&G5)Vyv}3Kq
zOC)qc<!8g5esLO|YfRrn;vAx--NrvWfOcws^HJ{9_LMhAR`*J|$ZQdu%1-=PJ{Csn
F-T^KV52XMA
diff --git a/dokka-subprojects/plugin-templating/api/templating.api b/dokka-subprojects/plugin-templating/api/plugin-templating.api
rename from dokka-subprojects/plugin-templating/api/templating.api
rename to dokka-subprojects/plugin-templating/api/plugin-templating.api
index aedd8ef39b95ac3a575456fdfc24e82fa26b7bdf..aedd8ef39b95ac3a575456fdfc24e82fa26b7bdf
GIT binary patch
literal 12683
zc%1E8OK;ma5I#4*!iOB1lhECswu=I79;k~XHIkqOdZQ&;W=xS<kqT-o_P_5?);l8g
zqU;#W!GJA~W`;8#hu@48#!E`v8CnV%Ay>{^iiDW)$afyGTt<j6;dp$rK@OtyhI=u^
zVu5_@NF0O|Ni3YtNZ_x6vs?5;d?X2H59xo4h`U$_!u)&CF0sFz{ne<uP-eLG-;+1t
z&f8VYW`7e#<j2|D>n436jeWEvl*p}fp{|^BCh;%%;p}@wiHlfj2oyb{C*%<BToH;t
zoc*i_uE3gDKNBixBMi|*)W<TlHhX*4&%0b(o{m&u5n5&U76teRk!v2y%U=>R0oRqS
z#5anV??B8Ta(aCWB-iFUlwjB#n%b|X6=thi5kHO+zfY4(I{;l^;YK7>msOnqJ2|NY
zaR3At$lbt|Ya--}$K0NwbZm+AvAD-5a@Sc_TGD8zEZNR;IfZ4Rae1^*30ez4_aqjf
z{^WTNyzuOt2LWQ<7x+*dwQj$f_%vmHr(L6G2~f!#f*@ob9rzGXde({CsXv+bg2$o5
zxCgPjq&UD#Hg8_tvP@N=7P*T3PeOeGb3Mbjvk*%{9aW)6*ndENU)$P<nVl%ML4I};
z$WOFFF7C7^w5YC}#TJlR(bo#miu57TrFUe{Ff%!F2)uPKyH$vtUf>mqshq>#qJ%dg
z!NXbs>!Vj6xsv8aBy~2hPu%I8ZbMy*_tRoj@3bDFmK@$Ao>Ktdz=!NOU5&Bvb~0hS
zc}kXNnW#7FP~_OT<6J7Ldkg6p8R`3Y84QfG;noQVT&;mA_D^%LpS5;?=sPT6#l!gR
z1&OdL$rDyRh4)1U^k^m=Jvi$@xt`98QhnPa?R{|#a{-?#Xn2>%-Ru*Ay)ku&5Dw(&
zqfQ%B@vHF4eHC`q*FSKj2@153M8>jPG0$Zus6jH?<`#5~PE*Ow)Ln15q=Y%@hjW9Z
zyH1O_d44ev5F-x70dP3Td6sA6w;tBKj#pknyE}ZBHk7Q&COfXO)9FwiG3$B3lt#aF
zdovBajS0ZnbPkLNOo2&Vy)~t@ULAVX)Fy`R@*w04Hu<~!2|{MfB>hJ(=|6Mn!gZ7U
zdtKwLTUw*Ca64r%dsm=3-o=*5HO`Q)+&%Sn8)Qg%n`)i&QhEHge1y(<%+l3L@jo%5
zdFiSs{@IX6AIs0&+jc`xGP+66|Ir8nWpftBvJ2Ef_FF8?!pRXW*5`1vg4Ddqs`>8h
zvG*9S$if1+8etkT_>9P<((S!tdF|$Bh8?D8`2$Z)aJx(s?U^xj4K|Ea22j;liCzX4
z9FDS1R$9hf7FLywGN#d<B;H0&Od&JBcw%7{rWYctsBfAV*iamCRiM=i3YInBVTgi@
zzXS3osT=n^jv$e0XNQ=1n7P|&QfsMXnBZw>^zAHQP-0CUTdFvziE*dkuHEZ46RlG5
z(m<#55U;}CbT`biw)62RaFVtI9M2xu06T()Bz7U<Hz?ZRs53)vVbKNg9W#rXg07~z
zpNDA#$*lW3jAN#+of$){C2+YSfUj;WY;b+tT8B`_(u}#ewEvz%=H?I?&#2cC>+6X1
VU~gcQ_G2fWbF@#hkMG^-{{f5xEx`Z)
diff --git a/dokka-subprojects/plugin-versioning/api/versioning.api b/dokka-subprojects/plugin-versioning/api/plugin-versioning.api
rename from dokka-subprojects/plugin-versioning/api/versioning.api
rename to dokka-subprojects/plugin-versioning/api/plugin-versioning.api
index 6ba2c8224080baf33e2ed165e27dc1cbf120846c..6ba2c8224080baf33e2ed165e27dc1cbf120846c
GIT binary patch
literal 9230
zc%1E7OOM+&5I%Q*g%3F-Cm~IH=@tcc{Xh(OZNm<H=p~>f+RHUXsv>2?E&AU()cZx6
zlI5U>9QI*(=Hu|=%y4EDM0-ly(Sa~TM=nJ|jCgo--mu(<h%n)J{B%Oj8Ha*!M%dAL
zzKl6LkYf}g36FNkH>=RYA$&dh?V5h7Aaad=9)1c^D<U@foiHN*7`<P#!2~oqqCKHR
zUYv<~0;Wj(O+J3u6(I3e6x0#Rve4-Lhi;%1ySOqJ%z8s-<V2ECXF&ukTz~NJ@54jT
znbdI<hM38e8yzL_QWSywRx0WqlP82bGeU7Y2`={o&H($P+J6JVr15jEk*&}w9b7C-
zYh_+bK(UaJ;AQaV!sIKKDIsdjcOE{Vh)Rv8=%KHfIxh*V_HWpg{jFEV;=dw9MTMda
z_D_w|lF){EkX#}kUpZC~d`04Q%snMJuY4hSBHj+s%aJF^sjNeMCOi@o?nXW^6Q_zX
z9NU@;`Q)lknoI#aLZAVlQxY9GMO3|suroi^XiQJ2vTQE5yNQ}z{$wk8h>qAgWtLQi
z&Y3ExLX0F%mr_0#@3htJ21%$2r<(ONaF%ffc$wE_S4@7Uae971K~JatEPa|`F437B
z6L(gG@zDOpYpUMi7&9-e=ih<i`vp9hyl^j~cq=ayi#dZ7O)1v#AVb8&frq{d=>U8e
z0vmpRDIVXIg;tQ*iVf#dS+a!8sLAjxg8f)qayjD>^AyYv!Yl~e;D91G%SL1F`-pj9
zx`=!&aeE}NBe4&fQen(}AA1CHnhM`K#61!yV(XB*SO^VJ-N4kQN*w?=K?0I~+YxJV
z;*t{Pyq$dqz~bvuIJ5M>kB@q=;^KV;z8p6Jgue-6qTq9b1*eh1`+|-cqjff_yLe*W
zOr1XYTjyi{!wt361H(D<XZSHBfrJPMrkePD{5C<q&251YB3>I8kEVps--*|&0IhDl
z>{Xkpg^}P<;4nx`!kJR6N>hUewYg(ucly27*MEv50ha6P{<Ze9|N7wCUDwt!W;UW%
zkZiFJ=X$ScLXDdHHuI@X(8dX4Cx87EO<laPC-2+AYfQ3?NVVfZTlX@q$-q86d#lYo
z8+IWr8}@DJ8YI7SuU@p3m5H7v=*rhgF2ASvnR543^7HiA(`^$>y%8jo05Jt^c_?+0
z-sK1l_bRWmT1=*!ue<4HJ6|ogUnld;$S@jd0mxNn^TpJpYsf987_aB?`se0UDt_|J
zImL+SM;Lcpb6zgM2ow+@(3Q<HRIMb#$c4N21%;<t6*ye>DrIDY{HKoczjU66{#w<@
zIO>#CZ}owmA#{(t+*so-{?|LT>nZ4$=2z6qD->bpYjrLA(e5VhUYe!uiak-Px@%$W
zi$%F@>+q!lJuj?G`_*1tIihIL*C@W)GDlr4=Fg&D5_SZdb8H1JXRt}&6_pZ&ragbx
zJHEJ3%N1&+rb%)^Kc8<?ws-wh+bRNd6<KB0-ofpwibn6h@jTX0PZ679EAHJ>>FeE1
zWlk?dJftl~jusR9={Jd4ZM?2$2sUEf!r!z?_U2;%?DlEw0KhhHy#`puI8Pb`UvPTH
z3&KwMymSEA+s<;$q4>OVS7m9Z6tn{wZ9k{#ZG11QQ{W;Mp*<Aj$d#kGR6l^5bj?f6
rSByF4_1A<I(IMaP)qy*`>bsE?<BPkBVSQe{-D+IR<f~#+ms!_;n`9$o
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment