Search in sources :

Example 11 with ExecutionEnvironmentBuilder

use of com.intellij.execution.runners.ExecutionEnvironmentBuilder in project android by JetBrains.

the class ConnectJavaDebuggerTask method launchDebugger.

@Override
public ProcessHandler launchDebugger(@NotNull LaunchInfo currentLaunchInfo, @NotNull final Client client, @NotNull ProcessHandlerLaunchStatus launchStatus, @NotNull ProcessHandlerConsolePrinter printer) {
    String debugPort = Integer.toString(client.getDebuggerListenPort());
    final int pid = client.getClientData().getPid();
    Logger.getInstance(ConnectJavaDebuggerTask.class).info(String.format(Locale.US, "Attempting to connect debugger to port %1$s [client %2$d]", debugPort, pid));
    // detach old process handler
    RunContentDescriptor descriptor = currentLaunchInfo.env.getContentToReuse();
    // reach here before the EDT gets around to creating the descriptor?
    assert descriptor != null : "ConnectJavaDebuggerTask expects an existing descriptor that will be reused";
    final ProcessHandler processHandler = descriptor.getProcessHandler();
    assert processHandler != null;
    // create a new process handler
    RemoteConnection connection = new RemoteConnection(true, "localhost", debugPort, false);
    final AndroidRemoteDebugProcessHandler debugProcessHandler = new AndroidRemoteDebugProcessHandler(myProject, myMonitorRemoteProcess);
    // switch the launch status and console printers to point to the new process handler
    // this is required, esp. for AndroidTestListener which holds a reference to the launch status and printers, and those should
    // be updated to point to the new process handlers, otherwise test results will not be forwarded appropriately
    launchStatus.setProcessHandler(debugProcessHandler);
    printer.setProcessHandler(debugProcessHandler);
    // detach after the launch status has been updated to point to the new process handler
    processHandler.detachProcess();
    AndroidDebugState debugState = new AndroidDebugState(myProject, debugProcessHandler, connection, currentLaunchInfo.consoleProvider);
    RunContentDescriptor debugDescriptor;
    try {
        // @formatter:off
        ExecutionEnvironment debugEnv = new ExecutionEnvironmentBuilder(currentLaunchInfo.env).executor(currentLaunchInfo.executor).runner(currentLaunchInfo.runner).contentToReuse(descriptor).build();
        debugDescriptor = DebuggerPanelsManager.getInstance(myProject).attachVirtualMachine(debugEnv, debugState, connection, false);
    // @formatter:on
    } catch (ExecutionException e) {
        processHandler.notifyTextAvailable("ExecutionException: " + e.getMessage() + '.', STDERR);
        return null;
    }
    if (debugDescriptor == null) {
        processHandler.notifyTextAvailable("Unable to connect debugger to Android application", STDERR);
        return null;
    }
    // re-run the collected text from the old process handler to the new
    // TODO: is there a race between messages received once the debugger has been connected, and these messages that are printed out?
    final AndroidProcessText oldText = AndroidProcessText.get(processHandler);
    if (oldText != null) {
        oldText.printTo(debugProcessHandler);
    }
    RunProfile runProfile = currentLaunchInfo.env.getRunProfile();
    int uniqueId = runProfile instanceof RunConfigurationBase ? ((RunConfigurationBase) runProfile).getUniqueID() : -1;
    AndroidSessionInfo value = new AndroidSessionInfo(debugProcessHandler, debugDescriptor, uniqueId, currentLaunchInfo.executor.getId(), InstantRunUtils.isInstantRunEnabled(currentLaunchInfo.env));
    debugProcessHandler.putUserData(AndroidSessionInfo.KEY, value);
    debugProcessHandler.putUserData(AndroidSessionInfo.ANDROID_DEBUG_CLIENT, client);
    debugProcessHandler.putUserData(AndroidSessionInfo.ANDROID_DEVICE_API_LEVEL, client.getDevice().getVersion());
    final String pkgName = client.getClientData().getClientDescription();
    final IDevice device = client.getDevice();
    // kill the process when the debugger is stopped
    debugProcessHandler.addProcessListener(new ProcessAdapter() {

        @Override
        public void processTerminated(ProcessEvent event) {
            debugProcessHandler.removeProcessListener(this);
            Client currentClient = device.getClient(pkgName);
            if (currentClient != null && currentClient.getClientData().getPid() != pid) {
                // a new process has been launched for the same package name, we aren't interested in killing this
                return;
            }
            Logger.getInstance(ConnectJavaDebuggerTask.class).info("Debugger terminating, so terminating process: " + pkgName);
            // Note: client.kill() doesn't work when the debugger is attached, we explicitly stop by package id..
            try {
                device.executeShellCommand("am force-stop " + pkgName, new NullOutputReceiver());
            } catch (Exception e) {
            // don't care..
            }
        }
    });
    return debugProcessHandler;
}
Also used : ExecutionEnvironment(com.intellij.execution.runners.ExecutionEnvironment) RunContentDescriptor(com.intellij.execution.ui.RunContentDescriptor) ProcessAdapter(com.intellij.execution.process.ProcessAdapter) ProcessEvent(com.intellij.execution.process.ProcessEvent) IDevice(com.android.ddmlib.IDevice) RunProfile(com.intellij.execution.configurations.RunProfile) ExecutionException(com.intellij.execution.ExecutionException) RunConfigurationBase(com.intellij.execution.configurations.RunConfigurationBase) ProcessHandler(com.intellij.execution.process.ProcessHandler) RemoteConnection(com.intellij.execution.configurations.RemoteConnection) ExecutionEnvironmentBuilder(com.intellij.execution.runners.ExecutionEnvironmentBuilder) ExecutionException(com.intellij.execution.ExecutionException) Client(com.android.ddmlib.Client) NullOutputReceiver(com.android.ddmlib.NullOutputReceiver)

Example 12 with ExecutionEnvironmentBuilder

use of com.intellij.execution.runners.ExecutionEnvironmentBuilder in project intellij-plugins by JetBrains.

the class JstdAssertionFrameworkLineMarkerProvider method execute.

private static void execute(@NotNull Project project, @NotNull Executor executor, @NotNull RunnerAndConfigurationSettings configuration, boolean created) {
    RunManager runManager = RunManager.getInstance(project);
    if (created) {
        runManager.setTemporaryConfiguration(configuration);
    }
    runManager.setSelectedConfiguration(configuration);
    ExecutionEnvironmentBuilder builder = ExecutionEnvironmentBuilder.createOrNull(executor, configuration);
    if (builder != null) {
        ExecutionManager.getInstance(project).restartRunProfile(builder.build());
    }
}
Also used : ExecutionEnvironmentBuilder(com.intellij.execution.runners.ExecutionEnvironmentBuilder)

Example 13 with ExecutionEnvironmentBuilder

use of com.intellij.execution.runners.ExecutionEnvironmentBuilder in project intellij-community by JetBrains.

the class ConfigurationsTest method checkCantRun.

private void checkCantRun(RunConfiguration configuration, String reasonBeginning) throws ExecutionException {
    try {
        configuration.checkConfiguration();
    } catch (RuntimeConfigurationException e) {
        assertTrue(e.getLocalizedMessage().startsWith(reasonBeginning));
        return;
    }
    RunProfileState state = configuration.getState(DefaultRunExecutor.getRunExecutorInstance(), new ExecutionEnvironmentBuilder(myProject, DefaultRunExecutor.getRunExecutorInstance()).runProfile(configuration).build());
    assertTrue(state instanceof JavaCommandLine);
    try {
        ((JavaCommandLine) state).getJavaParameters();
    } catch (Throwable e) {
        assertTrue(e.getLocalizedMessage().startsWith(reasonBeginning));
        return;
    }
    fail("Should not run");
}
Also used : ExecutionEnvironmentBuilder(com.intellij.execution.runners.ExecutionEnvironmentBuilder)

Example 14 with ExecutionEnvironmentBuilder

use of com.intellij.execution.runners.ExecutionEnvironmentBuilder in project intellij-community by JetBrains.

the class ProgramRunnerUtil method executeConfiguration.

public static void executeConfiguration(@NotNull Project project, @NotNull RunnerAndConfigurationSettings configuration, @NotNull Executor executor) {
    ExecutionEnvironmentBuilder builder;
    try {
        builder = ExecutionEnvironmentBuilder.create(executor, configuration);
    } catch (ExecutionException e) {
        LOG.error(e);
        return;
    }
    executeConfiguration(builder.contentToReuse(null).dataContext(null).activeTarget().build(), true, true);
}
Also used : ExecutionEnvironmentBuilder(com.intellij.execution.runners.ExecutionEnvironmentBuilder)

Example 15 with ExecutionEnvironmentBuilder

use of com.intellij.execution.runners.ExecutionEnvironmentBuilder in project intellij-community by JetBrains.

the class AbstractRerunFailedTestsAction method execute.

void execute(@NotNull AnActionEvent e, @NotNull ExecutionEnvironment environment) {
    MyRunProfile profile = getRunProfile(environment);
    if (profile == null) {
        return;
    }
    final ExecutionEnvironmentBuilder environmentBuilder = new ExecutionEnvironmentBuilder(environment).runProfile(profile);
    final InputEvent event = e.getInputEvent();
    if (!(event instanceof MouseEvent) || !event.isShiftDown()) {
        performAction(environmentBuilder);
        return;
    }
    final LinkedHashMap<Executor, ProgramRunner> availableRunners = new LinkedHashMap<>();
    for (Executor ex : new Executor[] { DefaultRunExecutor.getRunExecutorInstance(), DefaultDebugExecutor.getDebugExecutorInstance() }) {
        final ProgramRunner runner = RunnerRegistry.getInstance().getRunner(ex.getId(), profile);
        if (runner != null) {
            availableRunners.put(ex, runner);
        }
    }
    if (availableRunners.isEmpty()) {
        LOG.error(environment.getExecutor().getActionName() + " is not available now");
    } else if (availableRunners.size() == 1) {
        //noinspection ConstantConditions
        performAction(environmentBuilder.runner(availableRunners.get(environment.getExecutor())));
    } else {
        final JBList list = new JBList(availableRunners.keySet());
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setSelectedValue(environment.getExecutor(), true);
        list.setCellRenderer(new DefaultListCellRenderer() {

            @NotNull
            @Override
            public Component getListCellRendererComponent(@NotNull JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                final Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                if (value instanceof Executor) {
                    setText(UIUtil.removeMnemonic(((Executor) value).getStartActionText()));
                    setIcon(((Executor) value).getIcon());
                }
                return component;
            }
        });
        //noinspection ConstantConditions
        JBPopupFactory.getInstance().createListPopupBuilder(list).setTitle("Restart Failed Tests").setMovable(false).setResizable(false).setRequestFocus(true).setItemChoosenCallback(() -> {
            final Object value = list.getSelectedValue();
            if (value instanceof Executor) {
                //noinspection ConstantConditions
                performAction(environmentBuilder.runner(availableRunners.get(value)).executor((Executor) value));
            }
        }).createPopup().showUnderneathOf(event.getComponent());
    }
}
Also used : MouseEvent(java.awt.event.MouseEvent) NotNull(org.jetbrains.annotations.NotNull) LinkedHashMap(java.util.LinkedHashMap) DefaultRunExecutor(com.intellij.execution.executors.DefaultRunExecutor) DefaultDebugExecutor(com.intellij.execution.executors.DefaultDebugExecutor) Executor(com.intellij.execution.Executor) JBList(com.intellij.ui.components.JBList) InputEvent(java.awt.event.InputEvent) ExecutionEnvironmentBuilder(com.intellij.execution.runners.ExecutionEnvironmentBuilder) ProgramRunner(com.intellij.execution.runners.ProgramRunner)

Aggregations

ExecutionEnvironmentBuilder (com.intellij.execution.runners.ExecutionEnvironmentBuilder)18 ExecutionEnvironment (com.intellij.execution.runners.ExecutionEnvironment)7 ExecutionException (com.intellij.execution.ExecutionException)6 NotNull (org.jetbrains.annotations.NotNull)5 DefaultRunExecutor (com.intellij.execution.executors.DefaultRunExecutor)4 ProcessAdapter (com.intellij.execution.process.ProcessAdapter)4 ProcessEvent (com.intellij.execution.process.ProcessEvent)4 ProgramRunner (com.intellij.execution.runners.ProgramRunner)4 Executor (com.intellij.execution.Executor)3 Key (com.intellij.openapi.util.Key)3 RemoteStateState (com.intellij.debugger.engine.RemoteStateState)2 RunnerAndConfigurationSettings (com.intellij.execution.RunnerAndConfigurationSettings)2 RemoteConnection (com.intellij.execution.configurations.RemoteConnection)2 RunProfile (com.intellij.execution.configurations.RunProfile)2 DefaultDebugExecutor (com.intellij.execution.executors.DefaultDebugExecutor)2 ProcessHandler (com.intellij.execution.process.ProcessHandler)2 RunContentDescriptor (com.intellij.execution.ui.RunContentDescriptor)2 Project (com.intellij.openapi.project.Project)2 ThrowableRunnable (com.intellij.util.ThrowableRunnable)2 Client (com.android.ddmlib.Client)1