[build] add checks to ensure that no modules which are part of the IDE plugin do not use experimental stdlib API

to ensure binary compatibility with stdlib inside IntelliJ.

This includes using the latest stable kotlin API version and
forbidding using experimental declarations from stdlib.

^KT-62510
This commit is contained in:
Ilya Kirillov
2023-10-11 19:27:29 +02:00
committed by Space Team
parent ded5cf2caa
commit a65c735feb
18 changed files with 670 additions and 1 deletions
+96
View File
@@ -1,6 +1,8 @@
import org.gradle.crypto.checksum.Checksum
import org.gradle.plugins.ide.idea.model.IdeaModel
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
buildscript {
// a workaround for kotlin compiler classpath in kotlin project: sometimes gradle substitutes
@@ -68,6 +70,7 @@ val kotlinVersion by extra(
)
val kotlinLanguageVersion: String by extra
val kotlinApiVersionForModulesUsedInIDE: String by extra
extra["kotlin_root"] = rootDir
@@ -245,6 +248,98 @@ extra["compilerModules"] =
commonCompilerModules +
firAllCompilerModules
/**
* An array of projects used in the IntelliJ Kotlin Plugin.
*
* Experimental declarations from Kotlin stdlib cannot be used in those projects to avoid stdlib binary compatibility problems.
* See KT-62510 for details.
*/
val projectsUsedInIntelliJKotlinPlugin =
fe10CompilerModules +
commonCompilerModules +
firCompilerCoreModules +
irCompilerModulesForIDE +
arrayOf(
":analysis:analysis-api",
":analysis:analysis-api-fe10",
":analysis:analysis-api-fir",
":analysis:analysis-api-impl-barebone",
":analysis:analysis-api-impl-base",
":analysis:analysis-api-providers",
":analysis:analysis-api-standalone:analysis-api-standalone-base",
":analysis:analysis-api-standalone:analysis-api-fir-standalone-base",
":analysis:analysis-api-standalone",
":analysis:analysis-internal-utils",
":analysis:analysis-test-framework",
":analysis:decompiled",
":analysis:kt-references",
":analysis:kt-references:kt-references-fe10",
":analysis:light-classes-base",
":analysis:low-level-api-fir",
":analysis:project-structure",
":analysis:symbol-light-classes",
) +
arrayOf(
":kotlin-allopen-compiler-plugin.cli",
":kotlin-allopen-compiler-plugin.common",
":kotlin-allopen-compiler-plugin.k1",
":kotlin-allopen-compiler-plugin.k2",
":kotlin-assignment-compiler-plugin.cli",
":kotlin-assignment-compiler-plugin.common",
":kotlin-assignment-compiler-plugin.k1",
":kotlin-assignment-compiler-plugin.k2",
":plugins:parcelize:parcelize-compiler:parcelize.backend",
":plugins:parcelize:parcelize-compiler:parcelize.cli",
":plugins:parcelize:parcelize-compiler:parcelize.common",
":plugins:parcelize:parcelize-compiler:parcelize.k1",
":plugins:parcelize:parcelize-compiler:parcelize.k2",
":plugins:parcelize:parcelize-runtime",
":kotlin-sam-with-receiver-compiler-plugin.cli",
":kotlin-sam-with-receiver-compiler-plugin.common",
":kotlin-sam-with-receiver-compiler-plugin.k1",
":kotlin-sam-with-receiver-compiler-plugin.k2",
":kotlinx-serialization-compiler-plugin.cli",
":kotlinx-serialization-compiler-plugin.common",
":kotlinx-serialization-compiler-plugin.k1",
":kotlinx-serialization-compiler-plugin.k2",
":kotlinx-serialization-compiler-plugin.backend",
":kotlin-lombok-compiler-plugin.cli",
":kotlin-lombok-compiler-plugin.common",
":kotlin-lombok-compiler-plugin.k1",
":kotlin-lombok-compiler-plugin.k2",
":kotlin-noarg-compiler-plugin.cli",
":kotlin-noarg-compiler-plugin.common",
":kotlin-noarg-compiler-plugin.k1",
":kotlin-noarg-compiler-plugin.k2",
":kotlin-noarg-compiler-plugin.backend",
":plugins:android-extensions-compiler",
":kotlin-sam-with-receiver-compiler-plugin.cli",
":kotlin-sam-with-receiver-compiler-plugin.common",
":kotlin-sam-with-receiver-compiler-plugin.k1",
":kotlin-sam-with-receiver-compiler-plugin.k2",
":kotlin-compiler-runner-unshaded",
":kotlin-preloader",
":daemon-common",
":kotlin-daemon-client",
":kotlin-scripting-compiler",
":kotlin-gradle-statistics",
":jps:jps-common",
) +
if (kotlinBuildProperties.isKotlinNativeEnabled) arrayOf(":kotlin-native:backend.native") else emptyArray()
extra["projectsUsedInIntelliJKotlinPlugin"] = projectsUsedInIntelliJKotlinPlugin
// They are embedded just because we don't publish those dependencies as separate Maven artifacts (yet)
extra["kotlinJpsPluginEmbeddedDependencies"] = listOf(
":compiler:cli-common",
@@ -786,6 +881,7 @@ tasks {
dependsOn(":kotlin-tooling-core:check")
dependsOn(":kotlin-tooling-metadata:check")
dependsOn(":compiler:build-tools:kotlin-build-tools-api:check")
dependsOn(":tools:ide-plugin-dependencies-validator:test")
}
register("examplesTest") {