AppCode: device selection

AppCode: tests optimization
Platform: further ExecutionTarget support
This commit is contained in:
Anton Makeev
2012-06-30 19:13:50 +02:00
parent 5c0919f55f
commit 04cb02fe59
34 changed files with 309 additions and 142 deletions
@@ -20,6 +20,7 @@ import com.intellij.execution.BeforeRunTaskProvider;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.impl.ConfigurationSettingsEditorWrapper;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
@@ -161,7 +162,10 @@ public class BuildArtifactsBeforeRunTaskProvider extends BeforeRunTaskProvider<B
return false;
}
public boolean executeTask(DataContext context, RunConfiguration configuration, final BuildArtifactsBeforeRunTask task) {
public boolean executeTask(DataContext context,
RunConfiguration configuration,
ExecutionEnvironment env,
final BuildArtifactsBeforeRunTask task) {
final Ref<Boolean> result = Ref.create(false);
final Semaphore finished = new Semaphore();
@@ -22,6 +22,7 @@ import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.configurations.RunProfileWithCompileBeforeLaunchOption;
import com.intellij.execution.remote.RemoteConfiguration;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.compiler.CompileContext;
@@ -98,7 +99,7 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider<CompileStepBefor
return true;
}
public boolean executeTask(DataContext context, final RunConfiguration configuration, MakeBeforeRunTask task) {
public boolean executeTask(DataContext context, final RunConfiguration configuration, ExecutionEnvironment env, MakeBeforeRunTask task) {
if (!(configuration instanceof RunProfileWithCompileBeforeLaunchOption)) {
return true;
}
@@ -52,14 +52,11 @@ public class AbstractRerunFailedTestsAction extends AnAction {
private TestFrameworkRunningModel myModel;
private Getter<TestFrameworkRunningModel> myModelProvider;
protected TestConsoleProperties myConsoleProperties;
protected RunnerSettings myRunnerSettings;
protected ConfigurationPerRunnerSettings myConfigurationPerRunnerSettings;
protected ExecutionEnvironment myEnvironment;
public void init(final TestConsoleProperties consoleProperties,
final RunnerSettings runnerSettings,
final ConfigurationPerRunnerSettings configurationSettings) {
myConfigurationPerRunnerSettings = configurationSettings;
myRunnerSettings = runnerSettings;
final ExecutionEnvironment environment) {
myEnvironment = environment;
myConsoleProperties = consoleProperties;
}
@@ -99,8 +96,9 @@ public class AbstractRerunFailedTestsAction extends AnAction {
final Executor executor = isDebug ? DefaultDebugExecutor.getDebugExecutorInstance() : DefaultRunExecutor.getRunExecutorInstance();
final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(executor.getId(), profile);
assert runner != null;
runner.execute(executor, new ExecutionEnvironment(profile, profile.getProject(), myRunnerSettings, myConfigurationPerRunnerSettings,
null));
runner.execute(executor, new ExecutionEnvironment(runner, myEnvironment.getExecutionTarget(),
myEnvironment.getRunnerAndConfigurationSettings(),
myEnvironment.getProject()));
}
catch (ExecutionException e1) {
LOG.error(e1);
@@ -23,6 +23,7 @@
package com.intellij.execution;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
@@ -69,7 +70,7 @@ public abstract class BeforeRunTaskProvider<T extends BeforeRunTask> {
public abstract boolean canExecuteTask(RunConfiguration configuration, T task);
public abstract boolean executeTask(DataContext context, RunConfiguration configuration, T task);
public abstract boolean executeTask(DataContext context, RunConfiguration configuration, ExecutionEnvironment env, T task);
/**
*
@@ -79,16 +80,6 @@ public abstract class BeforeRunTaskProvider<T extends BeforeRunTask> {
return false;
}
/**
* Get runner id that current run is about to be made by
* @param context data context that is passed to <code>{@link #executeTask(com.intellij.openapi.actionSystem.DataContext, com.intellij.execution.configurations.RunConfiguration, BeforeRunTask)}</code>
* @return runner id
*/
@Nullable
public static String getRunnerId(DataContext context) {
return (String)context.getData(RUNNER_ID);
}
@Nullable
public static <T extends BeforeRunTask> BeforeRunTaskProvider<T> getProvider(Project project, Key<T> key) {
BeforeRunTaskProvider<BeforeRunTask>[] providers = Extensions.getExtensions(BeforeRunTaskProvider.EXTENSION_POINT_NAME, project);
@@ -15,7 +15,6 @@
*/
package com.intellij.execution;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
@@ -23,10 +22,11 @@ import com.intellij.execution.ui.RunContentManager;
import com.intellij.openapi.project.Project;
import com.intellij.util.messages.Topic;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class ExecutionManager {
public static final Topic<ExecutionListener> EXECUTION_TOPIC = new Topic<ExecutionListener>("configuration executed", ExecutionListener.class,
Topic.BroadcastDirection.TO_PARENT);
public static final Topic<ExecutionListener> EXECUTION_TOPIC
= new Topic<ExecutionListener>("configuration executed", ExecutionListener.class, Topic.BroadcastDirection.TO_PARENT);
public static ExecutionManager getInstance(final Project project) {
return project.getComponent(ExecutionManager.class);
@@ -34,16 +34,21 @@ public abstract class ExecutionManager {
public abstract RunContentManager getContentManager();
public abstract void compileAndRun(Runnable startRunnable, RunProfile configuration, RunProfileState state, Runnable onCancelRunnable);
public abstract void compileAndRun(@NotNull Runnable startRunnable,
@NotNull ExecutionEnvironment env,
@Nullable RunProfileState state,
@Nullable Runnable onCancelRunnable);
public abstract ProcessHandler[] getRunningProcesses();
public abstract void startRunProfile(@NotNull RunProfileStarter starter, @NotNull RunProfileState state,
@NotNull Project project, @NotNull Executor executor, @NotNull ExecutionEnvironment env);
public abstract void startRunProfile(@NotNull RunProfileStarter starter,
@NotNull RunProfileState state,
@NotNull Project project,
@NotNull Executor executor,
@NotNull ExecutionEnvironment env);
public abstract void restartRunProfile(@NotNull Project project,
@NotNull Executor executor,
@NotNull ExecutionTarget target,
@NotNull RunnerAndConfigurationSettings configuration);
}
@@ -42,4 +42,9 @@ public abstract class ExecutionTarget {
public int hashCode() {
return getId().hashCode();
}
@Override
public String toString() {
return getId();
}
}
@@ -0,0 +1,22 @@
/*
* Copyright 2000-2012 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 com.intellij.execution;
import org.jetbrains.annotations.NotNull;
public interface ExecutionTargetListener {
void activeTargetChanged(@NotNull ExecutionTarget newTarget);
}
@@ -15,8 +15,8 @@
*/
package com.intellij.execution;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.util.messages.Topic;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -24,9 +24,12 @@ import java.util.Collections;
import java.util.List;
public abstract class ExecutionTargetManager {
public static final Topic<ExecutionTargetListener> TOPIC = Topic.create("ExecutionTarget topic", ExecutionTargetListener.class);
@NotNull
public static ExecutionTargetManager getInstance(@NotNull Project project) {
return ServiceManager.getService(project, ExecutionTargetManager.class);
return project.getComponent(ExecutionTargetManager.class);
}
@NotNull
@@ -39,9 +39,11 @@ public interface RunnerAndConfigurationSettings {
String getName();
RunnerSettings getRunnerSettings(ProgramRunner runner);
@NotNull
RunnerSettings getRunnerSettings(@NotNull ProgramRunner runner);
ConfigurationPerRunnerSettings getConfigurationSettings(ProgramRunner runner);
@NotNull
ConfigurationPerRunnerSettings getConfigurationSettings(@NotNull ProgramRunner runner);
@Nullable
ConfigurationType getType();
@@ -43,6 +43,10 @@ public abstract class CommandLineState implements RunnableState {
myEnvironment = environment;
}
public ExecutionEnvironment getEnvironment() {
return myEnvironment;
}
public RunnerSettings getRunnerSettings() {
return myEnvironment.getRunnerSettings();
}
@@ -51,6 +55,11 @@ public abstract class CommandLineState implements RunnableState {
return myEnvironment.getConfigurationSettings();
}
@NotNull
public ExecutionTarget getExecutionTarget() {
return myEnvironment.getExecutionTarget();
}
public ExecutionResult execute(@NotNull final Executor executor, @NotNull final ProgramRunner runner) throws ExecutionException {
final ProcessHandler processHandler = startProcess();
final ConsoleView console = createConsole(executor);
@@ -30,17 +30,17 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
/**
* @author spleaner
*/
public class ExecutionEnvironment {
private final Project myProject;
private final RunContentDescriptor myContentToReuse;
@Nullable private final Project myProject;
@NotNull private RunProfile myRunProfile;
@NotNull private ExecutionTarget myTarget;
private RunProfile myRunProfile;
private RunnerSettings myRunnerSettings;
private ConfigurationPerRunnerSettings myConfigurationSettings;
@Nullable private RunnerSettings myRunnerSettings;
@Nullable private ConfigurationPerRunnerSettings myConfigurationSettings;
@Nullable private RunnerAndConfigurationSettings myRunnerAndConfigurationSettings;
@Nullable private final RunContentDescriptor myContentToReuse;
@TestOnly
public ExecutionEnvironment() {
@@ -50,7 +50,7 @@ public class ExecutionEnvironment {
public ExecutionEnvironment(@NotNull final ProgramRunner runner,
@NotNull final RunnerAndConfigurationSettings configuration,
Project project) {
@Nullable Project project) {
this(runner, DefaultExecutionTarget.INSTANCE, configuration, project);
}
@@ -59,8 +59,8 @@ public class ExecutionEnvironment {
@NotNull final RunnerAndConfigurationSettings configuration,
Project project) {
this(configuration.getConfiguration(),
project,
target,
project,
configuration.getRunnerSettings(runner),
configuration.getConfigurationSettings(runner),
null,
@@ -68,27 +68,27 @@ public class ExecutionEnvironment {
}
public ExecutionEnvironment(@NotNull RunProfile runProfile,
Project project,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings,
@Nullable Project project,
@Nullable RunnerSettings runnerSettings,
@Nullable ConfigurationPerRunnerSettings configurationSettings,
@Nullable RunContentDescriptor contentToReuse) {
this(runProfile, project, runnerSettings, configurationSettings, contentToReuse, null);
}
public ExecutionEnvironment(@NotNull RunProfile runProfile,
Project project,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings,
@Nullable RunContentDescriptor contentToReuse,
@Nullable RunnerAndConfigurationSettings settings) {
this(runProfile, project, DefaultExecutionTarget.INSTANCE, runnerSettings, configurationSettings, contentToReuse, settings);
@Nullable Project project,
@Nullable RunnerSettings runnerSettings,
@Nullable ConfigurationPerRunnerSettings configurationSettings,
@Nullable RunContentDescriptor contentToReuse,
@Nullable RunnerAndConfigurationSettings settings) {
this(runProfile, DefaultExecutionTarget.INSTANCE, project, runnerSettings, configurationSettings, contentToReuse, settings);
}
public ExecutionEnvironment(@NotNull RunProfile runProfile,
Project project,
@NotNull ExecutionTarget target,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings,
@Nullable Project project,
@Nullable RunnerSettings runnerSettings,
@Nullable ConfigurationPerRunnerSettings configurationSettings,
@Nullable RunContentDescriptor contentToReuse,
@Nullable RunnerAndConfigurationSettings settings) {
myTarget = target;
@@ -104,15 +104,23 @@ public class ExecutionEnvironment {
* @deprecated use {@link #ExecutionEnvironment(ProgramRunner, com.intellij.execution.RunnerAndConfigurationSettings, com.intellij.openapi.project.Project)}
*/
@Deprecated
public ExecutionEnvironment(@NotNull final ProgramRunner runner, @NotNull final RunnerAndConfigurationSettings configuration, final DataContext context) {
this(configuration.getConfiguration(), PlatformDataKeys.PROJECT.getData(context), configuration.getRunnerSettings(runner), configuration.getConfigurationSettings(runner), null, configuration);
public ExecutionEnvironment(@NotNull final ProgramRunner runner,
@NotNull final RunnerAndConfigurationSettings configuration,
@NotNull final DataContext context) {
this(configuration.getConfiguration(),
PlatformDataKeys.PROJECT.getData(context),
configuration.getRunnerSettings(runner),
configuration.getConfigurationSettings(runner),
null,
configuration);
}
/**
* @deprecated use {@link #ExecutionEnvironment(com.intellij.execution.configurations.RunProfile, com.intellij.openapi.project.Project, com.intellij.execution.configurations.RunnerSettings, com.intellij.execution.configurations.ConfigurationPerRunnerSettings, com.intellij.execution.ui.RunContentDescriptor)}
*/
@Deprecated
public ExecutionEnvironment(@NotNull final RunProfile profile, final DataContext dataContext) {
public ExecutionEnvironment(@NotNull final RunProfile profile,
@NotNull final DataContext dataContext) {
this(profile, PlatformDataKeys.PROJECT.getData(dataContext), null, null, null);
}
@@ -121,9 +129,9 @@ public class ExecutionEnvironment {
*/
@Deprecated
public ExecutionEnvironment(@NotNull final RunProfile runProfile,
final RunnerSettings runnerSettings,
final ConfigurationPerRunnerSettings configurationSettings,
final DataContext dataContext) {
@Nullable final RunnerSettings runnerSettings,
@Nullable final ConfigurationPerRunnerSettings configurationSettings,
@NotNull final DataContext dataContext) {
this(runProfile, PlatformDataKeys.PROJECT.getData(dataContext), runnerSettings, configurationSettings, null);
}
@@ -165,16 +173,23 @@ public class ExecutionEnvironment {
return myContentToReuse;
}
@Nullable
public String getRunnerId() {
return myConfigurationSettings == null ? null : myConfigurationSettings.getRunnerId();
}
@Nullable
public RunnerSettings getRunnerSettings() {
return myRunnerSettings;
}
@Nullable
public ConfigurationPerRunnerSettings getConfigurationSettings() {
return myConfigurationSettings;
}
@Nullable public RunProfileState getState(final Executor executor) throws ExecutionException {
@Nullable
public RunProfileState getState(final Executor executor) throws ExecutionException {
return myRunProfile.getState(executor, this);
}
}
@@ -17,10 +17,11 @@ package com.intellij.execution;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.components.*;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.util.containers.ContainerUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,11 +29,15 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements ProjectComponent {
@State(name = "XcodeMetaData", storages = {@Storage(file = StoragePathMacros.WORKSPACE_FILE, scheme = StorageScheme.DEFAULT)})
public class ExecutionTargetManagerImpl extends ExecutionTargetManager implements ProjectComponent, PersistentStateComponent<Element> {
@NotNull private final Project myProject;
@NotNull private final Object myActiveTargetLock = new Object();
@Nullable private ExecutionTarget myActiveTarget;
@Nullable private String mySavedActiveTargetId;
public ExecutionTargetManagerImpl(@NotNull Project project) {
myProject = project;
}
@@ -45,12 +50,34 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement
public void projectClosed() {
}
@Override
public Element getState() {
synchronized (myActiveTargetLock) {
Element state = new Element("state");
String id = myActiveTarget == null ? mySavedActiveTargetId : myActiveTarget.getId();
if (id != null) state.setAttribute("SELECTED_TARGET", id);
return state;
}
}
@Override
public void loadState(Element state) {
synchronized (myActiveTargetLock) {
if (myActiveTarget == null && mySavedActiveTargetId == null) {
mySavedActiveTargetId = state.getAttributeValue("SELECTED_TARGET");
}
}
}
@Override
public void initComponent() {
RunManagerImpl.getInstanceImpl(myProject).addRunManagerListener(new RunManagerAdapter() {
@Override
public void runConfigurationChanged(@NotNull RunnerAndConfigurationSettings settings) {
updateActiveTarget(settings);
if (settings == RunManager.getInstance(myProject).getSelectedConfiguration()) {
updateActiveTarget(settings);
}
}
@Override
@@ -86,7 +113,7 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement
public void setActiveTarget(@NotNull ExecutionTarget target) {
ApplicationManager.getApplication().assertIsDispatchThread();
synchronized (myActiveTargetLock) {
myActiveTarget = target;
doSetActiveTarget(target);
}
}
@@ -95,12 +122,32 @@ public class ExecutionTargetManagerImpl extends ExecutionTargetManager implement
}
private void updateActiveTarget(@Nullable RunnerAndConfigurationSettings settings) {
if (settings == null) return;
List<ExecutionTarget> suitable = getTargetsFor(settings);
List<ExecutionTarget> suitable = settings == null ? Collections.singletonList(DefaultExecutionTarget.INSTANCE)
: getTargetsFor(settings);
synchronized (myActiveTargetLock) {
int index = suitable.indexOf(myActiveTarget);
myActiveTarget = index >= 0 ? suitable.get(index) : ContainerUtil.getFirstItem(suitable, DefaultExecutionTarget.INSTANCE);
int index = -1;
if (myActiveTarget != null) {
index = suitable.indexOf(myActiveTarget);
}
else if (mySavedActiveTargetId != null) {
for (int i = 0, size = suitable.size(); i < size; i++) {
if (suitable.get(i).getId().equals(mySavedActiveTargetId)) {
index = i;
break;
}
}
}
doSetActiveTarget(index >= 0 ? suitable.get(index) : ContainerUtil.getFirstItem(suitable, DefaultExecutionTarget.INSTANCE));
}
}
private void doSetActiveTarget(@NotNull ExecutionTarget newTarget) {
mySavedActiveTargetId = null;
ExecutionTarget prev = myActiveTarget;
myActiveTarget = newTarget;
if (prev != null && !prev.equals(myActiveTarget)) {
myProject.getMessageBus().syncPublisher(TOPIC).activeTargetChanged(myActiveTarget);
}
}
@@ -269,13 +269,11 @@ public class RunConfigurationsComboBoxAction extends ComboBoxAction implements D
@Override
public void setSelected(AnActionEvent e, boolean state) {
if (state) {
ExecutionTargetManager.setActiveTarget(myProject, myTarget);
updateButton(ExecutionTargetManager.getActiveTarget(myProject),
RunManagerEx.getInstanceEx(myProject).getSelectedConfiguration(),
myProject,
e.getPresentation());
}
ExecutionTargetManager.setActiveTarget(myProject, myTarget);
updateButton(ExecutionTargetManager.getActiveTarget(myProject),
RunManagerEx.getInstanceEx(myProject).getSelectedConfiguration(),
myProject,
e.getPresentation());
}
}
@@ -18,7 +18,10 @@ package com.intellij.execution.impl;
import com.intellij.CommonBundle;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessHandler;
@@ -101,9 +104,11 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
return handlers.toArray(new ProcessHandler[handlers.size()]);
}
public void compileAndRun(final Runnable startRunnable, final RunProfile configuration, final @Nullable RunProfileState state, @Nullable final Runnable onCancelRunnable) {
if (configuration instanceof RunConfiguration) {
final RunConfiguration runConfiguration = (RunConfiguration)configuration;
public void compileAndRun(@NotNull final Runnable startRunnable, @NotNull final ExecutionEnvironment env, final @Nullable RunProfileState state, @Nullable final Runnable onCancelRunnable) {
RunProfile profile = env.getRunProfile();
if (profile instanceof RunConfiguration) {
final RunConfiguration runConfiguration = (RunConfiguration)profile;
final RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(myProject);
final List<BeforeRunTask> activeTasks = new ArrayList<BeforeRunTask>();
@@ -120,7 +125,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
public void run() {
for (BeforeRunTask task : activeTasks) {
BeforeRunTaskProvider<BeforeRunTask> provider = BeforeRunTaskProvider.getProvider(myProject, task.getProviderId());
if(provider != null && !provider.executeTask(dataContext, runConfiguration, task)) {
if(provider != null && !provider.executeTask(dataContext, runConfiguration, env, task)) {
if (onCancelRunnable != null) {
SwingUtilities.invokeLater(onCancelRunnable);
}
@@ -194,8 +199,7 @@ public class ExecutionManagerImpl extends ExecutionManager implements ProjectCom
startRunnable.run();
}
else {
final RunnerSettings runnerSettings = env.getRunnerSettings();
compileAndRun(startRunnable, runnerSettings != null ? runnerSettings.getRunProfile() : profile, state, new Runnable() {
compileAndRun(startRunnable, env, state, new Runnable() {
public void run() {
if (!project.isDisposed()) {
project.getMessageBus().syncPublisher(EXECUTION_TOPIC).processNotStarted(executor.getId(), env);
@@ -152,7 +152,10 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
}
@Override
public boolean executeTask(final DataContext dataContext, RunConfiguration configuration, RunConfigurableBeforeRunTask task) {
public boolean executeTask(final DataContext dataContext,
RunConfiguration configuration,
final ExecutionEnvironment env,
RunConfigurableBeforeRunTask task) {
RunnerAndConfigurationSettings settings = task.getSettings();
if (settings == null) {
return false;
@@ -163,9 +166,14 @@ extends BeforeRunTaskProvider<RunConfigurationBeforeRunProvider.RunConfigurableB
if (runner == null)
return false;
final ExecutionEnvironment environment = new ExecutionEnvironment(runner, settings, myProject);
if (!ExecutionTargetManager.canRun(settings, env.getExecutionTarget())) {
return false;
}
if (!runner.canRun(executorId, environment.getRunProfile())) {
return false;
}
else {
final Semaphore targetDone = new Semaphore();
final boolean[] result = new boolean[1];
@@ -320,7 +320,8 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
};
}
public RunnerSettings getRunnerSettings(ProgramRunner runner) {
@NotNull
public RunnerSettings getRunnerSettings(@NotNull ProgramRunner runner) {
RunnerSettings settings = myRunnerSettings.get(runner);
if (settings == null) {
settings = createRunnerSettings(runner);
@@ -329,7 +330,8 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C
return settings;
}
public ConfigurationPerRunnerSettings getConfigurationSettings(ProgramRunner runner) {
@NotNull
public ConfigurationPerRunnerSettings getConfigurationSettings(@NotNull ProgramRunner runner) {
ConfigurationPerRunnerSettings settings = myConfigurationPerRunnerSettings.get(runner);
if (settings == null) {
settings = new ConfigurationPerRunnerSettings(runner.getRunnerId(), myConfiguration.createRunnerSettings(new InfoProvider(runner)));
@@ -20,6 +20,7 @@ import com.intellij.execution.BeforeRunTask;
import com.intellij.execution.BeforeRunTaskProvider;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.Key;
@@ -62,7 +63,7 @@ public class UnknownBeforeRunTaskProvider extends BeforeRunTaskProvider<UnknownB
return false;
}
public boolean executeTask(DataContext context, RunConfiguration configuration, UnknownTask task) {
public boolean executeTask(DataContext context, RunConfiguration configuration, ExecutionEnvironment env, UnknownTask task) {
return true;
}
@@ -78,8 +78,8 @@ public class RestartAction extends AnAction implements DumbAware {
try {
final ExecutionEnvironment old = myEnvironment;
myRunner.execute(myExecutor, new ExecutionEnvironment(old.getRunProfile(),
project,
old.getExecutionTarget(),
project,
old.getRunnerSettings(),
old.getConfigurationSettings(),
myDescriptor,
@@ -0,0 +1,47 @@
/*
* Copyright 2000-2012 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 com.intellij.mock;
import com.intellij.execution.DefaultExecutionTarget;
import com.intellij.execution.ExecutionTarget;
import com.intellij.execution.ExecutionTargetManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.List;
public class MockExecutionTargetManager extends ExecutionTargetManager {
private ExecutionTarget myTarget = DefaultExecutionTarget.INSTANCE;
@NotNull
@Override
public ExecutionTarget getActiveTarget() {
return myTarget;
}
@Override
public void setActiveTarget(@NotNull ExecutionTarget target) {
myTarget = target;
}
@NotNull
@Override
public List<ExecutionTarget> getTargetsFor(@Nullable RunnerAndConfigurationSettings settings) {
return Collections.singletonList(DefaultExecutionTarget.INSTANCE);
}
}
@@ -920,7 +920,7 @@ public class AllIcons {
public static final Icon HidePassed = IconLoader.getIcon("/runConfigurations/hidePassed.png"); // 16x16
public static final Icon IgnoredTest = IconLoader.getIcon("/runConfigurations/ignoredTest.png"); // 16x16
public static final Icon InvalidConfigurationLayer = IconLoader.getIcon("/runConfigurations/invalidConfigurationLayer.png"); // 16x16
public static final Icon Junit = IconLoader.getIcon("/runConfigurations/junit.png"); // 16x16
public static final Icon UnitTest = IconLoader.getIcon("/runConfigurations/junit.png"); // 16x16
public static final Icon LoadingTree = IconLoader.getIcon("/runConfigurations/loadingTree.png"); // 16x16
public static final Icon Ql_console = IconLoader.getIcon("/runConfigurations/ql_console.png"); // 16x16
public static final Icon Remote = IconLoader.getIcon("/runConfigurations/remote.png"); // 16x16
@@ -36,7 +36,7 @@ public class TestDataHighlightingPass extends TextEditorHighlightingPass {
private static final Key<Object> KEY = Key.create("TestDataHighlighterKey");
private static final Object VALUE = new Object();
private static final Icon ICON = AllIcons.RunConfigurations.Junit;
private static final Icon ICON = AllIcons.RunConfigurations.UnitTest;
private static final GutterIconRenderer ICON_RENDERER = new MyGutterIconRenderer();
private static final TextAttributes CARET_ATTRIBUTES = new TextAttributes(Color.BLUE, null, null, null, Font.BOLD);
@@ -18,6 +18,7 @@ package com.intellij.lang.ant.config.impl;
import com.intellij.execution.BeforeRunTaskProvider;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.lang.ant.AntBundle;
import com.intellij.lang.ant.AntIcons;
import com.intellij.lang.ant.config.AntBuildFile;
@@ -105,7 +106,7 @@ public class AntBeforeRunTaskProvider extends BeforeRunTaskProvider<AntBeforeRun
return findTargetToExecute(task) != null;
}
public boolean executeTask(DataContext context, RunConfiguration configuration, AntBeforeRunTask task) {
public boolean executeTask(DataContext context, RunConfiguration configuration, ExecutionEnvironment env, AntBeforeRunTask task) {
final AntBuildTarget target = findTargetToExecute(task);
if (target != null) {
return AntConfigurationImpl.executeTargetSynchronously(context, target);
@@ -78,7 +78,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
}
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
return TestObject.fromString(myData.TEST_OBJECT, getProject(), this, env.getRunnerSettings(), env.getConfigurationSettings());
return TestObject.fromString(myData.TEST_OBJECT, getProject(), this, env);
}
@@ -548,7 +548,7 @@ public class JUnitConfiguration extends ModuleBasedConfiguration<JavaRunConfigur
public TestObject getTestObject(final Project project, final JUnitConfiguration configuration) {
//TODO[dyoma]!
return TestObject.fromString(TEST_OBJECT, project, configuration, null, null);
return TestObject.fromString(TEST_OBJECT, project, configuration, null);
}
public Module setMainClass(final PsiClass testClass) {
@@ -32,7 +32,7 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class JUnitConfigurationType implements ConfigurationType {
public static final Icon ICON = AllIcons.RunConfigurations.Junit;
public static final Icon ICON = AllIcons.RunConfigurations.UnitTest;
private final ConfigurationFactory myFactory;
/**reflection*/
@@ -20,7 +20,11 @@ import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.ProgramRunnerUtil;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.JavaRunConfigurationModule;
import com.intellij.execution.configurations.RunConfigurationModule;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiClass;
@@ -32,9 +36,8 @@ import com.intellij.refactoring.listeners.RefactoringElementListener;
class TestClass extends TestObject {
public TestClass(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
super(project, configuration, runnerSettings, configurationSettings);
ExecutionEnvironment environment) {
super(project, configuration, environment);
}
protected void initialize() throws ExecutionException {
@@ -16,7 +16,10 @@
package com.intellij.execution.junit;
import com.intellij.execution.CantRunException;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.RuntimeConfigurationError;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.SourceScope;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.execution.util.ProgramParametersUtil;
@@ -43,9 +46,8 @@ class TestDirectory extends TestPackage {
public TestDirectory(Project project,
JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
super(project, configuration, runnerSettings, configurationSettings);
ExecutionEnvironment environment) {
super(project, configuration, environment);
myProject = project;
}
@@ -19,6 +19,7 @@ package com.intellij.execution.junit;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.PsiClass;
@@ -35,9 +36,8 @@ import org.jetbrains.annotations.NotNull;
class TestMethod extends TestObject {
public TestMethod(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
super(project, configuration, runnerSettings, configurationSettings);
ExecutionEnvironment environment) {
super(project, configuration, environment);
}
protected void initialize() throws ExecutionException {
@@ -20,12 +20,11 @@ import com.intellij.execution.CantRunException;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.Location;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.configurations.RunConfigurationModule;
import com.intellij.execution.configurations.RunnerSettings;
import com.intellij.execution.junit2.TestProxy;
import com.intellij.execution.junit2.info.MethodLocation;
import com.intellij.execution.junit2.info.TestInfo;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.application.ApplicationManager;
@@ -45,10 +44,9 @@ public class TestMethods extends TestMethod {
public TestMethods(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings,
ExecutionEnvironment environment,
Collection<AbstractTestProxy> failedTests) {
super(project, configuration, runnerSettings, configurationSettings);
super(project, configuration, environment);
myFailedTests = failedTests;
}
@@ -32,6 +32,7 @@ import com.intellij.execution.junit2.ui.model.RootTestInfo;
import com.intellij.execution.junit2.ui.properties.JUnitConsoleProperties;
import com.intellij.execution.process.ProcessAdapter;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.testframework.*;
import com.intellij.execution.ui.ConsoleViewContentType;
@@ -81,26 +82,25 @@ public abstract class TestObject implements JavaCommandLine {
protected JavaParameters myJavaParameters;
private final Project myProject;
protected final JUnitConfiguration myConfiguration;
private final RunnerSettings myRunnerSettings;
private final ConfigurationPerRunnerSettings myConfigurationSettings;
private final ExecutionEnvironment myEnvironment;
protected File myTempFile = null;
public File myListenersFile;
public static TestObject fromString(final String id,
final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings, ConfigurationPerRunnerSettings configurationSettings) {
ExecutionEnvironment environment) {
if (JUnitConfiguration.TEST_METHOD.equals(id))
return new TestMethod(project, configuration, runnerSettings, configurationSettings);
return new TestMethod(project, configuration, environment);
if (JUnitConfiguration.TEST_CLASS.equals(id))
return new TestClass(project, configuration, runnerSettings, configurationSettings);
return new TestClass(project, configuration, environment);
if (JUnitConfiguration.TEST_PACKAGE.equals(id))
return new TestPackage(project, configuration, runnerSettings, configurationSettings);
return new TestPackage(project, configuration, environment);
else if (JUnitConfiguration.TEST_DIRECTORY.equals(id)) {
return new TestDirectory(project, configuration, runnerSettings, configurationSettings);
return new TestDirectory(project, configuration, environment);
}
if (JUnitConfiguration.TEST_PATTERN.equals(id)) {
return new TestsPattern(project, configuration, runnerSettings, configurationSettings);
return new TestsPattern(project, configuration, environment);
}
return NOT_CONFIGURED;
}
@@ -112,24 +112,22 @@ public abstract class TestObject implements JavaCommandLine {
protected TestObject(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
ExecutionEnvironment environment) {
myProject = project;
myConfiguration = configuration;
myRunnerSettings = runnerSettings;
myConfigurationSettings = configurationSettings;
myEnvironment = environment;
}
public abstract String suggestActionName();
@Override
public RunnerSettings getRunnerSettings() {
return myRunnerSettings;
return myEnvironment.getRunnerSettings();
}
@Override
public ConfigurationPerRunnerSettings getConfigurationSettings() {
return myConfigurationSettings;
return myEnvironment.getConfigurationSettings();
}
public abstract RefactoringElementListener getListener(PsiElement element, JUnitConfiguration configuration);
@@ -146,7 +144,7 @@ public abstract class TestObject implements JavaCommandLine {
myConfiguration.isAlternativeJrePathEnabled() ? myConfiguration.getAlternativeJrePath() : null);
}
private static final TestObject NOT_CONFIGURED = new TestObject(null, null, null, null) {
private static final TestObject NOT_CONFIGURED = new TestObject(null, null, null) {
@Override
public RefactoringElementListener getListener(final PsiElement element, final JUnitConfiguration configuration) {
return null;
@@ -204,7 +202,7 @@ public abstract class TestObject implements JavaCommandLine {
myJavaParameters.getClassPath().add(PathUtil.getJarPathForClass(JUnitStarter.class));
myJavaParameters.getProgramParametersList().add(JUnitStarter.IDE_VERSION + JUnitStarter.VERSION);
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
ext.updateJavaParameters(myConfiguration, myJavaParameters, myRunnerSettings);
ext.updateJavaParameters(myConfiguration, myJavaParameters, getRunnerSettings());
}
final Object[] listeners = Extensions.getExtensions(IDEAJUnitListener.EP_NAME);
@@ -212,7 +210,7 @@ public abstract class TestObject implements JavaCommandLine {
for (final Object listener : listeners) {
boolean enabled = true;
for (RunConfigurationExtension ext : Extensions.getExtensions(RunConfigurationExtension.EP_NAME)) {
if (ext.isListenerDisabled(myConfiguration, listener, myRunnerSettings)) {
if (ext.isListenerDisabled(myConfiguration, listener, getRunnerSettings())) {
enabled = false;
break;
}
@@ -344,7 +342,7 @@ public abstract class TestObject implements JavaCommandLine {
}
final RerunFailedTestsAction rerunFailedTestsAction = new RerunFailedTestsAction(consoleView.getComponent());
rerunFailedTestsAction.init(consoleProperties, myRunnerSettings, myConfigurationSettings);
rerunFailedTestsAction.init(consoleProperties, myEnvironment);
rerunFailedTestsAction.setModelProvider(new Getter<TestFrameworkRunningModel>() {
@Override
public TestFrameworkRunningModel get() {
@@ -372,7 +370,7 @@ public abstract class TestObject implements JavaCommandLine {
return;
}
if (myRunnerSettings.getData() != null) {
if (getRunnerSettings().getData() != null) {
final String actionName = executor.getActionName();
throw new CantRunException(actionName + " is disabled in fork mode.<br/>Please change fork mode to &lt;none&gt; to " + actionName.toLowerCase() + ".");
}
@@ -17,8 +17,6 @@
package com.intellij.execution.junit;
import com.intellij.execution.*;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.configurations.RunnerSettings;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.executors.DefaultDebugExecutor;
@@ -75,9 +73,8 @@ public class TestPackage extends TestObject {
public TestPackage(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
super(project, configuration, runnerSettings, configurationSettings);
ExecutionEnvironment environment) {
super(project, configuration, environment);
}
@@ -22,7 +22,10 @@ package com.intellij.execution.junit;
import com.intellij.execution.CantRunException;
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.configurations.*;
import com.intellij.execution.configurations.JavaParameters;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.util.JavaParametersUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtil;
@@ -50,9 +53,8 @@ import java.util.Set;
public class TestsPattern extends TestPackage {
public TestsPattern(final Project project,
final JUnitConfiguration configuration,
RunnerSettings runnerSettings,
ConfigurationPerRunnerSettings configurationSettings) {
super(project, configuration, runnerSettings, configurationSettings);
ExecutionEnvironment environment) {
super(project, configuration, environment);
}
@Override
@@ -42,7 +42,7 @@ public class RerunFailedTestsAction extends AbstractRerunFailedTestsAction {
@Override
public MyRunProfile getRunProfile() {
final JUnitConfiguration configuration = (JUnitConfiguration)getModel().getProperties().getConfiguration();
final TestMethods testMethods = new TestMethods(configuration.getProject(), configuration, myRunnerSettings, myConfigurationPerRunnerSettings, getFailedTests(configuration.getProject()));
final TestMethods testMethods = new TestMethods(configuration.getProject(), configuration, myEnvironment, getFailedTests(configuration.getProject()));
return new MyRunProfile(configuration) {
@NotNull
public Module[] getModules() {
@@ -17,6 +17,7 @@ package org.jetbrains.idea.maven.tasks;
import com.intellij.execution.BeforeRunTaskProvider;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
@@ -117,7 +118,10 @@ public class MavenBeforeRunTasksProvider extends BeforeRunTaskProvider<MavenBefo
return task.getGoal() != null && task.getProjectPath() != null;
}
public boolean executeTask(final DataContext context, RunConfiguration configuration, final MavenBeforeRunTask task) {
public boolean executeTask(final DataContext context,
RunConfiguration configuration,
ExecutionEnvironment env,
final MavenBeforeRunTask task) {
final Semaphore targetDone = new Semaphore();
final boolean[] result = new boolean[]{true};
try {
@@ -208,7 +208,7 @@ public class TestNGRunnableState extends JavaCommandLineState {
console.attachToProcess(processHandler);
RerunFailedTestsAction rerunFailedTestsAction = new RerunFailedTestsAction(console.getComponent());
rerunFailedTestsAction.init(console.getProperties(), runnerSettings, myConfigurationPerRunnerSettings);
rerunFailedTestsAction.init(console.getProperties(), getEnvironment());
rerunFailedTestsAction.setModelProvider(new Getter<TestFrameworkRunningModel>() {
public TestFrameworkRunningModel get() {
return console.getResultsView();