blob: 371689c8d0b77ba596989f06e5eba3611609385a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2014 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Wind Rvier Systems - added support for columns (bug 235646)
* Ralf M Petter <ralf.petter@gmail.com> - (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 {
@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) {
StringBuilder result= new StringBuilder();
String snippet = expression.getExpressionText().trim();
StringBuilder snippetBuffer = new StringBuilder();
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;
StringBuilder result = new StringBuilder();
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;
}
}