cdt/cdt_6_0_x/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/AbstractDsfDebugTextHover.java
author dadubrow
Tue, 10 Nov 2009 09:58:50 -0600
changeset 111 c2563c416525
permissions -rw-r--r--
merge debug text hover support with CDT
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
111
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     1
/**
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     3
* All rights reserved.
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     8
*
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    11
*
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    12
* Contributors:
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    13
*
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    14
* Description: 
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    15
*
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    16
*/
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    17
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    18
package org.eclipse.cdt.dsf.debug.ui;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    19
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    20
import org.eclipse.cdt.debug.ui.editors.AbstractDebugTextHover;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    21
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    22
import org.eclipse.cdt.dsf.concurrent.Query;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    23
import org.eclipse.cdt.dsf.debug.service.IExpressions;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    24
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    25
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    26
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    27
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    28
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    29
import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    30
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    31
import org.eclipse.cdt.dsf.service.DsfSession;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    32
import org.eclipse.core.runtime.IAdaptable;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    33
import org.eclipse.debug.core.model.IDebugModelProvider;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    34
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    35
/**
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    36
 * An implementation of AbstractDebugTextHover using DSF services.
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    37
 * 
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    38
 * @since 2.1
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    39
 */
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    40
abstract public class AbstractDsfDebugTextHover extends AbstractDebugTextHover {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    41
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    42
    /**
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    43
     * Returns the debug model ID of that this debug text hover is to be used for.
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    44
     */
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    45
    abstract protected String getModelId();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    46
    
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    47
	private static class GetExpressionValueQuery extends Query<FormattedValueDMData> {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    48
    	private final IFrameDMContext frame;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    49
    	private final String expression;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    50
		private DsfServicesTracker dsfServicesTracker;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    51
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    52
        public GetExpressionValueQuery(IFrameDMContext frame, String expression, DsfServicesTracker dsfServicesTracker) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    53
            this.frame = frame;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    54
			this.expression = expression;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    55
			this.dsfServicesTracker = dsfServicesTracker;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    56
        }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    57
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    58
        @Override
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    59
        protected void execute(final DataRequestMonitor<FormattedValueDMData> rm) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    60
            DsfSession session = DsfSession.getSession(frame.getSessionId());
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    61
			IExpressions expressions = dsfServicesTracker.getService(IExpressions.class);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    62
    		IExpressionDMContext expressionDMC = expressions.createExpression(frame, expression);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    63
    		FormattedValueDMContext formattedValueContext = expressions.getFormattedValueContext(expressionDMC, IFormattedValues.NATURAL_FORMAT);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    64
        	expressions.getFormattedExpressionValue(formattedValueContext,
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    65
        			new DataRequestMonitor<FormattedValueDMData>(session.getExecutor(), rm) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    66
                @Override
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    67
                protected void handleSuccess() {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    68
                    rm.setData(getData());
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    69
                    rm.done();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    70
                }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    71
                
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    72
                @Override
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    73
        		protected void handleFailure() {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    74
        			rm.done();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    75
        		}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    76
            });
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    77
        }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    78
    }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    79
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    80
	protected IFrameDMContext getFrame() {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    81
	    IAdaptable adaptable = getSelectionAdaptable();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    82
	    if (adaptable != null) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    83
	        return (IFrameDMContext) adaptable.getAdapter(IFrameDMContext.class);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    84
		}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    85
		return null;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    86
	}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    87
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    88
	@Override
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    89
	protected boolean canEvaluate() {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    90
	    if (getFrame() == null) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    91
	        return false;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    92
	    }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    93
	    
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    94
		IAdaptable adaptable = getSelectionAdaptable();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    95
		if (adaptable != null) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    96
		    IDebugModelProvider modelProvider = (IDebugModelProvider)adaptable.getAdapter(IDebugModelProvider.class);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    97
		    if (modelProvider != null) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    98
		        String[] models = modelProvider.getModelIdentifiers();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
    99
		        String myModel = getModelId();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   100
		        for (int i = 0; i < models.length; i++) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   101
		            if (models[i].equals(myModel)) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   102
		                return true;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   103
		            }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   104
		        }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   105
		    }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   106
		}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   107
		return false;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   108
	}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   109
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   110
	@Override
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   111
	protected String evaluateExpression(String expression) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   112
		IFrameDMContext frame = getFrame();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   113
		String sessionId = frame.getSessionId();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   114
		DsfServicesTracker dsfServicesTracker = new DsfServicesTracker(DsfUIPlugin.getBundleContext(), sessionId);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   115
		try {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   116
			GetExpressionValueQuery query = new GetExpressionValueQuery(frame, expression, dsfServicesTracker);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   117
			DsfSession session = DsfSession.getSession(sessionId);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   118
	        session.getExecutor().execute(query);
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   119
	        try {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   120
	        	FormattedValueDMData data = query.get();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   121
	        	if (data != null)
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   122
	        		return data.getFormattedValue();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   123
	        } catch (Exception e) {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   124
	        }
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   125
		} finally {
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   126
			dsfServicesTracker.dispose();
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   127
		}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   128
        return null;
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   129
	}
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   130
c2563c416525 merge debug text hover support with CDT
dadubrow
parents:
diff changeset
   131
}