Fix: Kotlin/Native libs have non-user friendly representation in IDE

Issue #KT-30288
Issue #KT-34998
Issue #KT-34400 (partially fixes)
This commit is contained in:
Dmitriy Dolovov
2019-11-19 19:00:05 +07:00
parent d3a5dcb601
commit 28f2a2a864
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.configuration.DependencySubstitute.NoSubstitute
import org.jetbrains.kotlin.idea.configuration.DependencySubstitute.YesSubstitute
import org.jetbrains.kotlin.idea.configuration.KotlinNativeLibraryNameUtil.buildIDELibraryName
import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion
import org.jetbrains.kotlin.idea.versions.bundledRuntimeVersion
import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME
import org.jetbrains.kotlin.konan.library.lite.LiteKonanLibraryFacade
import org.jetbrains.plugins.gradle.ExternalDependencyId
@@ -117,27 +116,33 @@ internal class KotlinNativeLibrariesDependencySubstitutor(
)
private val kotlinVersion: String? by lazy {
// first, try to figure out Kotlin plugin version by classpath (the default approach)
val classpathData = buildClasspathData(gradleModule, resolverCtx)
val result = findKotlinPluginVersion(classpathData)
if (result == null) {
val message = """
Unexpectedly can't obtain Kotlin Gradle plugin version for ${gradleModule.name} module.
Build classpath is ${classpathData.classpathEntries.flatMap { it.classesFile }}.
${KotlinNativeLibrariesDependencySubstitutor::class.java.simpleName} will run in idle mode. No dependencies will be substituted.
val versionFromClasspath = findKotlinPluginVersion(classpathData)
Hint: Please make sure that you have explicitly specified version of Kotlin Gradle plugin in `plugins { }` section.
Example:
if (versionFromClasspath == null) {
// then, examine Kotlin MPP Gradle model
val versionFromModel = mppModel.targets
.asSequence()
.flatMap { it.compilations.asSequence() }
.mapNotNull { it.kotlinTaskProperties.pluginVersion?.takeIf(String::isNotBlank) }
.firstOrNull()
plugins {
kotlin("multiplatform") version "${bundledRuntimeVersion()}"
}
""".trimIndent()
if (ApplicationManager.getApplication().isUnitTestMode)
LOG.warn(message)
else
LOG.error(message)
}
result
if (versionFromModel == null) {
LOG.warn(
"""
Can't obtain Kotlin Gradle plugin version for ${gradleModule.name} module.
Build classpath is ${classpathData.classpathEntries.flatMap { it.classesFile }}.
${KotlinMPPGradleModel::class.java.simpleName} is $mppModel.
${KotlinNativeLibrariesDependencySubstitutor::class.java.simpleName} will run in idle mode. No dependencies will be substituted.
""".trimIndent()
)
null
} else
versionFromModel
} else
versionFromClasspath
}
private fun getFileCollectionDependencySubstitute(dependency: FileCollectionDependency): DependencySubstitute =