boolean (@NotNull final XBreakpoint<?> breakpoint, @Nullable String evaluatedLogExpression, @NotNull XSuspendContext suspendContext, boolean doProcessing) { if (doProcessing) { if (breakpoint.isLogMessage()) { XSourcePosition position = breakpoint.getSourcePosition(); OpenFileHyperlinkInfo hyperlinkInfo = position != null ? new OpenFileHyperlinkInfo(myProject, position.getFile(), position.getLine()) : null; printMessage(XDebuggerBundle.message("xbreakpoint.reached.text") + " ", XBreakpointUtil.getShortText(breakpoint), hyperlinkInfo); } if (breakpoint.isLogStack()) { myDebugProcess.logStack(suspendContext, this); } if (evaluatedLogExpression != null) { printMessage(evaluatedLogExpression, null, null); } processDependencies(breakpoint); if (breakpoint.getSuspendPolicy() == SuspendPolicy.NONE) { return false; } } BP_NOTIFICATION_GROUP .createNotification(XDebuggerBundle.message("xdebugger.breakpoint.reached"), MessageType.INFO) .notify(getProject()); if (!(breakpoint instanceof XLineBreakpoint) || ((XLineBreakpoint)breakpoint).getType().canBeHitInOtherPlaces()) { // precompute source position for faster access later myActiveNonLineBreakpoint.set(Pair.create(breakpoint, breakpoint.getSourcePosition())); } else { myActiveNonLineBreakpoint.set(null); } // set this session active on breakpoint, update execution position will be called inside positionReached myDebuggerManager.setCurrentSession(this); positionReachedInternal(suspendContext, true); if (doProcessing && breakpoint instanceof XLineBreakpoint<?> && ((XLineBreakpoint<?>)breakpoint).isTemporary()) { handleTemporaryBreakpointHit(breakpoint); } return true; }