void (@Nullable LocatableEvent event, SkippedBreakpointReason reason) { if (event != null && myNotificationsCoolDown.compareAndSet(false, true)) { AppExecutorUtil.getAppScheduledExecutorService().schedule(() -> myNotificationsCoolDown.set(false), 1, TimeUnit.SECONDS); var message = switch (reason) { case EVALUATION -> JavaDebuggerBundle.message("message.breakpoint.skipped.during.evaluation", event.location()); case OTHER_VM -> JavaDebuggerBundle.message("message.breakpoint.skipped.other.vm", event.location()); case STEPPING -> JavaDebuggerBundle.message("message.breakpoint.skipped.during.stepping.in.another.thread", event.location()); }; XDebuggerManagerImpl.getNotificationGroup() .createNotification(message, MessageType.WARNING) .addAction(NotificationAction.createSimpleExpiring(JavaDebuggerBundle.message("message.breakpoint.skipped.learn.more"), () -> { BrowserUtil.browse("https://www.jetbrains.com/help/idea/?skipped.breakpoints"); })) .notify(getProject()); } }