From fe493dbbe94ea2a4073d463715413fea6d50f1b9 Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Mon, 18 Mar 2019 16:44:58 +0300 Subject: [PATCH] add support for importing Gradle Run Configurations from gradle build scripts Fixes https://github.com/JetBrains/gradle-idea-ext-plugin/issues/74 and https://github.com/JetBrains/gradle-idea-ext-plugin/issues/47 --- .../plugin-resources/META-INF/plugin.xml | 2 + .../GradleRunConfigurationImporter.kt | 33 ++++++++++++++++ .../GradleSettingsImportingTest.java | 38 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleRunConfigurationImporter.kt diff --git a/plugins/gradle/plugin-resources/META-INF/plugin.xml b/plugins/gradle/plugin-resources/META-INF/plugin.xml index f3ce7119443c..b7f17cfca939 100644 --- a/plugins/gradle/plugin-resources/META-INF/plugin.xml +++ b/plugins/gradle/plugin-resources/META-INF/plugin.xml @@ -117,6 +117,8 @@ + diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleRunConfigurationImporter.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleRunConfigurationImporter.kt new file mode 100644 index 000000000000..ffac503451e0 --- /dev/null +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/execution/GradleRunConfigurationImporter.kt @@ -0,0 +1,33 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.gradle.service.execution + +import com.intellij.execution.configurations.ConfigurationFactory +import com.intellij.execution.configurations.RunConfiguration +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider +import com.intellij.openapi.externalSystem.service.project.settings.RunConfigurationImporter +import com.intellij.openapi.project.Project +import com.intellij.util.ObjectUtils.consumeIfCast + +class GradleRunConfigurationImporter: RunConfigurationImporter { + override fun process(project: Project, + runConfiguration: RunConfiguration, + cfg: MutableMap, + modelsProvider: IdeModifiableModelsProvider) { + + if (runConfiguration !is GradleRunConfiguration) { + return + } + + val settings = runConfiguration.settings + + consumeIfCast(cfg["projectPath"], String::class.java) { settings.externalProjectPath = it } + consumeIfCast(cfg["taskNames"], List::class.java) { settings.taskNames = it as List } + consumeIfCast(cfg["envs"], Map::class.java) { settings.env = it as Map } + consumeIfCast(cfg["jvmArgs"], String::class.java) { settings.vmOptions = it } + consumeIfCast(cfg["scriptParameters"], String::class.java) { settings.scriptParameters = it } + } + + override fun canImport(typeName: String): Boolean = "gradle" == typeName + + override fun getConfigurationFactory(): ConfigurationFactory = GradleExternalTaskConfigurationType.getInstance().factory +} \ No newline at end of file diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleSettingsImportingTest.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleSettingsImportingTest.java index 1ef268b91cc5..cf63d3246223 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleSettingsImportingTest.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleSettingsImportingTest.java @@ -55,6 +55,7 @@ import org.jetbrains.plugins.gradle.settings.GradleSettings; import org.jetbrains.plugins.gradle.settings.TestRunner; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runners.Parameterized; @@ -176,6 +177,43 @@ public class GradleSettingsImportingTest extends GradleImportingTestCase { assertNull(app2Settings.get("jvmArgs")); } + @Test + @Ignore + public void testGradleRunConfigurationSettingsImport() throws Exception { + TestRunConfigurationImporter testExtension = new TestRunConfigurationImporter("gradle"); + maskRunImporter(testExtension); + + createSettingsFile("rootProject.name = 'moduleName'"); + importProject( + new GradleBuildScriptBuilderEx() + .withGradleIdeaExtPluginIfCan("0.5.1") + .addPostfix( + "import org.jetbrains.gradle.ext.*", + "idea.project.settings {", + " runConfigurations {", + " gr1(Gradle) {", + " project = rootProject", + " taskNames = [':cleanTest', ':test']", + " envs = ['env_key':'env_val']", + " jvmArgs = '-DvmKey=vmVal'", + " scriptParameters = '-PscriptParam'", + " }", + " }", + "}" + ).generate()); + + + final Map> configs = testExtension.getConfigs(); + + assertContain(new ArrayList<>(configs.keySet()), "gr1"); + Map gradleSettings = configs.get("gr1"); + + assertEquals(myProjectRoot.getPath(), ((String)gradleSettings.get("projectPath")).replace('\\', '/')); + assertTrue(((List)gradleSettings.get("taskNames")).contains(":cleanTest")); + assertEquals("-DvmKey=vmVal", gradleSettings.get("jvmArgs")); + assertTrue(((Map)gradleSettings.get("envs")).containsKey("env_key")); + } + private void maskRunImporter(@NotNull RunConfigurationImporter testExtension) { PlatformTestUtil.maskExtensions(RunConfigurationImporter.EP_NAME, Collections.singletonList(testExtension), getTestRootDisposable()); }