Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 274323
Collapse All | Expand All

(-)model/org/eclipse/jdt/internal/debug/core/model/JDIThread.java (+9 lines)
Lines 371-376 Link Here
371
	 * @see ISuspendResume#canResume()
371
	 * @see ISuspendResume#canResume()
372
	 */
372
	 */
373
	public boolean canResume() {
373
	public boolean canResume() {
374
		if (getJavaDebugTarget().isConsideringBreakpoint()) {
375
			return false;
376
		}
374
		return isSuspended() && (!isPerformingEvaluation() || isInvokingMethod()) && !isSuspendVoteInProgress();
377
		return isSuspended() && (!isPerformingEvaluation() || isInvokingMethod()) && !isSuspendVoteInProgress();
375
	}
378
	}
376
379
Lines 378-383 Link Here
378
	 * @see ISuspendResume#canSuspend()
381
	 * @see ISuspendResume#canSuspend()
379
	 */
382
	 */
380
	public boolean canSuspend() {
383
	public boolean canSuspend() {
384
		if (getJavaDebugTarget().isConsideringBreakpoint()) {
385
			return true;
386
		}
381
		return !isSuspended() || (isPerformingEvaluation() && !isInvokingMethod()) || isSuspendVoteInProgress();
387
		return !isSuspended() || (isPerformingEvaluation() && !isInvokingMethod()) || isSuspendVoteInProgress();
382
	}
388
	}
383
389
Lines 418-423 Link Here
418
	 */
424
	 */
419
	protected boolean canStep() {
425
	protected boolean canStep() {
420
		try {
426
		try {
427
			if (getJavaDebugTarget().isConsideringBreakpoint()) {
428
				return false;
429
			}
421
			return isSuspended()
430
			return isSuspended()
422
				&& (!isPerformingEvaluation() || isInvokingMethod())
431
				&& (!isPerformingEvaluation() || isInvokingMethod())
423
				&& !isSuspendVoteInProgress()
432
				&& !isSuspendVoteInProgress()
(-)model/org/eclipse/jdt/internal/debug/core/model/JDIDebugTarget.java (-10 / +40 lines)
Lines 171-176 Link Here
171
	private boolean fSuspended = true;
171
	private boolean fSuspended = true;
172
	
172
	
173
	/**
173
	/**
174
	 * When handling a breakpoint, the VM is quietly suspended and may resume
175
	 * depending on conditional breakpoints, breakpoint listeners, etc.
176
	 */
177
	private boolean fConsideringBreakpoint = false;
178
	
179
	/**
174
	 * Whether the VM should be resumed on startup
180
	 * Whether the VM should be resumed on startup
175
	 */
181
	 */
176
	private boolean fResumeOnStartup = false; 
182
	private boolean fResumeOnStartup = false; 
Lines 529-536 Link Here
529
	 * @see ISuspendResume#canResume()
535
	 * @see ISuspendResume#canResume()
530
	 */
536
	 */
531
	public boolean canResume() {
537
	public boolean canResume() {
532
		return (isSuspended() || canResumeThreads())
538
		if (isAvailable()) {
533
		    && isAvailable() && !isPerformingHotCodeReplace();
539
			if (isConsideringBreakpoint()) {
540
				return false;
541
			}
542
			return (isSuspended() || canResumeThreads()) && !isPerformingHotCodeReplace();	
543
		}
544
		return false;	
534
	}
545
	}
535
546
536
	/**
547
	/**
Lines 552-566 Link Here
552
	 * @see ISuspendResume#canSuspend()
563
	 * @see ISuspendResume#canSuspend()
553
	 */
564
	 */
554
	public boolean canSuspend() {
565
	public boolean canSuspend() {
555
		if (!isSuspended() && isAvailable()) {
566
		if (isAvailable()) {
556
			// only allow suspend if no threads are currently suspended
567
			if (isConsideringBreakpoint()) {
557
			IThread[] threads= getThreads();
568
				// quietly suspended.. still pretend to be running
558
			for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
569
				return true;
559
				if (!((JDIThread)threads[i]).canSuspend()) {
570
			}
560
					return false;
571
			if (!isSuspended()) {
572
				// only allow suspend if no threads are currently suspended
573
				IThread[] threads= getThreads();
574
				for (int i= 0, numThreads= threads.length; i < numThreads; i++) {
575
					if (!((JDIThread)threads[i]).canSuspend()) {
576
						return false;
577
					}
561
				}
578
				}
579
				return true;
562
			}
580
			}
563
			return true;
564
		}
581
		}
565
		return false;
582
		return false;
566
	}
583
	}
Lines 950-955 Link Here
950
	}
967
	}
951
	
968
	
952
	/**
969
	/**
970
	 * When a VM is suspended it may just be considering a breakpoint - evaluating its condition
971
	 * and notifying listeners, etc.
972
	 * 
973
	 * @return whether the VM considering to suspend at a breakpoint
974
	 */
975
	public boolean isConsideringBreakpoint() {
976
		return fConsideringBreakpoint;
977
	}
978
	
979
	/**
953
	 * Sets whether this VM is suspended.
980
	 * Sets whether this VM is suspended.
954
	 * 
981
	 * 
955
	 * @param suspended whether this VM is suspended
982
	 * @param suspended whether this VM is suspended
Lines 1302-1309 Link Here
1302
	 * @param breakpoint the breakpoint that caused the
1329
	 * @param breakpoint the breakpoint that caused the
1303
	 *  suspension
1330
	 *  suspension
1304
	 */
1331
	 */
1305
	public void prepareToSuspendByBreakpoint(JavaBreakpoint breakpoint) {
1332
	protected void prepareToSuspendByBreakpoint(JavaBreakpoint breakpoint) {
1306
		setSuspended(true);
1333
		setSuspended(true);
1334
		fConsideringBreakpoint = true;
1307
		suspendThreads();
1335
		suspendThreads();
1308
	}
1336
	}
1309
	
1337
	
Lines 1315-1320 Link Here
1315
	 *  suspension
1343
	 *  suspension
1316
	 */
1344
	 */
1317
	protected void suspendedByBreakpoint(JavaBreakpoint breakpoint, boolean queueEvent, EventSet set) {
1345
	protected void suspendedByBreakpoint(JavaBreakpoint breakpoint, boolean queueEvent, EventSet set) {
1346
		fConsideringBreakpoint = false;
1318
		if (queueEvent) {
1347
		if (queueEvent) {
1319
			queueSuspendEvent(DebugEvent.BREAKPOINT, set);
1348
			queueSuspendEvent(DebugEvent.BREAKPOINT, set);
1320
		} else {
1349
		} else {
Lines 1329-1334 Link Here
1329
	 *  suspension
1358
	 *  suspension
1330
	 */
1359
	 */
1331
	protected void cancelSuspendByBreakpoint(JavaBreakpoint breakpoint) throws DebugException {
1360
	protected void cancelSuspendByBreakpoint(JavaBreakpoint breakpoint) throws DebugException {
1361
		fConsideringBreakpoint = false;
1332
		setSuspended(false);
1362
		setSuspended(false);
1333
		resumeThreads();
1363
		resumeThreads();
1334
	}	
1364
	}	
(-)ui/org/eclipse/jdt/internal/debug/ui/monitors/JavaThreadContentProvider.java (-1 / +6 lines)
Lines 23-28 Link Here
23
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
23
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
24
import org.eclipse.jdt.debug.core.IJavaThread;
24
import org.eclipse.jdt.debug.core.IJavaThread;
25
import org.eclipse.jdt.debug.ui.JavaDebugUtils;
25
import org.eclipse.jdt.debug.ui.JavaDebugUtils;
26
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
26
import org.eclipse.jdt.internal.debug.core.model.JDIThread;
27
import org.eclipse.jdt.internal.debug.core.model.JDIThread;
27
28
28
/**
29
/**
Lines 119-125 Link Here
119
	protected boolean hasChildren(Object element, IPresentationContext context, IViewerUpdate monitor) throws CoreException {
120
	protected boolean hasChildren(Object element, IPresentationContext context, IViewerUpdate monitor) throws CoreException {
120
		if (element instanceof JDIThread) {
121
		if (element instanceof JDIThread) {
121
			JDIThread jThread = (JDIThread) element;
122
			JDIThread jThread = (JDIThread) element;
122
			if (!jThread.getDebugTarget().isSuspended()) {
123
			JDIDebugTarget jdt = jThread.getJavaDebugTarget();
124
			if (jdt.isConsideringBreakpoint()) {
125
				return false;
126
			}
127
			if (!jdt.isSuspended()) {
123
				if (jThread.isSuspendVoteInProgress()) {
128
				if (jThread.isSuspendVoteInProgress()) {
124
					return false;
129
					return false;
125
				}
130
				}
(-)ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java (-4 / +18 lines)
Lines 64-69 Link Here
64
import org.eclipse.jdt.debug.core.IJavaWatchpoint;
64
import org.eclipse.jdt.debug.core.IJavaWatchpoint;
65
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint;
65
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint;
66
import org.eclipse.jdt.internal.debug.core.logicalstructures.JDIAllInstancesValue;
66
import org.eclipse.jdt.internal.debug.core.logicalstructures.JDIAllInstancesValue;
67
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
67
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListEntryVariable;
68
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListEntryVariable;
68
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListValue;
69
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListValue;
69
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListVariable;
70
import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListVariable;
Lines 318-324 Link Here
318
		} else if (thread.isStepping()) {
319
		} else if (thread.isStepping()) {
319
			key.append("stepping"); //$NON-NLS-1$
320
			key.append("stepping"); //$NON-NLS-1$
320
			args = new String[] {thread.getName()};
321
			args = new String[] {thread.getName()};
321
		} else if ((thread instanceof JDIThread && ((JDIThread)thread).isSuspendVoteInProgress()) && !thread.getDebugTarget().isSuspended()) {
322
		} else if ((thread instanceof JDIThread && (((JDIThread)thread).isSuspendVoteInProgress()) && !thread.getDebugTarget().isSuspended())
323
				|| ((JDIDebugTarget)thread.getDebugTarget()).isConsideringBreakpoint()) {
322
			// show running when listener notification is in progress
324
			// show running when listener notification is in progress
323
			key.append("running"); //$NON-NLS-1$
325
			key.append("running"); //$NON-NLS-1$
324
			args = new String[] {thread.getName()};
326
			args = new String[] {thread.getName()};
Lines 423-428 Link Here
423
	protected String getDebugTargetText(IJavaDebugTarget debugTarget) throws DebugException {
425
	protected String getDebugTargetText(IJavaDebugTarget debugTarget) throws DebugException {
424
		String labelString= debugTarget.getName();
426
		String labelString= debugTarget.getName();
425
		if (debugTarget.isSuspended()) {
427
		if (debugTarget.isSuspended()) {
428
			if (debugTarget instanceof JDIDebugTarget) {
429
				if (((JDIDebugTarget)debugTarget).isConsideringBreakpoint()) {
430
					return labelString;
431
				}
432
			}
426
			labelString += DebugUIMessages.JDIModelPresentation_target_suspended; 
433
			labelString += DebugUIMessages.JDIModelPresentation_target_suspended; 
427
		}
434
		}
428
		return labelString;
435
		return labelString;
Lines 669-679 Link Here
669
			}
676
			}
670
			if (item instanceof JDIThread) {
677
			if (item instanceof JDIThread) {
671
				JDIThread jt = (JDIThread) item;
678
				JDIThread jt = (JDIThread) item;
672
				if (jt.getDebugTarget().isSuspended()) {
679
				JDIDebugTarget jdt = jt.getJavaDebugTarget();
680
				if (jt.isSuspendVoteInProgress() || jdt.isConsideringBreakpoint()) {
681
					return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_RUNNING);
682
				}
683
				if (jdt.isSuspended()) {
673
					return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED);
684
					return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED);
674
				}
685
				}
675
				if (jt.isSuspendVoteInProgress()) {
686
			}
676
					return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_THREAD_RUNNING);
687
			if (item instanceof JDIDebugTarget) {
688
				JDIDebugTarget jdt = (JDIDebugTarget)item;
689
				if (jdt.isConsideringBreakpoint()) {
690
					return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_DEBUG_TARGET);
677
				}
691
				}
678
			}
692
			}
679
			if (item instanceof IJavaStackFrame || item instanceof IJavaThread || item instanceof IJavaDebugTarget) {
693
			if (item instanceof IJavaStackFrame || item instanceof IJavaThread || item instanceof IJavaDebugTarget) {

Return to bug 274323