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
This commit is contained in:
Nikita Skvortsov
2019-03-19 12:42:43 +03:00
parent f939f623b0
commit fe493dbbe9
3 changed files with 73 additions and 0 deletions
@@ -117,6 +117,8 @@
<statistics.projectUsagesCollector implementation="org.jetbrains.plugins.gradle.statistics.GradleSettingsCollector"/>
<statistics.counterUsagesCollector groupId="build.gradle.actions" version="1"/>
<externalSystem.runConfigurationImporter
implementation="org.jetbrains.plugins.gradle.service.execution.GradleRunConfigurationImporter"/>
</extensions>
<actions>
@@ -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<String, Any>,
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<String> }
consumeIfCast(cfg["envs"], Map::class.java) { settings.env = it as Map<String, String> }
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
}
@@ -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<String, Map<String, Object>> configs = testExtension.getConfigs();
assertContain(new ArrayList<>(configs.keySet()), "gr1");
Map<String, Object> 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());
}