mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
[kotlin] allow switching between K1/K2 plugins by UI setting
^KTIJ-25184 fixed GitOrigin-RevId: a56e9a0fdc257e67faedb2b4734148d764d211c6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3f7fd4b7d7
commit
7b01c8c339
@@ -5,18 +5,27 @@ import com.intellij.openapi.application.ApplicationManager
|
||||
|
||||
interface KotlinPluginKindProvider {
|
||||
val pluginKind: KotlinPluginKind
|
||||
|
||||
companion object {
|
||||
val currentPluginKind: KotlinPluginKind
|
||||
get() = ApplicationManager.getApplication().getService(KotlinPluginKindProvider::class.java).pluginKind
|
||||
}
|
||||
}
|
||||
|
||||
enum class KotlinPluginKind {
|
||||
FE10_PLUGIN,
|
||||
FIR_PLUGIN
|
||||
FE10_PLUGIN {
|
||||
override fun other(): KotlinPluginKind = FIR_PLUGIN
|
||||
},
|
||||
FIR_PLUGIN {
|
||||
override fun other(): KotlinPluginKind = FE10_PLUGIN
|
||||
};
|
||||
|
||||
abstract fun other(): KotlinPluginKind
|
||||
}
|
||||
|
||||
private val currentPluginKind: KotlinPluginKind
|
||||
get() = ApplicationManager.getApplication().getService(KotlinPluginKindProvider::class.java).pluginKind
|
||||
|
||||
fun isK2Plugin(): Boolean {
|
||||
return currentPluginKind == KotlinPluginKind.FIR_PLUGIN
|
||||
return KotlinPluginKindProvider.currentPluginKind == KotlinPluginKind.FIR_PLUGIN
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -28,11 +37,11 @@ fun isK2Plugin(): Boolean {
|
||||
fun suppressAndroidPlugin(): Boolean = isK2Plugin()
|
||||
|
||||
fun isFe10Plugin(): Boolean {
|
||||
return currentPluginKind == KotlinPluginKind.FE10_PLUGIN
|
||||
return KotlinPluginKindProvider.currentPluginKind == KotlinPluginKind.FE10_PLUGIN
|
||||
}
|
||||
|
||||
fun checkKotlinPluginKind(expectedPluginKind: KotlinPluginKind) {
|
||||
val pluginKind = currentPluginKind
|
||||
val pluginKind = KotlinPluginKindProvider.currentPluginKind
|
||||
check(pluginKind == expectedPluginKind) {
|
||||
"Invalid Kotlin plugin detected: $pluginKind, but $expectedPluginKind was expected"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.base.plugin
|
||||
|
||||
import com.intellij.diagnostic.VMOptions
|
||||
|
||||
object KotlinPluginKindSwitcher {
|
||||
@JvmStatic
|
||||
fun canPluginBeSwitchedByVmOptions(): Boolean {
|
||||
return VMOptions.canWriteOptions()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getPluginKindByVmOptions(): KotlinPluginKind {
|
||||
val isK2Enabled = VMOptions.readOption(USE_K2_VM_OPTION_PREFIX, /*effective=*/ false).toBoolean()
|
||||
return if (isK2Enabled) KotlinPluginKind.FIR_PLUGIN else KotlinPluginKind.FE10_PLUGIN
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun setPluginKindByVmOptions(newPluginKind: KotlinPluginKind) {
|
||||
val isK2Enabled = newPluginKind == KotlinPluginKind.FIR_PLUGIN
|
||||
VMOptions.setOption(USE_K2_VM_OPTION_PREFIX, isK2Enabled.toString())
|
||||
}
|
||||
|
||||
const val USE_K2_VM_OPTION_NAME: String = "idea.kotlin.plugin.use.k2"
|
||||
|
||||
private const val USE_K2_VM_OPTION_PREFIX: String = "-D${USE_K2_VM_OPTION_NAME}="
|
||||
}
|
||||
Reference in New Issue
Block a user