aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Lakotko <antoha.by@gmail.com>2023-10-09 13:28:09 +0200
committerGitHub <noreply@github.com>2023-10-09 13:28:09 +0200
commit9809ae702cb9f9fad3c500df14a839e4a090180a (patch)
tree9afb337f994360c6f0201324ce6733216bf59a25
parent62d1143ed3f2f76c4f52eaaa1e079fc8b8c7f264 (diff)
downloaddokka-9809ae702cb9f9fad3c500df14a839e4a090180a.tar.gz
dokka-9809ae702cb9f9fad3c500df14a839e4a090180a.tar.bz2
dokka-9809ae702cb9f9fad3c500df14a839e4a090180a.zip
Use compileDependencyFiles for getting compilation dependencies (#3147)
Co-authored-by: vmishenev <vad-mishenev@yandex.ru>
-rw-r--r--gradle/libs.versions.toml1
-rw-r--r--runners/gradle-plugin/build.gradle.kts2
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/KotlinNativeDistributionAccessor.kt39
-rw-r--r--runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt21
4 files changed, 60 insertions, 3 deletions
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 05a1faf2..6acd2a57 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -62,6 +62,7 @@ kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collec
#### 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-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" }
diff --git a/runners/gradle-plugin/build.gradle.kts b/runners/gradle-plugin/build.gradle.kts
index a9637d87..85fa16fd 100644
--- a/runners/gradle-plugin/build.gradle.kts
+++ b/runners/gradle-plugin/build.gradle.kts
@@ -12,10 +12,12 @@ dependencies {
api(projects.core)
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)
}
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/KotlinNativeDistributionAccessor.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/KotlinNativeDistributionAccessor.kt
new file mode 100644
index 00000000..3180efef
--- /dev/null
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/KotlinNativeDistributionAccessor.kt
@@ -0,0 +1,39 @@
+@file:Suppress("INVISIBLE_REFERENCE")
+package org.jetbrains.dokka.gradle.kotlin
+
+import java.io.File
+import org.gradle.api.Project
+import org.jetbrains.kotlin.commonizer.KonanDistribution
+import org.jetbrains.kotlin.commonizer.platformLibsDir
+import org.jetbrains.kotlin.commonizer.stdlib
+import org.jetbrains.kotlin.compilerRunner.konanHome
+import org.jetbrains.kotlin.konan.target.KonanTarget
+
+/**
+ * Provides access to the Kotlin/Native distribution components:
+ * * [stdlibDir] -- stdlib directory
+ * * [platformDependencies] -- list of directories to platform dependencies
+ *
+ * It uses Kotlin Gradle Plugin API that is guaranteed to be present in:
+ * 1.5 <= kotlinVersion <= 1.9
+ *
+ * It should not be used with Kotlin versions later than 1.9
+ */
+internal class KotlinNativeDistributionAccessor(
+ project: Project
+) {
+ private val konanDistribution = KonanDistribution(
+ @Suppress("INVISIBLE_MEMBER")
+ project.konanHome
+ )
+
+ val stdlibDir: File = konanDistribution.stdlib
+
+ fun platformDependencies(target: KonanTarget): List<File> = konanDistribution
+ .platformLibsDir
+ .resolve(target.name)
+ .listLibraryFiles()
+
+ private fun File.listLibraryFiles(): List<File> = listFiles().orEmpty()
+ .filter { it.isDirectory || it.extension == "klib" }
+} \ No newline at end of file
diff --git a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt
index 4fdc61c9..778261a7 100644
--- a/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt
+++ b/runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt
@@ -10,7 +10,6 @@ import org.jetbrains.dokka.gradle.isAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool
internal fun Project.classpathOf(sourceSet: KotlinSourceSet): FileCollection {
val compilations = compilationsOf(sourceSet)
@@ -43,8 +42,24 @@ private fun KotlinCompilation.compileClasspathOf(project: Project): FileCollecti
}
private fun KotlinCompilation.newCompileClasspathOf(project: Project): FileCollection {
- val compilationClasspath = (compileTaskProvider.get() as? KotlinCompileTool)?.libraries ?: project.files()
- return compilationClasspath + platformDependencyFiles(project)
+ if (this.target.isAndroidTarget()) { // Workaround for https://youtrack.jetbrains.com/issue/KT-33893
+ return this.classpathOf(project)
+ }
+
+ val result = project.objects.fileCollection()
+ result.from({ compileDependencyFiles })
+
+ val kgpVersion = project.getKgpVersion()
+ // Since Kotlin 2.0 native distributiuon dependencies will be included to compileDependencyFiles
+ if (kgpVersion != null && kgpVersion <= KotlinGradlePluginVersion(1, 9, 255)) {
+ if (this is AbstractKotlinNativeCompilation) {
+ val kotlinNativeDistributionAccessor = KotlinNativeDistributionAccessor(project)
+ result.from(kotlinNativeDistributionAccessor.stdlibDir)
+ result.from(kotlinNativeDistributionAccessor.platformDependencies(konanTarget))
+ }
+ }
+
+ return result
}
private fun KotlinCompilation.oldCompileClasspathOf(project: Project): FileCollection {