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 } |
|