dubugger: consider search scope from run configuration when navigating from exception trace hyperlinks (IDEADEV-41133)

This commit is contained in:
Eugene Zhuravlev
2009-10-30 21:18:46 +03:00
parent 066324e6ef
commit 677f91daff
7 changed files with 57 additions and 35 deletions
@@ -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;