/******************************************************************************* * Copyright (c) 2006, 2014 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Wind Rvier Systems - added support for columns (bug 235646) * Ralf M Petter - (bug 470536) *******************************************************************************/ package org.eclipse.debug.internal.ui.model.elements; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.model.IErrorReportingExpression; import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.core.model.IValue; import org.eclipse.debug.core.model.IWatchExpression; import org.eclipse.debug.internal.ui.DebugUIMessages; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.viewers.TreePath; import org.eclipse.swt.graphics.RGB; /** * @since 3.3 */ public class ExpressionLabelProvider extends VariableLabelProvider { /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.model.elements.VariableLabelProvider#getForeground(org.eclipse.jface.viewers.TreePath, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.String) */ @Override protected RGB getForeground(TreePath elementPath, IPresentationContext presentationContext, String columnId) throws CoreException { Object element = elementPath.getLastSegment(); if (element instanceof IErrorReportingExpression) { IErrorReportingExpression expression = (IErrorReportingExpression) element; if (expression.hasErrors()) { if (columnId == null || columnId.equals(IDebugUIConstants.COLUMN_ID_VARIABLE_VALUE)) { return new RGB(255, 0, 0); } } } return super.getForeground(elementPath, presentationContext, columnId); } @Override protected String getLabel(TreePath elementPath, IPresentationContext context, String columnId) throws CoreException { if (columnId == null) { return super.getLabel(elementPath, context, columnId); } else { IExpression expression = (IExpression) elementPath.getLastSegment(); IValue value = expression.getValue(); return getColumnText(expression, value, context, columnId); } } /** * Returns text for a specific columns for the expression/value. * * @param expression expression to retrieve text for * @param value the value associated with the variable * @param context presentation context specifying how to display the text * @param columnId the column to get the text for * @return the label text * @throws CoreException Error while retrieving data from model. * * @since 3.6 */ private String getColumnText(IExpression expression, IValue value, IPresentationContext context, String columnId) throws CoreException { if (IDebugUIConstants.COLUMN_ID_VARIABLE_NAME.equals(columnId)) { return getExpressionName(expression, context); } else if (IDebugUIConstants.COLUMN_ID_VARIABLE_VALUE.equals(columnId)) { return getExpressionValueText(expression, value, context); } else if (IDebugUIConstants.COLUMN_ID_VARIABLE_TYPE.equals(columnId) || IDebugUIConstants.COLUMN_ID_VARIABLE_VALUE_TYPE.equals(columnId)) { if (value != null) { return getValueTypeName(null, value, context); } } return null; } /** * Returns the expression's text to show in the view's name column. * * @param expression expression to retrieve text for * @param context presentation context specifying how to display the text * @return Returns the expression's text to show in the view's name column. * @exception CoreException in an error occurs * @since 3.6 */ protected String getExpressionName(IExpression expression, IPresentationContext context) throws CoreException { if (expression instanceof IWatchExpression) { return getWatchExpressionName((IWatchExpression) expression, context); } return expression.getExpressionText(); } /** * Returns the watch expression's text to show in the view's name column. * * @param expression the expression * @param context associated presentation context * @return Returns the watch expression's text to show in the view's name column. * @since 3.6 */ private String getWatchExpressionName(IWatchExpression expression, IPresentationContext context) { StringBuffer result= new StringBuffer(); String snippet = expression.getExpressionText().trim(); StringBuffer snippetBuffer = new StringBuffer(); if (snippet.length() > 254) { snippetBuffer.append(snippet.substring(0, 127)); snippetBuffer.append(DebugUIMessages.DefaultLabelProvider_0); snippetBuffer.append(snippet.substring(snippet.length() - 127)); } else { snippetBuffer.append(snippet); } snippet = snippetBuffer.toString().replaceAll("[\n\r\t]+", " "); //$NON-NLS-1$//$NON-NLS-2$ result.append('"'); result.append(snippet); result.append('"'); return result.toString(); } /** * Returns the expression's value, or a message to show in the value column, * if the value is not available. * * @param expression expression to retrieve text for * @param value the value associated with the variable * @param context presentation context specifying how to display the text * @return string representing the expression's value * @throws CoreException Error while retrieving data from model. * * @since 3.6 */ protected String getExpressionValueText(IExpression expression, IValue value, IPresentationContext context) throws CoreException { if (expression instanceof IWatchExpression) { IWatchExpression watchExpression = (IWatchExpression)expression; StringBuffer result = new StringBuffer(); if (watchExpression.isPending() && value == null) { result.append(DebugUIMessages.DefaultLabelProvider_12); } else if (watchExpression.hasErrors()) { result.append(DebugUIMessages.DefaultLabelProvider_13); } else if (value != null) { result.append( getValueText(null, value, context) ); } if (!watchExpression.isEnabled()) { result.append(DebugUIMessages.DefaultLabelProvider_15); } return result.toString(); } if (value != null) { return getValueText(null, value, context); } return null; } }