| /******************************************************************************* |
| * Copyright (c) 2008, 2012 Wind River Systems, Inc. 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: |
| * Markus Schorn - initial API and implementation |
| * Sergey Prigogin (Google) |
| *******************************************************************************/ |
| package org.eclipse.cdt.core.dom.ast; |
| |
| import org.eclipse.cdt.core.parser.util.CharArrayUtils; |
| import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; |
| import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; |
| import org.eclipse.core.runtime.CoreException; |
| |
| /** |
| * Models a value of a variable, enumerator or expression. |
| * |
| * @noextend This interface is not intended to be extended by clients. |
| * @noimplement This interface is not intended to be implemented by clients. |
| * @since 5.1 |
| */ |
| public interface IValue { |
| /** |
| * Returns the value as a Long number, or {@code null} if it is not possible. |
| * @deprecated Use numberValue() instead. |
| */ |
| @Deprecated |
| default Long numericalValue() { |
| Number num = numberValue(); |
| return num instanceof Long ? (Long) num : null; |
| } |
| |
| /** |
| * Returns the value as a number, or {@code null} if it is not possible. |
| * @since 6.2 |
| */ |
| Number numberValue(); |
| |
| /** |
| * If this value consists of sub-values, returns the number of these sub-values. Otherwise returns 1. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| int numberOfSubValues(); |
| |
| /** |
| * If this value consists of sub-values, returns the sub-value at the given index. |
| * Otherwise, returns this value (represented as an ICPPEvaluation) if the index 0 is passed. |
| * EvalFixed.INCOMPLETE is returned if the given index is out of bounds. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| ICPPEvaluation getSubValue(int index); |
| |
| /** |
| * If this value consists of sub-values, returns an array containing all of them. |
| * Otherwise, returns an array containing 1 element representing this value. |
| * Not all implementations implement this; some may return {@code null}. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| ICPPEvaluation[] getAllSubValues(); |
| |
| /** |
| * Returns the evaluation object if this value cannot be represented as a single numerical value, or |
| * {@code null} otherwise. This can happen if the value is dependent, or it's a composite value. |
| * If {@link #numberValue()} returns {@code null}, {@link #getEvaluation()} returns |
| * not {@code null} and vice versa. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| ICPPEvaluation getEvaluation(); |
| |
| /** |
| * Returns a signature uniquely identifying the value. Two values with identical |
| * signatures are guaranteed to be equal. |
| */ |
| char[] getSignature(); |
| |
| /** |
| * @deprecated Returns an empty character array. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| @Deprecated |
| public default char[] getInternalExpression() { |
| return CharArrayUtils.EMPTY_CHAR_ARRAY; |
| } |
| |
| /** |
| * @deprecated Returns an empty array. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| @Deprecated |
| public default IBinding[] getUnknownBindings() { |
| return IBinding.EMPTY_BINDING_ARRAY; |
| } |
| |
| /** |
| * If this value consists of sub-values, set the sub-value at the given position to the given new value. |
| * Otherwise, set this value to the given new value. |
| * Not all implementations implement this; for some, a call to this may have no effect. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| void setSubValue(int position, ICPPEvaluation newValue); |
| |
| /** |
| * Make a deep copy of this value. |
| * @since 6.2 |
| */ |
| IValue clone(); |
| |
| /** |
| * Serialize this value to the given type marshal buffer. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| void marshal(ITypeMarshalBuffer buffer) throws CoreException; |
| |
| /** |
| * Returns true if this value is equivalent to 'other' for declaration matching purposes. |
| * @noreference This method is not intended to be referenced by clients. |
| */ |
| boolean isEquivalentTo(IValue other); |
| } |