Files
kotlin-fork/jps/jps-common/build.gradle.kts
T
Leonid Shalupov 7480befe32 Replace reflection-based compiler arguments copying with generated code
Using of Kotlin reflection for simple operations like bean management is very slow

First time initialization time: 261 ms for `copyBean(K2JVMCompilerArguments())`
Subsequent calls of `copyBean(K2JVMCompilerArguments())` take 1.7 ms per call

Unfortunately compiler argument handling is also used in Kotlin IntelliJ plugin
to parse facet settings. Big projects may have thousands of Kotlin facets

The same `ArgumentUtilsKt.copyProperties` frame is seen across various freezes:
IDEA-252440 2-3 minutes freeze on Kotlin project reimporting in last 203 eap
IDEA-253107 A lot of short freezes (1-3 sec) during Kotlin project development
KTIJ-23501 Make main run configuration detection lighter
KTIJ-22435 Unresponsive UI with 100% cpu

Reflection issue:
KT-56358 KClasses.getMemberProperties takes too much time

This commit replaces all reflection stuff with a simple code generation
Now `K2JVMCompilerArguments().clone()` goes to hard-to-measure time
2023-04-03 15:47:35 +02:00

51 lines
1.5 KiB
Kotlin

import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
plugins {
kotlin("jvm")
id("jps-compatible")
}
dependencies {
implementation(kotlinStdlib())
@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 } }
compileOnly(intellijUtilRt())
compileOnly(intellijPlatformUtil())
compileOnly(jpsModel())
compileOnly(jpsModelImpl())
compileOnly(jpsModelSerialization())
testImplementation(project(":compiler:cli-common"))
testImplementation(jpsModelSerialization())
testImplementation(commonDependency("junit:junit"))
testImplementation(kotlin("test-junit"))
}
sourceSets {
"main" {
projectDefault()
generatedDir()
}
"test" { projectDefault() }
}
runtimeJar()
tasks.withType<KotlinCompilationTask<*>>().configureEach {
compilerOptions.apiVersion.value(KotlinVersion.KOTLIN_1_8).finalizeValueOnRead()
compilerOptions.languageVersion.value(KotlinVersion.KOTLIN_1_8).finalizeValueOnRead()
}