mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
dubugger: consider search scope from run configuration when navigating from exception trace hyperlinks (IDEADEV-41133)
This commit is contained in:
@@ -478,7 +478,8 @@ public class CompileDriver {
|
||||
// in case another project was opened in the frame while the compiler was working (See SCR# 28591)
|
||||
statusBar.setInfo(statusMessage);
|
||||
if (duration > ONE_MINUTE_MS) {
|
||||
ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.MESSAGES_WINDOW, MessageType.INFO, statusMessage);
|
||||
final MessageType messageType = errorCount > 0 ? MessageType.ERROR : warningCount > 0 ? MessageType.WARNING : MessageType.INFO;
|
||||
ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.MESSAGES_WINDOW, messageType, statusMessage);
|
||||
}
|
||||
}
|
||||
if (_status != ExitStatus.UP_TO_DATE && compileContext.getMessageCount(null) > 0) {
|
||||
|
||||
@@ -46,8 +46,11 @@ import com.intellij.execution.CantRunException;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.ExecutionResult;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.CommandLineState;
|
||||
import com.intellij.execution.configurations.RemoteConnection;
|
||||
import com.intellij.execution.configurations.RunProfileState;
|
||||
import com.intellij.execution.filters.ExceptionFilter;
|
||||
import com.intellij.execution.filters.TextConsoleBuilder;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
import com.intellij.execution.process.ProcessEvent;
|
||||
import com.intellij.execution.process.ProcessListener;
|
||||
@@ -1621,6 +1624,12 @@ public abstract class DebugProcessImpl implements DebugProcess {
|
||||
|
||||
try {
|
||||
synchronized (myProcessListeners) {
|
||||
if (state instanceof CommandLineState) {
|
||||
final TextConsoleBuilder consoleBuilder = ((CommandLineState)state).getConsoleBuilder();
|
||||
if (consoleBuilder != null) {
|
||||
consoleBuilder.addFilter(new ExceptionFilter(session.getSearchScope()));
|
||||
}
|
||||
}
|
||||
myExecutionResult = state.execute(executor, runner);
|
||||
if (myExecutionResult == null) {
|
||||
fail();
|
||||
|
||||
@@ -341,11 +341,10 @@ public class DebuggerSession implements AbstractDebuggerSession {
|
||||
|
||||
@Nullable
|
||||
protected ExecutionResult attach(@NotNull final Executor executor, @NotNull final ProgramRunner runner, final ModuleRunProfile profile, final RunProfileState state, final RemoteConnection remoteConnection, final boolean pollConnection) throws ExecutionException {
|
||||
final ExecutionResult executionResult = myDebugProcess.attachVirtualMachine(executor, runner, this, state, remoteConnection, pollConnection);
|
||||
final String addressDisplayName = DebuggerBundle.getAddressDisplayName(remoteConnection);
|
||||
final String transportName = DebuggerBundle.getTransportName(remoteConnection);
|
||||
final Module[] modules = profile.getModules();
|
||||
if (modules == null || modules.length == 0) {
|
||||
if (modules.length == 0) {
|
||||
mySearchScope = GlobalSearchScope.allScope(getProject());
|
||||
}
|
||||
else {
|
||||
@@ -356,6 +355,7 @@ public class DebuggerSession implements AbstractDebuggerSession {
|
||||
}
|
||||
mySearchScope = scope;
|
||||
}
|
||||
final ExecutionResult executionResult = myDebugProcess.attachVirtualMachine(executor, runner, this, state, remoteConnection, pollConnection);
|
||||
getContextManager().setState(SESSION_EMPTY_CONTEXT, STATE_WAITING_ATTACH, EVENT_START_WAIT_ATTACH, DebuggerBundle.message("status.waiting.attach", addressDisplayName, transportName));
|
||||
return executionResult;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ import com.intellij.debugger.ui.impl.watch.*;
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.executors.DefaultDebugExecutor;
|
||||
import com.intellij.execution.filters.ExceptionFilter;
|
||||
import com.intellij.execution.filters.TextConsoleBuilder;
|
||||
import com.intellij.execution.filters.TextConsoleBuilderFactory;
|
||||
import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.runners.ProgramRunner;
|
||||
@@ -511,7 +513,9 @@ public class DebuggerSessionTab extends DebuggerLogConsoleManagerBase implements
|
||||
|
||||
public void addThreadDump(List<ThreadState> threads) {
|
||||
final Project project = getProject();
|
||||
final ConsoleView consoleView = TextConsoleBuilderFactory.getInstance().createBuilder(project).getConsole();
|
||||
final TextConsoleBuilder consoleBuilder = TextConsoleBuilderFactory.getInstance().createBuilder(project);
|
||||
consoleBuilder.addFilter(new ExceptionFilter(myDebuggerSession.getSearchScope()));
|
||||
final ConsoleView consoleView = consoleBuilder.getConsole();
|
||||
final DefaultActionGroup toolbarActions = new DefaultActionGroup();
|
||||
final ThreadDumpPanel panel = new ThreadDumpPanel(project, consoleView, toolbarActions, threads);
|
||||
|
||||
|
||||
@@ -39,9 +39,16 @@ public class ExceptionFilter implements Filter, DumbAware {
|
||||
private static final String AT_PREFIX = AT + " ";
|
||||
private static final String STANDALONE_AT = " " + AT + " ";
|
||||
private static final TextAttributes HYPERLINK_ATTRIBUTES = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(CodeInsightColors.HYPERLINK_ATTRIBUTES);
|
||||
private final GlobalSearchScope mySearchScope;
|
||||
|
||||
public ExceptionFilter(@NotNull final Project project) {
|
||||
myProject = project;
|
||||
mySearchScope = GlobalSearchScope.allScope(myProject);
|
||||
}
|
||||
|
||||
public ExceptionFilter(@NotNull final GlobalSearchScope scope) {
|
||||
myProject = scope.getProject();
|
||||
mySearchScope = scope;
|
||||
}
|
||||
|
||||
public Result applyFilter(final String line, final int textEndOffset) {
|
||||
@@ -81,7 +88,7 @@ public class ExceptionFilter implements Filter, DumbAware {
|
||||
try{
|
||||
final int lineNumber = Integer.parseInt(lineString);
|
||||
final PsiManager manager = PsiManager.getInstance(myProject);
|
||||
PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(className, GlobalSearchScope.allScope(myProject));
|
||||
PsiClass aClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(className, mySearchScope);
|
||||
if (aClass == null) return null;
|
||||
final PsiFile file = (PsiFile) aClass.getContainingFile().getNavigationElement();
|
||||
if (file == null) return null;
|
||||
|
||||
@@ -73,7 +73,7 @@ public abstract class CommandLineState implements RunnableState {
|
||||
return new AnAction[]{new PauseOutputAction(console, processHandler)};
|
||||
}
|
||||
|
||||
protected TextConsoleBuilder getConsoleBuilder() {
|
||||
public TextConsoleBuilder getConsoleBuilder() {
|
||||
return myConsoleBuilder;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,7 +181,8 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ
|
||||
}
|
||||
};
|
||||
|
||||
private final CompositeFilter myMessageFilter;
|
||||
private final CompositeFilter myPredefinedMessageFilter;
|
||||
private final CompositeFilter myCustomFilter;
|
||||
|
||||
private ArrayList<String> myHistory = new ArrayList<String>();
|
||||
private int myHistorySize = 20;
|
||||
@@ -239,12 +240,11 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ
|
||||
myProject = project;
|
||||
myFileType = fileType;
|
||||
|
||||
myMessageFilter = new CompositeFilter(project);
|
||||
final ConsoleFilterProvider[] filterProviders = Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS);
|
||||
for (ConsoleFilterProvider filterProvider : filterProviders) {
|
||||
final Filter[] defaultFilters = filterProvider.getDefaultFilters(project);
|
||||
for (Filter filter : defaultFilters) {
|
||||
addMessageFilter(filter);
|
||||
myCustomFilter = new CompositeFilter(project);
|
||||
myPredefinedMessageFilter = new CompositeFilter(project);
|
||||
for (ConsoleFilterProvider filterProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) {
|
||||
for (Filter filter : filterProvider.getDefaultFilters(project)) {
|
||||
myPredefinedMessageFilter.addFilter(filter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -533,7 +533,7 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ
|
||||
}
|
||||
|
||||
public void addMessageFilter(final Filter filter) {
|
||||
myMessageFilter.addFilter(filter);
|
||||
myCustomFilter.addFilter(filter);
|
||||
}
|
||||
|
||||
public void printHyperlink(final String hyperlinkText, final HyperlinkInfo info) {
|
||||
@@ -782,28 +782,29 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ
|
||||
}
|
||||
|
||||
private void highlightHyperlinks(final int line1, final int line2){
|
||||
if (myMessageFilter != null){
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
final Document document = myEditor.getDocument();
|
||||
final CharSequence chars = document.getCharsSequence();
|
||||
final TextAttributes hyperlinkAttributes = getHyperlinkAttributes();
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
final Document document = myEditor.getDocument();
|
||||
final CharSequence chars = document.getCharsSequence();
|
||||
final TextAttributes hyperlinkAttributes = getHyperlinkAttributes();
|
||||
|
||||
for(int line = line1; line <= line2; line++) {
|
||||
if (line < 0) continue;
|
||||
final int startOffset = document.getLineStartOffset(line);
|
||||
int endOffset = document.getLineEndOffset(line);
|
||||
if (endOffset < document.getTextLength()){
|
||||
endOffset++; // add '\n'
|
||||
}
|
||||
final String text = chars.subSequence(startOffset, endOffset).toString();
|
||||
final Filter.Result result = myMessageFilter.applyFilter(text, endOffset);
|
||||
if (result != null){
|
||||
final int highlightStartOffset = result.highlightStartOffset;
|
||||
final int highlightEndOffset = result.highlightEndOffset;
|
||||
final HyperlinkInfo hyperlinkInfo = result.hyperlinkInfo;
|
||||
addHyperlink(highlightStartOffset, highlightEndOffset, result.highlightAttributes, hyperlinkInfo, hyperlinkAttributes);
|
||||
}
|
||||
for(int line = line1; line <= line2; line++) {
|
||||
if (line < 0) continue;
|
||||
final int startOffset = document.getLineStartOffset(line);
|
||||
int endOffset = document.getLineEndOffset(line);
|
||||
if (endOffset < document.getTextLength()){
|
||||
endOffset++; // add '\n'
|
||||
}
|
||||
final String text = chars.subSequence(startOffset, endOffset).toString();
|
||||
Filter.Result result = myCustomFilter.applyFilter(text, endOffset);
|
||||
if (result == null) {
|
||||
result = myPredefinedMessageFilter.applyFilter(text, endOffset);
|
||||
}
|
||||
if (result != null){
|
||||
final int highlightStartOffset = result.highlightStartOffset;
|
||||
final int highlightEndOffset = result.highlightEndOffset;
|
||||
final HyperlinkInfo hyperlinkInfo = result.hyperlinkInfo;
|
||||
addHyperlink(highlightStartOffset, highlightEndOffset, result.highlightAttributes, hyperlinkInfo, hyperlinkAttributes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user