blob: bb17dc92419c4206e7a558cb3c6b2343e06c2711 [file] [log] [blame] [edit]
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
plugins {
kotlin("jvm")
id("jps-compatible")
}
val compilerModules: Array<String> by rootProject.extra
val generateTests by generator("org.jetbrains.kotlin.jps.GenerateJpsPluginTestsKt") {
javaLauncher.set(
javaToolchains.launcherFor {
languageVersion.set(JavaLanguageVersion.of(17))
}
)
}
dependencies {
compileOnly(project(":jps:jps-platform-api-signatures"))
testImplementation(projectTests(":generators:test-generator"))
@Suppress("UNCHECKED_CAST")
rootProject.extra["kotlinJpsPluginEmbeddedDependencies"]
.let { it as List<String> }
.forEach { implementation(project(it)) }
@Suppress("UNCHECKED_CAST")
rootProject.extra["kotlinJpsPluginMavenDependencies"]
.let { it as List<String> }
.forEach { implementation(project(it)) }
@Suppress("UNCHECKED_CAST")
rootProject.extra["kotlinJpsPluginMavenDependenciesNonTransitiveLibs"]
.let { it as List<String> }
.forEach { implementation(it) { isTransitive = false } }
implementation(project(":jps:jps-common"))
compileOnly(libs.intellij.fastutil)
compileOnly(jpsModel())
compileOnly(jpsBuild())
compileOnly(jpsModelSerialization())
compileOnly(intellijJDom())
testRuntimeOnly(jpsModel())
// testFramework includes too many unnecessary dependencies. Here we manually list all we need to successfully run JPS tests
testImplementation(jpsModelSerialization()) { isTransitive = false }
testImplementation(testFramework()) { isTransitive = false }
testImplementation("com.jetbrains.intellij.platform:test-framework-core:$intellijVersion") { isTransitive = false }
testImplementation("com.jetbrains.intellij.platform:test-framework-common:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:analysis-impl:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:boot:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:analysis:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:project-model:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:object-serializer:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:code-style:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:ide-impl:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:ide:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:ide-core:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:ide-core-impl:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:execution:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:util-ui:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:concurrency:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:editor:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:core-ui:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:lang:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:lang-impl:$intellijVersion") { isTransitive = false }
testRuntimeOnly("com.jetbrains.intellij.platform:util-ex:$intellijVersion") { isTransitive = false }
testRuntimeOnly(libs.gson)
testRuntimeOnly(intellijJDom())
testRuntimeOnly(libs.kotlinx.coroutines.core.jvm)
testImplementation(projectTests(":compiler:incremental-compilation-impl"))
testImplementation(jpsBuild())
compilerModules.forEach {
testRuntimeOnly(project(it))
}
testImplementation("org.projectlombok:lombok:1.18.16")
testImplementation(libs.kotlinx.serialization.json)
}
sourceSets {
"main" {
projectDefault()
resources.srcDir("resources-en")
}
"test" {
Ide.IJ {
java.srcDirs("jps-tests/test")
}
}
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
tasks.compileJava {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
}
tasks.compileKotlin {
compilerOptions.jvmTarget = JvmTarget.JVM_1_8
}
projectTest(parallel = true) {
// do not replace with compile/runtime dependency,
// because it forces Intellij reindexing after each compiler change
dependsOn(":kotlin-compiler:dist")
dependsOn(":kotlin-stdlib:jsJarForTests")
workingDir = rootDir
jvmArgs(
// https://github.com/JetBrains/intellij-community/blob/b49faf433f8d73ccd46016a5717f997d167de65f/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java#L67
"--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
"--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED",
// the minimal required set of modules to be opened for the intellij platform itself
"--add-opens=java.desktop/java.awt=ALL-UNNAMED",
"--add-opens=java.desktop/sun.awt=ALL-UNNAMED",
"--add-opens=java.base/java.lang=ALL-UNNAMED",
"--add-opens=java.desktop/javax.swing=ALL-UNNAMED",
"--add-opens=java.base/java.io=ALL-UNNAMED",
)
}
testsJar {}
tasks.withType<KotlinCompilationTask<*>>().configureEach {
compilerOptions.apiVersion.value(KotlinVersion.KOTLIN_1_8).finalizeValueOnRead()
compilerOptions.languageVersion.value(KotlinVersion.KOTLIN_1_8).finalizeValueOnRead()
}
/**
* Dependency Security Overrides
*
* Forces specific versions of transitive dependencies to address known vulnerabilities:
*
* Affected Library:
* └── io.netty
* ├── netty-buffer:* → 4.1.115.Final
* └── netty-codec-http2:* → 4.1.115.Final
*
* Mitigated Vulnerabilities:
* - CVE-2024-47535: Network security vulnerability
* - CVE-2024-29025: Remote code execution risk
* - CVE-2023-4586: Information disclosure vulnerability
* - CVE-2023-34462: Potential denial of service
*
* This configuration overrides versions regardless of the declaring dependency.
*/
configurations.all {
resolutionStrategy.eachDependency {
if (requested.group == "io.netty" &&
listOf(
"netty-buffer",
"netty-codec-http2",
).contains(requested.name)
) {
useVersion("4.1.115.Final")
because("CVE-2024-47535, CVE-2024-29025, CVE-2023-4586, CVE-2023-34462")
}
}
}