diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index 9af1518638e..74073c440e3 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -141,7 +141,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { @Suppress("UNCHECKED_CAST") val sourceSets = (getSourceSets(kotlinExt) as? NamedDomainObjectContainer)?.asMap?.values ?: emptyList() - val androidDeps = buildAndroidDeps(kotlinExt, project) + val androidDeps = buildAndroidDeps(kotlinExt.javaClass.classLoader, project) // Some performance optimisation: do not build metadata dependencies if source set is not common val doBuildMetadataDependencies = @@ -171,16 +171,20 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { } } - private fun buildAndroidDeps(kotlinExt: Any, project: Project): Map>? { + private fun buildAndroidDeps(classLoader: ClassLoader, project: Project): Map>? { val includeAndroidDeps = project.properties["kotlin.include.android.dependencies"]?.toString()?.toBoolean() == true if (includeAndroidDeps) { - val getAndroidSourceSetDependencies = - kotlinExt.javaClass.getMethodOrNull("getAndroidSourceSetDependencies", Project::class.java) - @Suppress("UNCHECKED_CAST") - return getAndroidSourceSetDependencies?.let { it(kotlinExt, project) } as Map>? - } else { - return emptyMap() + try { + val resolverClass = classLoader.loadClass("org.jetbrains.kotlin.gradle.targets.android.internal.AndroidDependencyResolver") + val getAndroidSourceSetDependencies = resolverClass.getMethodOrNull("getAndroidSourceSetDependencies", Project::class.java) + val resolver = resolverClass.getField("INSTANCE").get(null) + @Suppress("UNCHECKED_CAST") + return getAndroidSourceSetDependencies?.let { it(resolver, project) } as Map>? + } catch (e: Exception) { + logger.info("Unexpected exception", e) + } } + return null } private fun buildSourceSet( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index 33f24aefb2d..a32324669d8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.dsl import groovy.lang.Closure import org.gradle.api.InvalidUserCodeException import org.gradle.api.NamedDomainObjectCollection -import org.gradle.api.Project import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset @@ -55,10 +54,6 @@ open class KotlinMultiplatformExtension : internal val rootSoftwareComponent: KotlinSoftwareComponent by lazy { KotlinSoftwareComponentWithCoordinatesAndPublication("kotlin", targets) } - - @Suppress("unused") - fun getAndroidSourceSetDependencies(project: Project) = - AndroidDependencyResolver.getAndroidSourceSetDependencies(project) } internal fun KotlinTarget.isProducedFromPreset(kotlinTargetPreset: KotlinTargetPreset<*>): Boolean = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/AndroidDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt similarity index 99% rename from libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/AndroidDependencyResolver.kt rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt index 91e3c712abd..8c8bb66dd9c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/AndroidDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.gradle.dsl +package org.jetbrains.kotlin.gradle.targets.android.internal import com.android.build.gradle.BaseExtension import com.android.build.gradle.api.AndroidSourceSet @@ -34,6 +34,7 @@ data class AndroidDependency( val collection: Set? = null ) +@Suppress("unused") object AndroidDependencyResolver { private fun getAndroidSdkJar(project: Project): AndroidDependency? { val androidExtension = project.extensions.findByName("android") as BaseExtension? ?: return null