From f27ab84b9647115b2474f927e1f67a089bc462b5 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Thu, 20 May 2010 23:10:15 +0000 Subject: [PATCH] Bug 308626 - Added a test for RejectedExecutionException. --- .../sourcelookup/DsfSourceDisplayAdapter.java | 112 ++++++++++++------ 1 file changed, 74 insertions(+), 38 deletions(-) diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java index 271435486f2..fb2d93e1eed 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/sourcelookup/DsfSourceDisplayAdapter.java @@ -647,60 +647,96 @@ public class DsfSourceDisplayAdapter implements ISourceDisplay, ISteppingControl /* (non-Javadoc) * @see org.eclipse.debug.ui.contexts.ISourceDisplayAdapter#displaySource(java.lang.Object, org.eclipse.ui.IWorkbenchPage, boolean) */ - public void displaySource(Object context, final IWorkbenchPage page, - final boolean force) { + public void displaySource(Object context, final IWorkbenchPage page, final boolean force) { fStepCount = 0; + IExecutionDMContext displayThread = null; IFrameDMContext displayFrame = null; if (context instanceof IDMVMContext) { IDMContext dmc = ((IDMVMContext) context).getDMContext(); - if (dmc instanceof IFrameDMContext) + if (dmc instanceof IFrameDMContext) { displayFrame = (IFrameDMContext) dmc; - } else if (context instanceof IFrameDMContext) + } else if (dmc instanceof IExecutionDMContext) { + displayThread = (IExecutionDMContext)dmc; + } + } else if (context instanceof IFrameDMContext) { displayFrame = (IFrameDMContext) context; + } else if (context instanceof IExecutionDMContext) { + displayThread = (IExecutionDMContext)context; + } // Quick test. DMC is checked again in source lookup participant, but // it's much quicker to test here. - if (displayFrame != null) - doDisplaySource(displayFrame, page, force, false); + if (displayFrame != null) { + doDisplayFrameSource(displayFrame, page, force, false); + } else if (displayThread != null) { + doDisplayThreadSource(displayThread, page, force, false); + } } - private void doDisplaySource(final IFrameDMContext context, final IWorkbenchPage page, final boolean force, final boolean eventTriggered) { + private void doDisplayThreadSource(final IExecutionDMContext context, final IWorkbenchPage page, final boolean force, final boolean eventTriggered) { + fExecutor.execute(new DsfRunnable() { + public void run() { + // We need to retrieve the frame level and line number from the service. + IStack stackService = fServicesTracker.getService(IStack.class); + if (stackService == null) { + return; + } + stackService.getTopFrame( + context, + new DataRequestMonitor(fExecutor, null) { + @Override + protected void handleSuccess() { + doDisplayFrameSource(getData(), page, force, eventTriggered); + } + }); + } + }); + } + + private void doDisplayFrameSource(final IFrameDMContext context, final IWorkbenchPage page, final boolean force, final boolean eventTriggered) { if (context.getLevel() < 0) { return; } // Re-dispatch to executor thread before accessing job lists. - fExecutor.execute(new DsfRunnable() { public void run() { - // We need to retrieve the frame level and line number from the service. - IStack stackService = fServicesTracker.getService(IStack.class); - if (stackService == null) { - return; + fExecutor.execute(new DsfRunnable() { + public void run() { + // We need to retrieve the frame level and line number from the service. + IStack stackService = fServicesTracker.getService(IStack.class); + if (stackService == null) { + return; + } + stackService.getFrameData( + context, + new DataRequestMonitor(fExecutor, null) { + @Override + public void handleSuccess() { + FrameData frameData = new FrameData(); + frameData.fDmc = context; + frameData.fLevel = context.getLevel(); + // Document line numbers are 0-based. While debugger line numbers are 1-based. + IFrameDMData data = getData(); + frameData.fLine = data.getLine() - 1; + frameData.fFile = data.getFile(); + if (!force && frameData.equals(fPrevFrameData)) { + fPrevResult.updateArtifact(context); + startDisplayJob(fPrevResult, frameData, page, eventTriggered); + } else { + startLookupJob(frameData, page, eventTriggered); + } + } + @Override + protected void handleFailure() { + doneStepping(context); + } + + @Override + protected void handleRejectedExecutionException() { + doneStepping(context); + } + }); } - stackService.getFrameData( - context, - new DataRequestMonitor(fExecutor, null) { - @Override - public void handleSuccess() { - FrameData frameData = new FrameData(); - frameData.fDmc = context; - frameData.fLevel = context.getLevel(); - // Document line numbers are 0-based. While debugger line numbers are 1-based. - IFrameDMData data = getData(); - frameData.fLine = data.getLine() - 1; - frameData.fFile = data.getFile(); - if (!force && frameData.equals(fPrevFrameData)) { - fPrevResult.updateArtifact(context); - startDisplayJob(fPrevResult, frameData, page, eventTriggered); - } else { - startLookupJob(frameData, page, eventTriggered); - } - } - @Override - protected void handleFailure() { - doneStepping(context); - } - }); - }}); + }); } private void executeFromJob(Runnable runnable) { @@ -838,7 +874,7 @@ public class DsfSourceDisplayAdapter implements ISourceDisplay, ISteppingControl final IDMContext dmc = ((IDMVMContext)context).getDMContext(); if (dmc instanceof IFrameDMContext && DMContexts.isAncestorOf(dmc, e.getDMContext())) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - doDisplaySource((IFrameDMContext) dmc, page, false, true); + doDisplayFrameSource((IFrameDMContext) dmc, page, false, true); return; } }