IDEA-127219 Ability to disable Gradle as "configuration type to run" option for tests

This commit is contained in:
Vladislav.Soroka
2015-11-03 18:25:01 +03:00
parent 028c852510
commit 806b62700e
10 changed files with 353 additions and 32 deletions
@@ -36,6 +36,10 @@ gradle.codeInsight.action.apply_plugin.popup.title=Choose plugin
gradle.codeInsight.action.add_maven_dependency.text=Add maven artifact dependency
gradle.codeInsight.action.add_maven_dependency.description=Add selected maven artifact dependency to the project
gradle.runner=Runner
gradle.preferred_test_runner.ask=Let me choose per test
gradle.preferred_test_runner.PLATFORM_TEST_RUNNER=Platform Test Runner
gradle.preferred_test_runner.GRADLE_TEST_RUNNER=Gradle Test Runner
gradle.test.runner.ui.tests.tree.presentation.labels.waiting.tests=Waiting for tests...
gradle.test.runner.ui.tests.tree.presentation.labels.no.tests.were.found=Test events were not received
gradle.test.runner.ui.tests.actions.open.gradle.report.text=Open Gradle test report
+9 -4
View File
@@ -86,11 +86,11 @@
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<testActionProvider implementation="org.jetbrains.plugins.gradle.execution.test.runner.OpenGradleTestResultActionProvider"/>
<runConfigurationProducer implementation="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer"
order="first"/>
order="last"/>
<runConfigurationProducer implementation="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer"
order="first"/>
order="last"/>
<runConfigurationProducer implementation="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer"
order="first"/>
order="last"/>
<externalSystemExecutionConsoleManager implementation="org.jetbrains.plugins.gradle.execution.test.runner.GradleTestsExecutionConsoleManager"/>
<projectImportProvider implementation="org.jetbrains.plugins.gradle.service.project.wizard.GradleProjectImportProvider"/>
<projectImportBuilder implementation="org.jetbrains.plugins.gradle.service.project.wizard.GradleProjectImportBuilder"/>
@@ -99,7 +99,11 @@
<internalFileTemplate name="Gradle Build Script with wrapper"/>
<projectConfigurable groupId="build.tools" groupWeight="110" id="reference.settingsdialog.project.gradle"
instance="org.jetbrains.plugins.gradle.service.settings.GradleConfigurable"
key="gradle.name" bundle="i18n.GradleBundle"/>
key="gradle.name" bundle="i18n.GradleBundle">
<configurable instance="org.jetbrains.plugins.gradle.settings.GradleRunnerConfigurable"
id="reference.settings.project.gradle.running" key="gradle.runner" bundle="i18n.GradleBundle"
nonDefaultProject="true"/>
</projectConfigurable>
<library.presentationProvider implementation="org.jetbrains.plugins.gradle.config.GradleLibraryPresentationProvider" order="last"/>
<java.elementFinder implementation="org.jetbrains.plugins.gradle.config.GradleClassFinder"/>
<editorTabTitleProvider implementation="org.jetbrains.plugins.gradle.util.GradleEditorTabTitleProvider"/>
@@ -119,6 +123,7 @@
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.service.GradleInstallationManager"/>
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.settings.GradleSystemSettings"/>
<applicationService serviceImplementation="org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings"/>
<projectService serviceImplementation="org.jetbrains.plugins.gradle.settings.GradleSettings"/>
<projectService serviceImplementation="org.jetbrains.plugins.gradle.settings.GradleLocalSettings"/>
<projectService serviceImplementation="org.jetbrains.plugins.gradle.service.project.GradleNotification"/>
@@ -43,10 +43,9 @@ public class AllInPackageGradleConfigurationProducer extends GradleTestRunConfig
}
@Override
protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
protected boolean doSetupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
final PsiPackage psiPackage = JavaRuntimeConfigurationProducerBase.checkPackage(context.getPsiLocation());
if (psiPackage == null) return false;
sourceElement.set(psiPackage);
@@ -75,10 +74,7 @@ public class AllInPackageGradleConfigurationProducer extends GradleTestRunConfig
}
@Override
public boolean isConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
if (configuration == null) return false;
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
protected boolean doIsConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
final PsiPackage psiPackage = JavaRuntimeConfigurationProducerBase.checkPackage(context.getPsiLocation());
if (psiPackage == null) return false;
@@ -15,6 +15,9 @@
*/
package org.jetbrains.plugins.gradle.execution.test.runner;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.actions.ConfigurationFromContext;
import com.intellij.execution.actions.RunConfigurationProducer;
import com.intellij.execution.configurations.ConfigurationType;
@@ -27,17 +30,23 @@ import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunCo
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.util.BooleanFunction;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil;
import org.jetbrains.plugins.gradle.service.resolve.GradleCommonClassNames;
import org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings;
import org.jetbrains.plugins.gradle.util.GradleConstants;
import org.jetbrains.plugins.gradle.util.GradleEnvironment;
import java.util.List;
import static org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings.PreferredTestRunner.GRADLE_TEST_RUNNER;
import static org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings.PreferredTestRunner.PLATFORM_TEST_RUNNER;
/**
* @author Vladislav.Soroka
* @since 2/26/2015
@@ -52,9 +61,60 @@ public abstract class GradleTestRunConfigurationProducer extends RunConfiguratio
@Override
public boolean isPreferredConfiguration(ConfigurationFromContext self, ConfigurationFromContext other) {
return !GradleEnvironment.PREFER_IDEA_TEST_RUNNER && super.isPreferredConfiguration(self, other);
return GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == null ||
GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == GRADLE_TEST_RUNNER;
}
@Override
public boolean shouldReplace(ConfigurationFromContext self, ConfigurationFromContext other) {
return GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == GRADLE_TEST_RUNNER;
}
@Nullable
@Override
public RunnerAndConfigurationSettings findExistingConfiguration(ConfigurationContext context) {
final RunnerAndConfigurationSettings existingConfiguration = super.findExistingConfiguration(context);
if (existingConfiguration == null && GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == GRADLE_TEST_RUNNER) {
final ConfigurationFromContext createdContext = createConfigurationFromContext(context);
if (createdContext != null) {
final RunnerAndConfigurationSettings settings = createdContext.getConfigurationSettings();
final RunManagerEx manager = RunManagerEx.getInstanceEx(context.getProject());
manager.setTemporaryConfiguration(settings);
return settings;
}
else {
return null;
}
}
return existingConfiguration;
}
@Override
protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
if (GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == PLATFORM_TEST_RUNNER) return false;
return doSetupConfigurationFromContext(configuration, context, sourceElement);
}
protected abstract boolean doSetupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement);
@Override
public boolean isConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
if (GradleSystemRunningSettings.getInstance().getPreferredTestRunner() == PLATFORM_TEST_RUNNER) return false;
if (configuration == null) return false;
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
return doIsConfigurationFromContext(configuration, context);
}
protected abstract boolean doIsConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context);
@NotNull
static List<String> getTasksToRun(Module module) {
final List<String> result;
@@ -35,7 +35,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType;
import org.jetbrains.plugins.gradle.util.GradleConstants;
@@ -55,10 +54,9 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura
}
@Override
protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
protected boolean doSetupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
final Location contextLocation = context.getLocation();
assert contextLocation != null;
final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
@@ -93,10 +91,7 @@ public class TestClassGradleConfigurationProducer extends GradleTestRunConfigura
}
@Override
public boolean isConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
if (configuration == null) return false;
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
protected boolean doIsConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
final Location contextLocation = context.getLocation();
assert contextLocation != null;
final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
@@ -51,9 +51,9 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur
}
@Override
protected boolean setupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
protected boolean doSetupConfigurationFromContext(ExternalSystemRunConfiguration configuration,
ConfigurationContext context,
Ref<PsiElement> sourceElement) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
@@ -77,10 +77,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur
}
@Override
public boolean isConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
if (configuration == null) return false;
if (!GradleConstants.SYSTEM_ID.equals(configuration.getSettings().getExternalSystemId())) return false;
protected boolean doIsConfigurationFromContext(ExternalSystemRunConfiguration configuration, ConfigurationContext context) {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer.class).isMultipleElementsSelected(context)) {
return false;
}
@@ -174,7 +171,7 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur
}
configuration.getSettings().setScriptParameters(buf.toString().trim());
configuration.setName(psiMethod.getName());
configuration.setName((containingClasses.length == 1 ? containingClasses[0].getName() + "." : "") + psiMethod.getName());
return true;
}
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.plugins.gradle.settings.GradleRunnerConfigurable">
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="3" column-count="5" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="923" height="400"/>
</constraints>
<properties/>
<border type="none"/>
<children>
<component id="2c82f" class="com.intellij.openapi.ui.ComboBox" binding="myPreferredTestRunner" custom-create="true">
<constraints>
<grid row="1" column="0" row-span="1" col-span="5" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
</component>
<vspacer id="6ca33">
<constraints>
<grid row="2" column="4" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
<component id="2514a" class="com.intellij.ui.TitledSeparator">
<constraints>
<grid row="0" column="0" row-span="1" col-span="5" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="&lt;html&gt;Run tests using:&lt;/html&gt;"/>
</properties>
</component>
</children>
</grid>
</form>
@@ -0,0 +1,148 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.plugins.gradle.settings;
import com.google.common.base.Objects;
import com.intellij.openapi.options.BaseConfigurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.util.GradleBundle;
import javax.swing.*;
/**
* @author Vladislav.Soroka
* @since 11/2/2015
*/
public class GradleRunnerConfigurable extends BaseConfigurable implements SearchableConfigurable {
private JPanel myMainPanel;
private ComboBox myPreferredTestRunner;
private static final TestRunnerItem[] TEST_RUNNER_ITEMS = new TestRunnerItem[]{
new TestRunnerItem(GradleSystemRunningSettings.PreferredTestRunner.PLATFORM_TEST_RUNNER),
new TestRunnerItem(GradleSystemRunningSettings.PreferredTestRunner.GRADLE_TEST_RUNNER),
new TestRunnerItem(null)};
private final Project myProject;
public GradleRunnerConfigurable(Project project) {
myProject = project;
}
@Nls
@Override
public String getDisplayName() {
return GradleBundle.message("gradle.runner");
}
@Nullable
@Override
public String getHelpTopic() {
return "reference.settings.project.gradle.running";
}
@Override
public void apply() throws ConfigurationException {
GradleSystemRunningSettings.getInstance().setPreferredTestRunner(
((TestRunnerItem)myPreferredTestRunner.getSelectedItem()).value);
}
@Override
public void reset() {
GradleSystemRunningSettings settings = GradleSystemRunningSettings.getInstance();
final TestRunnerItem item = getItem(settings.getPreferredTestRunner());
myPreferredTestRunner.setSelectedItem(item);
}
@Nullable
@Override
public JComponent createComponent() {
return myMainPanel;
}
@Override
public boolean isModified() {
GradleSystemRunningSettings uiSettings = new GradleSystemRunningSettings();
final TestRunnerItem selectedItem = (TestRunnerItem)myPreferredTestRunner.getSelectedItem();
GradleSystemRunningSettings.PreferredTestRunner preferredTestRunner = selectedItem == null ? null : selectedItem.value;
uiSettings.setPreferredTestRunner(preferredTestRunner);
GradleSystemRunningSettings settings = GradleSystemRunningSettings.getInstance();
return !settings.equals(uiSettings);
}
@Override
public void disposeUIResources() {
}
@NotNull
@Override
public String getId() {
return "reference.settings.project.gradle.running";
}
@Nullable
@Override
public Runnable enableSearch(String option) {
return null;
}
private void createUIComponents() {
myPreferredTestRunner = new ComboBox(getItems());
}
private static TestRunnerItem getItem(GradleSystemRunningSettings.PreferredTestRunner preferredTestRunner) {
for (TestRunnerItem item : getItems()) {
if (item.value == preferredTestRunner) return item;
}
return null;
}
private static TestRunnerItem[] getItems() {
return TEST_RUNNER_ITEMS;
}
static class TestRunnerItem {
public TestRunnerItem(GradleSystemRunningSettings.PreferredTestRunner value) {
this.value = value;
}
GradleSystemRunningSettings.PreferredTestRunner value;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TestRunnerItem)) return false;
TestRunnerItem item = (TestRunnerItem)o;
return value == item.value;
}
@Override
public int hashCode() {
return Objects.hashCode(value);
}
@Override
public String toString() {
return GradleBundle.message("gradle.preferred_test_runner." + (value == null ? "ask" : value.name()));
}
}
}
@@ -0,0 +1,85 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.plugins.gradle.settings;
import com.google.common.base.Objects;
import com.intellij.openapi.components.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
* @since 14/8/2014
*/
@State(
name = "GradleSystemRunningSettings",
storages = {
@Storage(file = StoragePathMacros.APP_CONFIG + "/gradle.run.settings.xml")
}
)
public class GradleSystemRunningSettings implements PersistentStateComponent<GradleSystemRunningSettings.MyState> {
@Nullable private PreferredTestRunner myPreferredTestRunner = PreferredTestRunner.PLATFORM_TEST_RUNNER;
@NotNull
public static GradleSystemRunningSettings getInstance() {
return ServiceManager.getService(GradleSystemRunningSettings.class);
}
@SuppressWarnings("unchecked")
@Nullable
@Override
public GradleSystemRunningSettings.MyState getState() {
MyState state = new MyState();
state.preferredTestRunner = myPreferredTestRunner;
return state;
}
@Override
public void loadState(MyState state) {
myPreferredTestRunner = state.preferredTestRunner;
}
@Nullable
public PreferredTestRunner getPreferredTestRunner() {
return myPreferredTestRunner;
}
public void setPreferredTestRunner(@Nullable PreferredTestRunner preferredTestRunner) {
myPreferredTestRunner = preferredTestRunner;
}
public static class MyState {
public PreferredTestRunner preferredTestRunner;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof GradleSystemRunningSettings)) return false;
GradleSystemRunningSettings settings = (GradleSystemRunningSettings)o;
return Objects.equal(myPreferredTestRunner, settings.myPreferredTestRunner);
}
@Override
public int hashCode() {
return Objects.hashCode(myPreferredTestRunner);
}
public enum PreferredTestRunner {
PLATFORM_TEST_RUNNER, GRADLE_TEST_RUNNER
}
}
@@ -11,7 +11,6 @@ public class GradleEnvironment {
@NonNls public static final boolean DEBUG_GRADLE_HOME_PROCESSING = Boolean.getBoolean("gradle.debug.home.processing");
@NonNls public static final boolean ADJUST_USER_DIR = Boolean.getBoolean("gradle.adjust.userdir");
@NonNls public static final boolean PREFER_IDEA_TEST_RUNNER = Boolean.getBoolean("idea.gradle.prefer.idea_test_runner");
public static class Headless {
@NonNls public static final String GRADLE_DISTRIBUTION_TYPE = System.getProperty("idea.gradle.distributionType");