| /******************************************************************************* |
| * Copyright (c) 2000, 2015 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 |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.debug.core.logicalstructures; |
| |
| import org.eclipse.core.runtime.PlatformObject; |
| import org.eclipse.debug.core.DebugException; |
| import org.eclipse.debug.core.ILaunch; |
| import org.eclipse.debug.core.model.IDebugTarget; |
| import org.eclipse.debug.core.model.IValue; |
| import org.eclipse.jdt.debug.core.IJavaModifiers; |
| import org.eclipse.jdt.debug.core.IJavaType; |
| import org.eclipse.jdt.debug.core.IJavaValue; |
| import org.eclipse.jdt.debug.core.IJavaVariable; |
| |
| /** |
| * Encapsulates a name and a value. Used when a variable is required (such as |
| * for the VariablesView), but we only have a value available (such as the |
| * result of an evaluation for an object browser). |
| * |
| * @since 3.0 |
| */ |
| public class JDIPlaceholderVariable extends PlatformObject implements |
| IJavaVariable { |
| |
| private String fName; |
| private IJavaValue fValue; |
| |
| /** |
| * When created for a logical structure we hold onto the original |
| * non-logical value for purposes of equality. This way a logical |
| * structure's children remain more stable in the variables view. |
| * |
| * This is <code>null</code> when not created for a logical structure. |
| */ |
| private IJavaValue fLogicalParent; |
| |
| public JDIPlaceholderVariable(String name, IJavaValue value) { |
| fName = name; |
| fValue = value; |
| } |
| |
| /** |
| * Constructs a place holder with the given name and value originating from |
| * the specified logical parent. |
| * |
| * @param name |
| * variable name |
| * @param value |
| * variable value |
| * @param logicalParent |
| * original value this value is a logical child for or |
| * <code>null</code> if none |
| */ |
| public JDIPlaceholderVariable(String name, IJavaValue value, |
| IJavaValue logicalParent) { |
| this(name, value); |
| fLogicalParent = logicalParent; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaVariable#getSignature() |
| */ |
| @Override |
| public String getSignature() throws DebugException { |
| return ((IJavaValue) getValue()).getSignature(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaVariable#getGenericSignature() |
| */ |
| @Override |
| public String getGenericSignature() throws DebugException { |
| return ((IJavaValue) getValue()).getGenericSignature(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaVariable#getJavaType() |
| */ |
| @Override |
| public IJavaType getJavaType() throws DebugException { |
| return ((IJavaValue) getValue()).getJavaType(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaVariable#isLocal() |
| */ |
| @Override |
| public boolean isLocal() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IVariable#getValue() |
| */ |
| @Override |
| public IValue getValue() { |
| return fValue; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IVariable#getName() |
| */ |
| @Override |
| public String getName() { |
| return fName; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName() |
| */ |
| @Override |
| public String getReferenceTypeName() throws DebugException { |
| return ((IJavaValue) getValue()).getReferenceTypeName(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IVariable#hasValueChanged() |
| */ |
| @Override |
| public boolean hasValueChanged() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isPublic() |
| */ |
| @Override |
| public boolean isPublic() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isPrivate() |
| */ |
| @Override |
| public boolean isPrivate() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isProtected() |
| */ |
| @Override |
| public boolean isProtected() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isPackagePrivate() |
| */ |
| @Override |
| public boolean isPackagePrivate() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isFinal() |
| */ |
| @Override |
| public boolean isFinal() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isStatic() |
| */ |
| @Override |
| public boolean isStatic() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jdt.debug.core.IJavaModifiers#isSynthetic() |
| */ |
| @Override |
| public boolean isSynthetic() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier() |
| */ |
| @Override |
| public String getModelIdentifier() { |
| return getValue().getModelIdentifier(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget() |
| */ |
| @Override |
| public IDebugTarget getDebugTarget() { |
| return ((IJavaValue) getValue()).getDebugTarget(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.debug.core.model.IDebugElement#getLaunch() |
| */ |
| @Override |
| public ILaunch getLaunch() { |
| return getValue().getLaunch(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String |
| * ) |
| */ |
| @Override |
| public void setValue(String expression) { |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse. |
| * debug.core.model.IValue) |
| */ |
| @Override |
| public void setValue(IValue value) { |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.debug.core.model.IValueModification#supportsValueModification |
| * () |
| */ |
| @Override |
| public boolean supportsValueModification() { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang |
| * .String) |
| */ |
| @Override |
| public boolean verifyValue(String expression) { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse |
| * .debug.core.model.IValue) |
| */ |
| @Override |
| public boolean verifyValue(IValue value) { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) |
| */ |
| @Override |
| @SuppressWarnings("unchecked") |
| public <T> T getAdapter(Class<T> adapter) { |
| if (IJavaVariable.class.equals(adapter) |
| || IJavaModifiers.class.equals(adapter)) { |
| return (T) this; |
| } |
| return super.getAdapter(adapter); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Object#equals(java.lang.Object) |
| */ |
| @Override |
| public boolean equals(Object obj) { |
| if (obj instanceof JDIPlaceholderVariable) { |
| JDIPlaceholderVariable var = (JDIPlaceholderVariable) obj; |
| if (fLogicalParent != null) { |
| return var.getName().equals(getName()) |
| && fLogicalParent.equals(var.fLogicalParent); |
| } |
| return var.getName().equals(getName()) |
| && var.getValue().equals(getValue()); |
| } |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Object#hashCode() |
| */ |
| @Override |
| public int hashCode() { |
| if (fLogicalParent != null) { |
| return fLogicalParent.hashCode() + fName.hashCode(); |
| } |
| return fName.hashCode() + fValue.hashCode(); |
| } |
| |
| } |