Skip to content

Commit 9809ae7

Browse files
antohabyvmishenev
andauthored
Use compileDependencyFiles for getting compilation dependencies (#3147)
Co-authored-by: vmishenev <[email protected]>
1 parent 62d1143 commit 9809ae7

File tree

4 files changed

+60
-3
lines changed

4 files changed

+60
-3
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collec
6262
#### Gradle plugins ####
6363
# The Maven coordinates of Gradle plugins that are either used in convention plugins, or in Dokka subprojects
6464
gradlePlugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "gradlePlugin-kotlin" }
65+
gradlePlugin-kotlin-klibCommonizerApi = { module = "org.jetbrains.kotlin:kotlin-klib-commonizer-api", version.ref = "gradlePlugin-kotlin" }
6566
gradlePlugin-android = { module = "com.android.tools.build:gradle", version.ref = "gradlePlugin-android" }
6667
gradlePlugin-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "gradlePlugin-dokka" }
6768
gradlePlugin-shadow = { module = "gradle.plugin.com.github.johnrengelman:shadow", version.ref = "gradlePlugin-shadow" }

runners/gradle-plugin/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ dependencies {
1212
api(projects.core)
1313

1414
compileOnly(libs.gradlePlugin.kotlin)
15+
compileOnly(libs.gradlePlugin.kotlin.klibCommonizerApi)
1516
compileOnly(libs.gradlePlugin.android)
1617

1718
testImplementation(kotlin("test"))
1819
testImplementation(libs.gradlePlugin.kotlin)
20+
testImplementation(libs.gradlePlugin.kotlin.klibCommonizerApi)
1921
testImplementation(libs.gradlePlugin.android)
2022
}
2123

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
@file:Suppress("INVISIBLE_REFERENCE")
2+
package org.jetbrains.dokka.gradle.kotlin
3+
4+
import java.io.File
5+
import org.gradle.api.Project
6+
import org.jetbrains.kotlin.commonizer.KonanDistribution
7+
import org.jetbrains.kotlin.commonizer.platformLibsDir
8+
import org.jetbrains.kotlin.commonizer.stdlib
9+
import org.jetbrains.kotlin.compilerRunner.konanHome
10+
import org.jetbrains.kotlin.konan.target.KonanTarget
11+
12+
/**
13+
* Provides access to the Kotlin/Native distribution components:
14+
* * [stdlibDir] -- stdlib directory
15+
* * [platformDependencies] -- list of directories to platform dependencies
16+
*
17+
* It uses Kotlin Gradle Plugin API that is guaranteed to be present in:
18+
* 1.5 <= kotlinVersion <= 1.9
19+
*
20+
* It should not be used with Kotlin versions later than 1.9
21+
*/
22+
internal class KotlinNativeDistributionAccessor(
23+
project: Project
24+
) {
25+
private val konanDistribution = KonanDistribution(
26+
@Suppress("INVISIBLE_MEMBER")
27+
project.konanHome
28+
)
29+
30+
val stdlibDir: File = konanDistribution.stdlib
31+
32+
fun platformDependencies(target: KonanTarget): List<File> = konanDistribution
33+
.platformLibsDir
34+
.resolve(target.name)
35+
.listLibraryFiles()
36+
37+
private fun File.listLibraryFiles(): List<File> = listFiles().orEmpty()
38+
.filter { it.isDirectory || it.extension == "klib" }
39+
}

runners/gradle-plugin/src/main/kotlin/org/jetbrains/dokka/gradle/kotlin/kotlinClasspathUtils.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.jetbrains.dokka.gradle.isAndroidTarget
1010
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
1111
import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinNativeCompilation
1212
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
13-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTool
1413

1514
internal fun Project.classpathOf(sourceSet: KotlinSourceSet): FileCollection {
1615
val compilations = compilationsOf(sourceSet)
@@ -43,8 +42,24 @@ private fun KotlinCompilation.compileClasspathOf(project: Project): FileCollecti
4342
}
4443

4544
private fun KotlinCompilation.newCompileClasspathOf(project: Project): FileCollection {
46-
val compilationClasspath = (compileTaskProvider.get() as? KotlinCompileTool)?.libraries ?: project.files()
47-
return compilationClasspath + platformDependencyFiles(project)
45+
if (this.target.isAndroidTarget()) { // Workaround for https://youtrack.jetbrains.com/issue/KT-33893
46+
return this.classpathOf(project)
47+
}
48+
49+
val result = project.objects.fileCollection()
50+
result.from({ compileDependencyFiles })
51+
52+
val kgpVersion = project.getKgpVersion()
53+
// Since Kotlin 2.0 native distributiuon dependencies will be included to compileDependencyFiles
54+
if (kgpVersion != null && kgpVersion <= KotlinGradlePluginVersion(1, 9, 255)) {
55+
if (this is AbstractKotlinNativeCompilation) {
56+
val kotlinNativeDistributionAccessor = KotlinNativeDistributionAccessor(project)
57+
result.from(kotlinNativeDistributionAccessor.stdlibDir)
58+
result.from(kotlinNativeDistributionAccessor.platformDependencies(konanTarget))
59+
}
60+
}
61+
62+
return result
4863
}
4964

5065
private fun KotlinCompilation.oldCompileClasspathOf(project: Project): FileCollection {

0 commit comments

Comments
 (0)