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 ?: "" + } +}