1 11 package org.eclipse.jdt.internal.debug.ui.actions; 12 13 import org.eclipse.core.runtime.IStatus; 14 import org.eclipse.debug.core.DebugException; 15 import org.eclipse.debug.ui.InspectPopupDialog; 16 import org.eclipse.jdt.core.Signature; 17 import org.eclipse.jdt.debug.core.IJavaDebugTarget; 18 import org.eclipse.jdt.debug.core.IJavaStackFrame; 19 import org.eclipse.jdt.debug.core.IJavaValue; 20 import org.eclipse.jdt.debug.eval.IEvaluationResult; 21 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin; 22 import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression; 23 import org.eclipse.swt.widgets.Display; 24 import org.eclipse.ui.IWorkbenchPart; 25 26 31 public class ForceReturnAction extends EvaluateAction { 32 33 private IJavaStackFrame fTargetFrame = null; 34 35 38 protected void displayResult(final IEvaluationResult result) { 39 evaluationCleanup(); 40 41 final Display display = JDIDebugUIPlugin.getStandardDisplay(); 42 if (result.hasErrors()) { 44 display.asyncExec(new Runnable () { 45 public void run() { 46 if (display.isDisposed()) { 47 return; 48 } 49 reportErrors(result); 50 } 51 }); 52 return; 53 } 54 55 try { 57 IJavaStackFrame frame = fTargetFrame; 58 IJavaValue value = result.getValue(); 59 frame.forceReturn(value); 60 if (!Signature.SIG_VOID.equals(value)) { 61 display.asyncExec(new Runnable () { 62 public void run() { 63 if (display.isDisposed()) { 64 return; 65 } 66 IWorkbenchPart part = getTargetPart(); 67 InspectPopupDialog dialog = new InspectPopupDialog(getShell(), getPopupAnchor(getStyledText(part)), null, new JavaInspectExpression(result)); 68 dialog.open(); 69 } 70 }); 71 } 72 } catch (DebugException e) { 73 final IStatus status = e.getStatus(); 74 display.asyncExec(new Runnable () { 75 public void run() { 76 if (display.isDisposed()) { 77 return; 78 } 79 JDIDebugUIPlugin.statusDialog(status); 80 } 81 }); 82 } 83 } 84 85 protected void run() { 86 IJavaStackFrame stackFrame= getStackFrameContext(); 87 if (stackFrame != null) { 88 try { 89 String returnType = Signature.getReturnType(stackFrame.getSignature()); 90 if (Signature.SIG_VOID.equals(returnType)) { 91 stackFrame.forceReturn(((IJavaDebugTarget)stackFrame.getDebugTarget()).voidValue()); 93 return; 94 } 95 } catch (DebugException e) { 96 JDIDebugUIPlugin.statusDialog(e.getStatus()); 97 return; 98 } 99 } 100 fTargetFrame = stackFrame; 101 super.run(); 103 } 104 105 106 107 108 109 } 110 | Popular Tags |