Commit 117c5845 authored by Nikita Bobko's avatar Nikita Bobko Committed by intellij-monorepo-bot
Browse files

IJ-CR-27350 (2) Work around broken kotlin-annotation-processing when kotlin < 1.7.20

^KTIJ-22255 Fixed
KTIJ-22176
IJ-CR-27350

This commit is a proper fix for KTIJ-22176. Previous 72e906d6e95f4 fix
contained two problems:
1. Incorrect error handling (if any of `loadDependenciesSync` inside
   `flatMap` returns empty list then it's not propagated which causes
   KTIJ-22255)
2. Hardcoded KOTLIN_DIST_FOR_JPS_META_DEPS contains "trove4j",
   "kotlinx-coroutines-core-jvm", and "annotations". All of those
   artifacts have different groupId and version. It wasn't taken into
   account. Luckily, we caught that with test
   `JpsCompilerMultiModule.testJpsCompilerMultiModule`

Note: `distinct` isn't really needed anymore, but I left it because it's
a more safe code.

(cherry picked from commit 1db159f8e2ee9be4f90b6e4d4387a3ec6fa45a97)

GitOrigin-RevId: cbf8dbfe7ce9f019c6f016772744268f78766a5d
parent 515c718a
Branches unavailable Tags unavailable
No related merge requests found
Showing with 24 additions and 54 deletions
+24 -54
......@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.artifacts.KotlinArtifacts.Companion.KOTLIN_JPS_
import org.jetbrains.kotlin.idea.artifacts.KotlinArtifacts.Companion.KOTLIN_MAVEN_GROUP_ID
import org.jetbrains.kotlin.idea.artifacts.KotlinArtifacts.Companion.OLD_KOTLIN_DIST_ARTIFACT_ID
import org.jetbrains.kotlin.idea.artifacts.LazyZipUnpacker
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
import org.jetbrains.kotlin.idea.base.plugin.KotlinBasePluginBundle
import org.jetbrains.kotlin.idea.compiler.configuration.LazyKotlinMavenArtifactDownloader.DownloadContext
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
......@@ -140,25 +141,35 @@ object KotlinArtifactsDownloader {
"Don't call downloadMavenArtifact on UI thread"
}
// KTIJ-22176 KTI-878. Since 1.7.20, 'kotlin-dist-for-jps-meta' doesn't depend on broken 'kotlin-annotation-processing'
val props =
val excludedDeps =
if (artifactId == KOTLIN_DIST_FOR_JPS_META_ARTIFACT_ID && IdeKotlinVersion.get(version) < IdeKotlinVersion.get("1.7.20")) {
KOTLIN_DIST_FOR_JPS_META_DEPS
} else {
listOf(MavenArtifact(artifactId, artifactIsPom = artifactIsPom))
}.map {
RepositoryLibraryProperties(
"$KOTLIN_MAVEN_GROUP_ID:${it.artifactId}:$version",
if (it.artifactIsPom) ArtifactKind.POM.extension else ArtifactKind.ARTIFACT.extension,
it.transitive,
listOf( // Not existing deps of kotlin-annotation-processing KTI-878
"$KOTLIN_MAVEN_GROUP_ID:util",
"$KOTLIN_MAVEN_GROUP_ID:cli",
"$KOTLIN_MAVEN_GROUP_ID:backend",
"$KOTLIN_MAVEN_GROUP_ID:frontend",
"$KOTLIN_MAVEN_GROUP_ID:frontend.java",
"$KOTLIN_MAVEN_GROUP_ID:plugin-api",
"$KOTLIN_MAVEN_GROUP_ID:backend.jvm.entrypoint",
)
} else {
emptyList()
}
val prop = RepositoryLibraryProperties(
JpsMavenRepositoryLibraryDescriptor(
KOTLIN_MAVEN_GROUP_ID,
artifactId,
version,
if (artifactIsPom) ArtifactKind.POM.extension else ArtifactKind.ARTIFACT.extension,
true,
excludedDeps,
)
)
val repos = getMavenRepos(project) + additionalMavenRepos
val downloadedArtifacts =
props.flatMap { JarRepositoryManager.loadDependenciesSync(project, it, false, false, null, repos, indicator) }
return downloadedArtifacts
return JarRepositoryManager.loadDependenciesSync(project, prop, false, false, null, repos, indicator)
.map { File(it.file.toVirtualFileUrl(VirtualFileUrlManager.getInstance(project)).presentableUrl).canonicalFile }
.distinct()
}
......@@ -200,45 +211,4 @@ object KotlinArtifactsDownloader {
getMavenRepos(project).joinToString("\n") { it.url }.prependIndent()
) + "\n\n" + suggestion
}
private val KOTLIN_DIST_FOR_JPS_META_DEPS = listOf(
MavenArtifact("jvm-abi-gen"),
MavenArtifact("kotlin-android-extensions-runtime"),
MavenArtifact("kotlin-android-extensions"),
MavenArtifact("kotlin-annotation-processing-runtime"),
MavenArtifact("kotlin-annotation-processing", transitive = false),
MavenArtifact("kotlin-annotations-jvm"),
MavenArtifact("kotlin-compiler"),
MavenArtifact("kotlin-daemon-client"),
MavenArtifact("kotlin-daemon"),
MavenArtifact("kotlin-main-kts"),
MavenArtifact("kotlin-parcelize-compiler"),
MavenArtifact("kotlin-parcelize-runtime"),
MavenArtifact("kotlin-reflect"),
MavenArtifact("kotlin-script-runtime"),
MavenArtifact("kotlin-scripting-common"),
MavenArtifact("kotlin-scripting-compiler-impl"),
MavenArtifact("kotlin-scripting-compiler"),
MavenArtifact("kotlin-scripting-js"),
MavenArtifact("kotlin-scripting-jvm"),
MavenArtifact("kotlin-stdlib-jdk7"),
MavenArtifact("kotlin-stdlib-jdk8"),
MavenArtifact("kotlin-stdlib-js"),
MavenArtifact("kotlin-stdlib"),
MavenArtifact("kotlin-test-js"),
MavenArtifact("kotlin-test-junit5"),
MavenArtifact("kotlin-test-junit"),
MavenArtifact("kotlin-test-testng"),
MavenArtifact("kotlin-test"),
MavenArtifact("trove4j"),
MavenArtifact("kotlinx-coroutines-core-jvm"),
MavenArtifact("annotations"),
MavenArtifact("kotlin-maven-serialization"),
MavenArtifact("kotlin-maven-sam-with-receiver"),
MavenArtifact("kotlin-maven-allopen"),
MavenArtifact("kotlin-maven-lombok"),
MavenArtifact("kotlin-maven-noarg"),
)
private data class MavenArtifact(val artifactId: String, val transitive: Boolean = true, val artifactIsPom: Boolean = false)
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment