mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external system: add folding of greeting/farewell output lines of task console
This commit is contained in:
committed by
Vladislav.Soroka
parent
26ebf83ee5
commit
9dd021c5cc
+52
@@ -5,7 +5,9 @@ import com.intellij.execution.*;
|
||||
import com.intellij.execution.configurations.ConfigurationFactory;
|
||||
import com.intellij.execution.configurations.LocatableConfigurationBase;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.console.DuplexConsoleView;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.impl.ConsoleViewImpl;
|
||||
import com.intellij.execution.process.AnsiEscapeDecoder;
|
||||
import com.intellij.execution.process.ProcessHandler;
|
||||
import com.intellij.execution.process.ProcessOutputTypes;
|
||||
@@ -14,6 +16,9 @@ import com.intellij.execution.runners.ProgramRunner;
|
||||
import com.intellij.execution.ui.ExecutionConsole;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.FoldRegion;
|
||||
import com.intellij.openapi.editor.FoldingModel;
|
||||
import com.intellij.openapi.externalSystem.execution.ExternalSystemExecutionConsoleManager;
|
||||
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings;
|
||||
@@ -28,9 +33,11 @@ import com.intellij.openapi.options.SettingsEditor;
|
||||
import com.intellij.openapi.options.SettingsEditorGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.ExceptionUtil;
|
||||
import com.intellij.util.containers.ContainerUtilRt;
|
||||
import com.intellij.util.net.NetUtils;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
import com.intellij.util.text.DateFormatUtil;
|
||||
import com.intellij.util.xmlb.XmlSerializer;
|
||||
import org.jdom.Element;
|
||||
@@ -195,6 +202,7 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase {
|
||||
ExternalSystemBundle.message("run.text.starting.single.task", startDateTime, mySettings.toString());
|
||||
}
|
||||
processHandler.notifyTextAvailable(greeting, ProcessOutputTypes.SYSTEM);
|
||||
foldGreetingOrFarewell(consoleView, greeting, true);
|
||||
task.execute(new ExternalSystemTaskNotificationListenerAdapter() {
|
||||
|
||||
private boolean myResetGreeting = true;
|
||||
@@ -230,6 +238,7 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase {
|
||||
ExternalSystemBundle.message("run.text.ended.single.task", endDateTime, mySettings.toString());
|
||||
}
|
||||
processHandler.notifyTextAvailable(farewell, ProcessOutputTypes.SYSTEM);
|
||||
foldGreetingOrFarewell(consoleView, farewell, false);
|
||||
processHandler.notifyProcessTerminated(0);
|
||||
}
|
||||
});
|
||||
@@ -238,6 +247,49 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase {
|
||||
result.setRestartActions(consoleManager.getRestartActions(consoleView));
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void foldGreetingOrFarewell(ExecutionConsole consoleView, String text, boolean isGreeting) {
|
||||
int limit = 100;
|
||||
if (text.length() < limit) {
|
||||
return;
|
||||
}
|
||||
final ConsoleViewImpl consoleViewImpl;
|
||||
if (consoleView instanceof ConsoleViewImpl) {
|
||||
consoleViewImpl = (ConsoleViewImpl)consoleView;
|
||||
}
|
||||
else if (consoleView instanceof DuplexConsoleView) {
|
||||
DuplexConsoleView duplexConsoleView = (DuplexConsoleView)consoleView;
|
||||
if (duplexConsoleView.getPrimaryConsoleView() instanceof ConsoleViewImpl) {
|
||||
consoleViewImpl = (ConsoleViewImpl)duplexConsoleView.getPrimaryConsoleView();
|
||||
}
|
||||
else if (duplexConsoleView.getSecondaryConsoleView() instanceof ConsoleViewImpl) {
|
||||
consoleViewImpl = (ConsoleViewImpl)duplexConsoleView.getSecondaryConsoleView();
|
||||
}
|
||||
else {
|
||||
consoleViewImpl = null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
consoleViewImpl = null;
|
||||
}
|
||||
if (consoleViewImpl != null) {
|
||||
consoleViewImpl.performWhenNoDeferredOutput(() -> {
|
||||
Document document = consoleViewImpl.getEditor().getDocument();
|
||||
int line = isGreeting ? 0 : document.getLineCount() - 2;
|
||||
if (CharArrayUtil.regionMatches(document.getCharsSequence(), document.getLineStartOffset(line), text)) {
|
||||
final FoldingModel foldingModel = consoleViewImpl.getEditor().getFoldingModel();
|
||||
foldingModel.runBatchFoldingOperation(() -> {
|
||||
FoldRegion region = foldingModel.addFoldRegion(document.getLineStartOffset(line),
|
||||
document.getLineEndOffset(line),
|
||||
StringUtil.trimLog(text, limit));
|
||||
if (region != null) {
|
||||
region.setExpanded(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyProcessHandler extends ProcessHandler implements AnsiEscapeDecoder.ColoredTextAcceptor {
|
||||
|
||||
Reference in New Issue
Block a user