package com.atsebak.embeddedlinuxjvm.runner; import com.atsebak.embeddedlinuxjvm.console.EmbeddedLinuxJVMToolWindowFactory; import com.atsebak.embeddedlinuxjvm.console.EmbeddedLinuxJVMConsoleView; import com.atsebak.embeddedlinuxjvm.runner.conf.EmbeddedLinuxJVMRunConfiguration; import com.intellij.debugger.impl.GenericDebuggerRunner; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.RunProfile; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.executors.DefaultDebugExecutor; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.NotNull; public class EmbeddedLinuxJVMDebugger extends GenericDebuggerRunner { private static final String RUNNER_ID = "RaspberryPIDebugger"; /** * Constructor */ public EmbeddedLinuxJVMDebugger() { super(); } /** * Gets the Runner Name * * @return */ @NotNull public String getRunnerId() { return RUNNER_ID; } /** * This makes sure the Debug mode is executed and not run mode * * @param executorId * @param profile * @return */ @Override public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) { return (DefaultDebugExecutor.EXECUTOR_ID.equals(executorId) && profile instanceof EmbeddedLinuxJVMRunConfiguration); } /** * Executes the runner * * @param project * @param state * @param contentToReuse * @param environment * @return * @throws ExecutionException */ @Override protected RunContentDescriptor doExecute(@NotNull Project project, @NotNull RunProfileState state, RunContentDescriptor contentToReuse, @NotNull ExecutionEnvironment environment) throws ExecutionException { final RunProfile runProfileRaw = environment.getRunProfile(); if (runProfileRaw instanceof EmbeddedLinuxJVMRunConfiguration) { FileDocumentManager.getInstance().saveAllDocuments(); setupConsole(environment.getProject()); super.doExecute(project, state, contentToReuse, environment); } return super.doExecute(project, state, contentToReuse, environment); } /** * Adds a Console Logger From The Remote App * * @param p */ private void setupConsole(Project p) { ToolWindow window = ToolWindowManager.getInstance(p).getToolWindow(EmbeddedLinuxJVMToolWindowFactory.ID); if (window != null) { window.activate(null, true); EmbeddedLinuxJVMConsoleView.getInstance(p).clear(); } } }