mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -23,13 +23,12 @@ import com.intellij.execution.filters.Filter;
|
||||
import com.intellij.execution.filters.TextConsoleBuilder;
|
||||
import com.intellij.execution.filters.TextConsoleBuilderFactory;
|
||||
import com.intellij.execution.impl.ConsoleViewImpl;
|
||||
import com.intellij.execution.ui.ConsoleView;
|
||||
import com.intellij.execution.ui.ConsoleViewContentType;
|
||||
import com.intellij.execution.ui.ExecutionConsole;
|
||||
import com.intellij.execution.ui.RunContentDescriptor;
|
||||
import com.intellij.execution.ui.*;
|
||||
import com.intellij.execution.ui.actions.CloseAction;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -42,13 +41,17 @@ import com.intellij.openapi.ide.CopyPasteManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.update.UiNotifyConnector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -103,6 +106,7 @@ public class AnalyzeStacktraceUtil {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
registerReplaceAction(project, descriptor, consoleView, text);
|
||||
|
||||
final Executor executor = DefaultRunExecutor.getRunExecutorInstance();
|
||||
for (AnAction action: consoleView.createConsoleActions()) {
|
||||
@@ -120,6 +124,70 @@ public class AnalyzeStacktraceUtil {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Regular "Replace" editor action is unavailable for console editors (see com.intellij.openapi.editor.actions.IncrementalFindAction.Handler#isEnabled).
|
||||
* However, it can be convenient to be able to replace user-specific paths with local paths
|
||||
* if stacktrace links involves absolute paths (e.g. Node.js stack-traces contain absolute paths).
|
||||
*
|
||||
* @param consoleView
|
||||
*/
|
||||
private static void registerReplaceAction(@NotNull Project project,
|
||||
@NotNull RunContentDescriptor descriptor,
|
||||
@NotNull ConsoleView consoleView,
|
||||
@NotNull String stacktrace) {
|
||||
AnAction replaceAction = ActionManager.getInstance().getAction("Replace");
|
||||
if (replaceAction == null) {
|
||||
return;
|
||||
}
|
||||
ActionUtil.registerForEveryKeyboardShortcut(consoleView.getComponent(), new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
AnalyzeStacktraceDialog dialog = new AnalyzeStacktraceDialog(project) {
|
||||
@Override
|
||||
protected JComponent createCenterPanel() {
|
||||
JComponent result = super.createCenterPanel();
|
||||
myEditorPanel.setText(stacktrace);
|
||||
UiNotifyConnector.doWhenFirstShown(myEditorPanel, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
performReplaceAction(project, replaceAction, myEditorPanel);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doOKAction() {
|
||||
super.doOKAction();
|
||||
RunContentManager contentManager = ExecutionManager.getInstance(project).getContentManager();
|
||||
contentManager.removeRunContent(DefaultRunExecutor.getRunExecutorInstance(), descriptor);
|
||||
}
|
||||
};
|
||||
dialog.show();
|
||||
}
|
||||
}, replaceAction.getShortcutSet());
|
||||
}
|
||||
|
||||
private static void performReplaceAction(@NotNull Project project, @NotNull AnAction replaceAction,
|
||||
@NotNull JComponent contextComponent) {
|
||||
IdeFocusManager.getInstance(project).doWhenFocusSettlesDown(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
DataContext context = DataManager.getInstance().getDataContext(contextComponent);
|
||||
AnActionEvent actionEvent = AnActionEvent.createFromAnAction(replaceAction, null, ActionPlaces.UNKNOWN, context);
|
||||
replaceAction.update(actionEvent);
|
||||
if (actionEvent.getPresentation().isEnabledAndVisible()) {
|
||||
ActionUtil.performActionDumbAware(replaceAction, actionEvent);
|
||||
}
|
||||
}
|
||||
});
|
||||
//ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// }
|
||||
//}, ModalityState.stateForComponent(contextComponent));
|
||||
}
|
||||
|
||||
private static final class MyConsolePanel extends JPanel {
|
||||
public MyConsolePanel(ExecutionConsole consoleView, ActionGroup toolbarActions) {
|
||||
super(new BorderLayout());
|
||||
|
||||
Reference in New Issue
Block a user