From 3d6f5d20c567265bfbe8b9fc8ddf63ec52541d0e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 16 Aug 2017 18:33:54 +0300 Subject: [PATCH] Init debugger NotificationGroup on xdebugger load to see group in settings before the first debug session start --- .../debugger/actions/InterruptThreadAction.java | 6 +++--- .../intellij/debugger/engine/DebugProcessEvents.java | 5 +++-- .../com/intellij/debugger/engine/DebugProcessImpl.java | 8 ++++++-- .../intellij/debugger/engine/ThreadBlockedMonitor.java | 6 +++--- .../com/intellij/debugger/impl/DebuggerSession.java | 4 ++-- .../com/intellij/debugger/impl/SourceCodeChecker.java | 4 ++-- .../debugger/ui/breakpoints/BreakpointManager.java | 4 ++-- .../com/intellij/xdebugger/impl/XDebugSessionImpl.java | 10 ++++++---- .../intellij/xdebugger/impl/XDebuggerManagerImpl.java | 6 ++++++ .../ui/tree/nodes/HeadlessValueEvaluationCallback.java | 4 ++-- 10 files changed, 35 insertions(+), 22 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java index 0b3515ff5314..bceea0997214 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/InterruptThreadAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import java.util.ArrayList; import java.util.List; @@ -66,7 +66,7 @@ public class InterruptThreadAction extends DebuggerAction{ } if (unsupported) { final Project project = debugProcess.getProject(); - XDebugSessionImpl.NOTIFICATION_GROUP + XDebuggerManagerImpl.NOTIFICATION_GROUP .createNotification("Thread operation 'interrupt' is not supported by VM", MessageType.INFO).notify(project); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java index 43b4a69a3005..fe9c056a436d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessEvents.java @@ -41,6 +41,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.sun.jdi.InternalException; import com.sun.jdi.ThreadReference; import com.sun.jdi.VMDisconnectedException; @@ -442,7 +443,7 @@ public class DebugProcessEvents extends DebugProcessImpl { final MethodFilter methodFilter = hint.getMethodFilter(); if (methodFilter instanceof NamedMethodFilter && !hint.wasStepTargetMethodMatched()) { final String message = "Method " + ((NamedMethodFilter)methodFilter).getMethodName() + "() has not been called"; - XDebugSessionImpl.NOTIFICATION_GROUP.createNotification(message, MessageType.INFO).notify(project); + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification(message, MessageType.INFO).notify(project); } if (hint.wasStepTargetMethodMatched() && hint.isResetIgnoreFilters()) { checkPositionNotFiltered(suspendContext.getThread(), filters -> mySession.resetIgnoreStepFiltersFlag()); @@ -528,7 +529,7 @@ public class DebugProcessEvents extends DebugProcessImpl { private void notifySkippedBreakpoints(LocatableEvent event) { if (event != null) { - XDebugSessionImpl.NOTIFICATION_GROUP + XDebuggerManagerImpl.NOTIFICATION_GROUP .createNotification(DebuggerBundle.message("message.breakpoint.skipped", event.location()), MessageType.INFO) .notify(getProject()); } diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java index efd1b9031f4e..ec3b3c97eb5c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/DebugProcessImpl.java @@ -72,7 +72,10 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.classFilter.ClassFilter; import com.intellij.ui.classFilter.DebuggerClassFilterProvider; -import com.intellij.util.*; +import com.intellij.util.Alarm; +import com.intellij.util.Consumer; +import com.intellij.util.EventDispatcher; +import com.intellij.util.StringBuilderSpinAllocator; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; @@ -80,6 +83,7 @@ import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.sun.jdi.*; import com.sun.jdi.connect.*; @@ -612,7 +616,7 @@ public abstract class DebugProcessImpl extends UserDataHolderBase implements Deb Arrays.stream(ProjectJdkTable.getInstance().getAllJdks()) .filter(sdk -> versionMatch(sdk, version)) .findFirst().ifPresent(sdk -> { - XDebugSessionImpl.NOTIFICATION_GROUP.createNotification( + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification( DebuggerBundle.message("message.remote.jre.version.mismatch", version, runjre != null ? runjre.getVersionString() : "unknown", diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java b/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java index 2b50d7ce07a4..58e473d9b265 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/ThreadBlockedMonitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.registry.Registry; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.sun.jdi.IncompatibleThreadStateException; import com.sun.jdi.ObjectReference; import com.sun.jdi.ThreadReference; @@ -89,7 +89,7 @@ public class ThreadBlockedMonitor { private static void onThreadBlocked(@NotNull final ThreadReference blockedThread, @NotNull final ThreadReference blockingThread, final DebugProcessImpl process) { - XDebugSessionImpl.NOTIFICATION_GROUP.createNotification( + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification( DebuggerBundle.message("status.thread.blocked.by", blockedThread.name(), blockingThread.name()), DebuggerBundle.message("status.thread.blocked.by.resume", blockingThread.name()), NotificationType.INFORMATION, (notification, event) -> { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java index b827d32c9172..a341bb317a85 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerSession.java @@ -60,7 +60,7 @@ import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.AbstractDebuggerSession; import com.intellij.xdebugger.XDebugSession; import com.intellij.xdebugger.XSourcePosition; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.evaluate.quick.common.ValueLookupManager; import com.sun.jdi.ObjectCollectedException; @@ -485,7 +485,7 @@ public class DebuggerSession implements AbstractDebuggerSession { if (thread != null) { List> descriptors = DebuggerUtilsEx.getEventDescriptors(suspendContext); if (!descriptors.isEmpty()) { - XDebugSessionImpl.NOTIFICATION_GROUP.createNotification( + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification( DebuggerBundle.message("status.breakpoint.reached.in.thread", thread.name()), DebuggerBundle.message("status.breakpoint.reached.in.thread.switch"), NotificationType.INFORMATION, new NotificationListener() { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java index 446099f45db4..6f1f29b3b7ce 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/SourceCodeChecker.java @@ -44,7 +44,7 @@ import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.ui.AppUIUtil; import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.sun.jdi.*; import one.util.streamex.IntStreamEx; import one.util.streamex.StreamEx; @@ -150,7 +150,7 @@ public class SourceCodeChecker { DebuggerBundle.message("warning.source.code.not.match"))); } else { - XDebugSessionImpl.NOTIFICATION_GROUP + XDebuggerManagerImpl.NOTIFICATION_GROUP .createNotification(DebuggerBundle.message("warning.source.code.not.match"), NotificationType.WARNING) .notify(project); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointManager.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointManager.java index 5c32484fe45f..10d558cf9b3d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointManager.java @@ -54,7 +54,7 @@ import com.intellij.xdebugger.XDebuggerUtil; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.breakpoints.*; import com.intellij.xdebugger.impl.DebuggerSupport; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import com.intellij.xdebugger.impl.breakpoints.XBreakpointBase; import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl; import com.intellij.xdebugger.impl.breakpoints.XDependentBreakpointManager; @@ -118,7 +118,7 @@ public class BreakpointManager { private static boolean checkAndNotifyPossiblySlowBreakpoint(XBreakpoint breakpoint) { XBreakpointProperties properties = breakpoint.getProperties(); if (breakpoint.isEnabled() && properties instanceof JavaMethodBreakpointProperties && !((JavaMethodBreakpointProperties)properties).EMULATED) { - XDebugSessionImpl.NOTIFICATION_GROUP + XDebuggerManagerImpl.NOTIFICATION_GROUP .createNotification(DebuggerBundle.message("method.breakpoints.slowness.warning"), MessageType.WARNING) .notify(((XBreakpointBase)breakpoint).getProject()); return true; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index cc051432383f..5a81d9f6e004 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -43,7 +43,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.wm.ToolWindowId; import com.intellij.ui.AppUIUtil; import com.intellij.util.EventDispatcher; import com.intellij.util.SmartList; @@ -82,8 +81,11 @@ import java.util.concurrent.atomic.AtomicBoolean; */ public class XDebugSessionImpl implements XDebugSession { private static final Logger LOG = Logger.getInstance("#com.intellij.xdebugger.impl.XDebugSessionImpl"); - public static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.toolWindowGroup("Debugger messages", ToolWindowId.DEBUG, - false); + + /** @deprecated Use {@link XDebuggerManagerImpl#NOTIFICATION_GROUP} */ + @Deprecated + public static final NotificationGroup NOTIFICATION_GROUP = XDebuggerManagerImpl.NOTIFICATION_GROUP; + private XDebugProcess myDebugProcess; private final Map, CustomizedBreakpointPresentation> myRegisteredBreakpoints = new THashMap<>(); @@ -948,7 +950,7 @@ public class XDebugSessionImpl implements XDebugSession { listener.hyperlinkUpdate(event); } }; - NOTIFICATION_GROUP.createNotification("", message, type.toNotificationType(), notificationListener).notify(myProject); + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification("", message, type.toNotificationType(), notificationListener).notify(myProject); } private class MyBreakpointListener implements XBreakpointListener> { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java index ea70e07884fc..f7f8f527be6e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java @@ -26,6 +26,7 @@ import com.intellij.execution.ui.ExecutionConsole; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.execution.ui.RunContentManager; import com.intellij.execution.ui.RunContentWithExecutorListener; +import com.intellij.notification.NotificationGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; import com.intellij.openapi.editor.Document; @@ -36,6 +37,7 @@ import com.intellij.openapi.fileEditor.FileEditorManagerListener; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.ToolWindowId; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBus; @@ -68,7 +70,11 @@ import java.util.concurrent.atomic.AtomicReference; @State(name = XDebuggerManagerImpl.COMPONENT_NAME, storages = @Storage(StoragePathMacros.WORKSPACE_FILE)) public class XDebuggerManagerImpl extends XDebuggerManager implements NamedComponent, PersistentStateComponent { + @NonNls public static final String COMPONENT_NAME = "XDebuggerManager"; + public static final NotificationGroup NOTIFICATION_GROUP = + NotificationGroup.toolWindowGroup("Debugger messages", ToolWindowId.DEBUG, false); + private final Project myProject; private final XBreakpointManagerImpl myBreakpointManager; private final XDebuggerWatchesManager myWatchesManager; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/HeadlessValueEvaluationCallback.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/HeadlessValueEvaluationCallback.java index 3a5ca39867d1..d240ca60363d 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/HeadlessValueEvaluationCallback.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/HeadlessValueEvaluationCallback.java @@ -23,7 +23,7 @@ import com.intellij.util.Alarm; import com.intellij.util.concurrency.Semaphore; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.frame.XFullValueEvaluator; -import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.XDebuggerManagerImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,7 +62,7 @@ public class HeadlessValueEvaluationCallback implements XFullValueEvaluator.XFul public void errorOccurred(@NotNull String errorMessage) { try { String message = XDebuggerBundle.message("load.value.task.error", errorMessage); - XDebugSessionImpl.NOTIFICATION_GROUP.createNotification(message, NotificationType.ERROR).notify(myNode.getTree().getProject()); + XDebuggerManagerImpl.NOTIFICATION_GROUP.createNotification(message, NotificationType.ERROR).notify(myNode.getTree().getProject()); } finally { evaluationComplete(errorMessage);