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
This commit is contained in:
@@ -10,7 +10,9 @@ import org.jetbrains.jps.model.ex.JpsElementChildRoleBase
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import org.jetbrains.kotlin.cli.common.arguments.*
|
||||
import org.jetbrains.kotlin.config.*
|
||||
import org.jetbrains.kotlin.config.CompilerSettings
|
||||
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
||||
import org.jetbrains.kotlin.config.KotlinModuleKind
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
|
||||
val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension?
|
||||
@@ -70,7 +72,7 @@ val JpsModule.testOutputFilePath: String?
|
||||
|
||||
val JpsModule.kotlinCompilerSettings: CompilerSettings
|
||||
get() {
|
||||
val defaultSettings = copyBean(project.kotlinCompilerSettings)
|
||||
val defaultSettings = project.kotlinCompilerSettings.copyOf()
|
||||
val facetSettings = kotlinFacet?.settings ?: return defaultSettings
|
||||
if (facetSettings.useProjectSettings) return defaultSettings
|
||||
return facetSettings.compilerSettings ?: defaultSettings
|
||||
@@ -90,7 +92,7 @@ val JpsModule.k2JvmCompilerArguments
|
||||
|
||||
private inline fun <reified T : CommonCompilerArguments> JpsModule.getCompilerArguments(): T {
|
||||
val projectSettings = project.kotlinCompilerSettingsContainer[T::class.java]
|
||||
val projectSettingsCopy = copyBean(projectSettings)
|
||||
val projectSettingsCopy = projectSettings.copyOf()
|
||||
|
||||
val facetSettings = kotlinFacet?.settings ?: return projectSettingsCopy
|
||||
if (facetSettings.useProjectSettings) return projectSettingsCopy
|
||||
|
||||
Reference in New Issue
Block a user