cdt/cdt_6_0_x/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/DebugTextHover.java
changeset 111 c2563c416525
parent 110 9262ca4bdfff
child 112 6b1088abccf8
equal deleted inserted replaced
110:9262ca4bdfff 111:c2563c416525
     1 /**
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 package org.eclipse.cdt.dsf.debug.ui;
       
    19 
       
    20 import org.eclipse.cdt.debug.ui.editors.AbstractDebugTextHover;
       
    21 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
       
    22 import org.eclipse.cdt.dsf.concurrent.Query;
       
    23 import org.eclipse.cdt.dsf.debug.service.IExpressions;
       
    24 import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
       
    25 import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
       
    26 import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
       
    27 import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
       
    28 import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
       
    29 import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
       
    30 import org.eclipse.cdt.dsf.service.DsfServicesTracker;
       
    31 import org.eclipse.cdt.dsf.service.DsfSession;
       
    32 import org.eclipse.core.runtime.IAdaptable;
       
    33 import org.eclipse.jface.viewers.IStructuredSelection;
       
    34 
       
    35 /**
       
    36  * An implementation of AbstractDebugTextHover using DSF services
       
    37  */
       
    38 public class DebugTextHover extends AbstractDebugTextHover {
       
    39 
       
    40 	public class GetExpressionValueQuery extends Query<FormattedValueDMData> {
       
    41     	private final IFrameDMContext frame;
       
    42     	private final String expression;
       
    43 		private DsfServicesTracker dsfServicesTracker;
       
    44 
       
    45         public GetExpressionValueQuery(IFrameDMContext frame, String expression, DsfServicesTracker dsfServicesTracker) {
       
    46             this.frame = frame;
       
    47 			this.expression = expression;
       
    48 			this.dsfServicesTracker = dsfServicesTracker;
       
    49         }
       
    50 
       
    51         @Override
       
    52         protected void execute(final DataRequestMonitor<FormattedValueDMData> rm) {
       
    53             DsfSession session = DsfSession.getSession(frame.getSessionId());
       
    54 			IExpressions expressions = dsfServicesTracker.getService(IExpressions.class);
       
    55     		IExpressionDMContext expressionDMC = expressions.createExpression(frame, expression);
       
    56     		FormattedValueDMContext formattedValueContext = expressions.getFormattedValueContext(expressionDMC, IFormattedValues.NATURAL_FORMAT);
       
    57         	expressions.getFormattedExpressionValue(formattedValueContext,
       
    58         			new DataRequestMonitor<FormattedValueDMData>(session.getExecutor(), rm) {
       
    59                 @Override
       
    60                 protected void handleSuccess() {
       
    61                     rm.setData(getData());
       
    62                     rm.done();
       
    63                 }
       
    64                 
       
    65                 @Override
       
    66         		protected void handleFailure() {
       
    67         			rm.done();
       
    68         		}
       
    69             });
       
    70         }
       
    71     }
       
    72 
       
    73 	protected IFrameDMContext getFrame() {
       
    74 		if (fSelection instanceof IStructuredSelection) {
       
    75 			IStructuredSelection selection = (IStructuredSelection) fSelection;
       
    76 			if (selection.size() == 1) {
       
    77 				Object element = selection.getFirstElement();
       
    78 				if (element instanceof IAdaptable) {
       
    79 					return (IFrameDMContext) ((IAdaptable) element).getAdapter(IFrameDMContext.class);
       
    80 				}
       
    81 			}
       
    82 		}
       
    83 		return null;
       
    84 	}
       
    85 
       
    86 	@Override
       
    87 	protected boolean canEvaluate() {
       
    88 		return getFrame() != null;
       
    89 	}
       
    90 
       
    91 	@Override
       
    92 	protected String evaluateExpression(String expression) {
       
    93 		IFrameDMContext frame = getFrame();
       
    94 		String sessionId = frame.getSessionId();
       
    95 		DsfServicesTracker dsfServicesTracker = new DsfServicesTracker(DsfUIPlugin.getBundleContext(), sessionId);
       
    96 		GetExpressionValueQuery query = new GetExpressionValueQuery(frame, expression, dsfServicesTracker);
       
    97 		DsfSession session = DsfSession.getSession(sessionId);
       
    98         session.getExecutor().execute(query);
       
    99         try {
       
   100         	FormattedValueDMData data = query.get();
       
   101         	if (data != null)
       
   102         		return data.getFormattedValue();
       
   103         } catch (Exception e) {
       
   104         }
       
   105         return null;
       
   106 	}
       
   107 
       
   108 }