diff --git a/plugins/kotlin/gradle/gradle-java/BUILD.bazel b/plugins/kotlin/gradle/gradle-java/BUILD.bazel
index 8ea2272d359d..1ec0be8f2eaa 100644
--- a/plugins/kotlin/gradle/gradle-java/BUILD.bazel
+++ b/plugins/kotlin/gradle/gradle-java/BUILD.bazel
@@ -93,6 +93,7 @@ jvm_library(
"//platform/lang-api:lang",
"//platform/execution",
"//plugins/kotlin/base/indices",
+ "//platform/util/jdom",
]
)
@@ -183,6 +184,7 @@ jvm_library(
"//platform/lang-api:lang",
"//platform/execution",
"//plugins/kotlin/base/indices",
+ "//platform/util/jdom",
]
)
### auto-generated section `build kotlin.gradle.gradle-java` end
diff --git a/plugins/kotlin/gradle/gradle-java/kotlin.gradle.gradle-java.iml b/plugins/kotlin/gradle/gradle-java/kotlin.gradle.gradle-java.iml
index 0f50540ab3a5..356a1c5e7e30 100644
--- a/plugins/kotlin/gradle/gradle-java/kotlin.gradle.gradle-java.iml
+++ b/plugins/kotlin/gradle/gradle-java/kotlin.gradle.gradle-java.iml
@@ -95,5 +95,6 @@
+
\ No newline at end of file
diff --git a/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml b/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml
index a5f541e23934..80be347a8e25 100644
--- a/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml
+++ b/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml
@@ -109,6 +109,8 @@
+
+
("isComposeJvm")
+private val mainFunctionClassFqnKey = Key.create("mainClassFqn")
+
+internal var ExternalSystemRunConfiguration.isComposeJvm: Boolean
+ get() = getUserData(isComposeJvmKey) == true
+ set(value) = putUserData(isComposeJvmKey, value)
+
+internal var ExternalSystemRunConfiguration.mainFunctionClassFqn: String?
+ get() = getUserData(mainFunctionClassFqnKey) as? String
+ set(value) = putUserData(mainFunctionClassFqnKey, value)
+
+
+internal class ComposeJvmRunConfigurationExtension :
+ ExternalSystemReifiedRunConfigurationExtension(GradleRunConfiguration::class.java) {
+
+ private companion object {
+ const val ROOT_KEY = "ComposeJvm"
+ const val MAIN_FUNCTION_FILE_KEY = "mainFunctionFile"
+ }
+
+ override fun SettingsEditorFragmentContainer.configureFragments(
+ configuration: GradleRunConfiguration
+ ) {
+ // fragment will only be visible + accessible if set programmatically for this run configuration
+ if (!configuration.isComposeJvm) return
+
+ addRemovableLabeledTextSettingsEditorFragment(
+ settingsFragmentInfo = object : LabeledSettingsFragmentInfo {
+ override val editorLabel: String = KotlinJavaGradleBundle.message("settings.run.configuration.compose.jvm.main.class.name")
+ override val settingsId: String = "compose.jvm.main.class.fragment"
+ override val settingsName: String = KotlinJavaGradleBundle.message("settings.run.configuration.compose.jvm.main.class.name")
+ override val settingsGroup: String = KotlinJavaGradleBundle.message("settings.run.configuration.compose.jvm.main.class.group")
+ override val settingsHint: String = KotlinJavaGradleBundle.message("settings.run.configuration.compose.jvm.main.class.hint")
+ override val settingsActionHint: String? = null
+ },
+ createComponent = { JBTextField() },
+ getter = { configuration.mainFunctionClassFqn },
+ setter = { configuration.mainFunctionClassFqn = it ?: "" },
+ default = { null })
+ }
+
+ override fun writeExternal(runConfiguration: ExternalSystemRunConfiguration, element: Element) {
+ super.writeExternal(runConfiguration, element)
+ if (!runConfiguration.isComposeJvm) return
+
+ element.addContent(Element(ROOT_KEY).apply {
+ addContent(Element(MAIN_FUNCTION_FILE_KEY).apply { text = runConfiguration.mainFunctionClassFqn })
+ })
+ }
+
+ override fun readExternal(runConfiguration: ExternalSystemRunConfiguration, element: Element) {
+ super.readExternal(runConfiguration, element)
+ val myElement = element.getChild(ROOT_KEY) ?: return
+
+ runConfiguration.isComposeJvm = true
+ runConfiguration.mainFunctionClassFqn = myElement.getChild(MAIN_FUNCTION_FILE_KEY)?.text ?: ""
+ }
+}