public RunProfileState getState( @NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException { final VirtualFile script = getScriptFile(); if (script == null) { throw new CantRunException("Cannot find script " + scriptPath); } final GroovyScriptRunner scriptRunner = findConfiguration(); if (scriptRunner == null) { throw new CantRunException("Unknown script type " + scriptPath); } final Module module = getModule(); if (!scriptRunner.ensureRunnerConfigured(module, this, executor, getProject())) { return null; } final boolean tests = ProjectRootManager.getInstance(getProject()).getFileIndex().isInTestSourceContent(script); final JavaCommandLineState state = new JavaCommandLineState(environment) { @NotNull @Override protected OSProcessHandler startProcess() throws ExecutionException { final OSProcessHandler handler = super.startProcess(); handler.setShouldDestroyProcessRecursively(true); if (scriptRunner.shouldRefreshAfterFinish()) { handler.addProcessListener( new ProcessAdapter() { @Override public void processTerminated(ProcessEvent event) { if (!ApplicationManager.getApplication().isDisposed()) { VirtualFileManager.getInstance().refresh(true); } } }); } return handler; } protected JavaParameters createJavaParameters() throws ExecutionException { JavaParameters params = createJavaParametersWithSdk(module); ProgramParametersUtil.configureConfiguration(params, GroovyScriptRunConfiguration.this); scriptRunner.configureCommandLine( params, module, tests, script, GroovyScriptRunConfiguration.this); return params; } }; state.setConsoleBuilder(TextConsoleBuilderFactory.getInstance().createBuilder(getProject())); return state; }
@Override public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException { final JavaCommandLineState state = new JavaApplicationCommandLineState<JavaScratchConfiguration>(this, env) { @Override protected void setupJavaParameters(JavaParameters params) throws ExecutionException { super.setupJavaParameters(params); final File scrachesOutput = JavaScratchCompilationSupport.getScratchOutputDirectory(getProject()); if (scrachesOutput != null) { params .getClassPath() .addFirst( FileUtil.toCanonicalPath(scrachesOutput.getAbsolutePath()) .replace('/', File.separatorChar)); } } @NotNull @Override protected OSProcessHandler startProcess() throws ExecutionException { final OSProcessHandler handler = super.startProcess(); if (getRunnerSettings() instanceof DebuggingRunnerData) { final VirtualFile vFile = getConfiguration().getScratchVirtualFile(); if (vFile != null) { DebuggerManager.getInstance(getProject()) .addDebugProcessListener( handler, new DebugProcessListener() { @Override public void processAttached(DebugProcess process) { if (vFile.isValid()) { process.appendPositionManager( new JavaScratchPositionManager( (DebugProcessImpl) process, vFile)); } process.removeDebugProcessListener(this); } }); } } return handler; } }; state.setConsoleBuilder( TextConsoleBuilderFactory.getInstance() .createBuilder(getProject(), getConfigurationModule().getSearchScope())); return state; }
protected DebuggerSession createLocalProcess(int transport, final JavaParameters javaParameters) throws ExecutionException, InterruptedException, InvocationTargetException { createBreakpoints(javaParameters.getMainClass()); final DebuggerSession[] debuggerSession = new DebuggerSession[] {null}; DebuggerSettings.getInstance().DEBUGGER_TRANSPORT = transport; GenericDebuggerRunnerSettings debuggerRunnerSettings = new GenericDebuggerRunnerSettings(); debuggerRunnerSettings.LOCAL = true; debuggerRunnerSettings.setDebugPort(String.valueOf(DEFAULT_ADDRESS)); ExecutionEnvironment environment = new ExecutionEnvironmentBuilder(myProject, DefaultDebugExecutor.getDebugExecutorInstance()) .runnerSettings(debuggerRunnerSettings) .runProfile(new MockConfiguration()) .build(); final JavaCommandLineState javaCommandLineState = new JavaCommandLineState(environment) { @Override protected JavaParameters createJavaParameters() { return javaParameters; } @Override protected GeneralCommandLine createCommandLine() throws ExecutionException { return CommandLineBuilder.createFromJavaParameters(getJavaParameters()); } }; final RemoteConnection debugParameters = DebuggerManagerImpl.createDebugParameters( javaCommandLineState.getJavaParameters(), debuggerRunnerSettings, true); UIUtil.invokeAndWaitIfNeeded( new Runnable() { @Override public void run() { try { debuggerSession[0] = attachVirtualMachine( javaCommandLineState, javaCommandLineState.getEnvironment(), debugParameters, false); } catch (ExecutionException e) { fail(e.getMessage()); } } }); final ProcessHandler processHandler = debuggerSession[0].getProcess().getProcessHandler(); debuggerSession[0] .getProcess() .addProcessListener( new ProcessAdapter() { @Override public void onTextAvailable(ProcessEvent event, Key outputType) { print(event.getText(), outputType); } }); DebugProcessImpl process = (DebugProcessImpl) DebuggerManagerEx.getInstanceEx(myProject).getDebugProcess(processHandler); assertNotNull(process); return debuggerSession[0]; }
protected DebuggerSession createLocalSession(final JavaParameters javaParameters) throws ExecutionException, InterruptedException { createBreakpoints(javaParameters.getMainClass()); DebuggerSettings.getInstance().DEBUGGER_TRANSPORT = DebuggerSettings.SOCKET_TRANSPORT; GenericDebuggerRunnerSettings debuggerRunnerSettings = new GenericDebuggerRunnerSettings(); debuggerRunnerSettings.LOCAL = true; final RemoteConnection debugParameters = DebuggerManagerImpl.createDebugParameters(javaParameters, debuggerRunnerSettings, false); ExecutionEnvironment environment = new ExecutionEnvironmentBuilder(myProject, DefaultDebugExecutor.getDebugExecutorInstance()) .runnerSettings(debuggerRunnerSettings) .runProfile(new MockConfiguration()) .build(); final JavaCommandLineState javaCommandLineState = new JavaCommandLineState(environment) { @Override protected JavaParameters createJavaParameters() { return javaParameters; } @Override protected GeneralCommandLine createCommandLine() throws ExecutionException { return CommandLineBuilder.createFromJavaParameters(getJavaParameters()); } }; ApplicationManager.getApplication() .invokeAndWait( () -> { try { myDebuggerSession = DebuggerManagerEx.getInstanceEx(myProject) .attachVirtualMachine( new DefaultDebugEnvironment( new ExecutionEnvironmentBuilder( myProject, DefaultDebugExecutor.getDebugExecutorInstance()) .runProfile(new MockConfiguration()) .build(), javaCommandLineState, debugParameters, false)); XDebuggerManager.getInstance(myProject) .startSession( javaCommandLineState.getEnvironment(), new XDebugProcessStarter() { @Override @NotNull public XDebugProcess start(@NotNull XDebugSession session) { return JavaDebugProcess.create(session, myDebuggerSession); } }); } catch (ExecutionException e) { LOG.error(e); } }); myDebugProcess = myDebuggerSession.getProcess(); myDebugProcess.addProcessListener( new ProcessAdapter() { @Override public void onTextAvailable(ProcessEvent event, Key outputType) { print(event.getText(), outputType); } }); assertNotNull(myDebuggerSession); assertNotNull(myDebugProcess); return myDebuggerSession; }