/*******************************************************************************
* Copyright (c) 2000, 2008 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 net.sourceforge.phpdt.core.dom;
import net.sourceforge.phpdt.core.IAnnotation;
import net.sourceforge.phpdt.core.IJavaElement;
/**
* A binding represents a named entity in the Java language. The world of
* bindings provides an integrated picture of the structure of the program as
* seen from the compiler's point of view. This interface declare protocol
* common to the various different kinds of named entities in the Java language:
* packages, types, fields, methods, constructors, and local variables.
*
* @see IPackageBinding
* @see ITypeBinding
* @see IVariableBinding
* @see IMethodBinding
* @see IAnnotationBinding
* @see IMemberValuePairBinding
* @since 2.0
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IBinding {
/**
* Kind constant (value 1) indicating a package binding.
* Bindings of this kind can be safely cast to IPackageBinding
.
*
* @see #getKind()
* @see IPackageBinding
*/
public static final int PACKAGE = 1;
/**
* Kind constant (value 2) indicating a type binding.
* Bindings of this kind can be safely cast to ITypeBinding
.
*
* @see #getKind()
* @see ITypeBinding
*/
public static final int TYPE = 2;
/**
* Kind constant (value 3) indicating a field or local variable binding.
* Bindings of this kind can be safely cast to IVariableBinding
.
*
* @see #getKind()
* @see IVariableBinding
*/
public static final int VARIABLE = 3;
/**
* Kind constant (value 4) indicating a method or constructor binding.
* Bindings of this kind can be safely cast to IMethodBinding
.
*
* @see #getKind()
* @see IMethodBinding
*/
public static final int METHOD = 4;
/**
* Kind constant (value 5) indicating an annotation binding.
* Bindings of this kind can be safely cast to IAnnotationBinding
.
*
* @see #getKind()
* @see IAnnotationBinding
* @since 3.2
*/
public static final int ANNOTATION = 5;
/**
* Kind constant (value 6) indicating a member value pair binding.
* Bindings of this kind can be safely cast to IMemberValuePairBinding
.
*
* @see #getKind()
* @see IMemberValuePairBinding
* @since 3.2
*/
public static final int MEMBER_VALUE_PAIR = 6;
/**
* Return the resolved annotations associated with this binding.
*
PACKAGE
,
* TYPE
,
* VARIABLE
,
* METHOD
,
* ANNOTATION
,
* or MEMBER_VALUE_PAIR
.
* * Note that additional kinds might be added in the * future, so clients should not assume this list is exhaustive and * should program defensively, e.g. by having a reasonable default * in a switch statement. *
* @return one of the kind constants */ public int getKind(); /** * Returns the name of this binding. * Details of the name are specified with each specific kind of binding. * * @return the name of this binding */ public String getName(); /** * Returns the modifiers for this binding. *
* Note that deprecated is not included among the modifiers.
* Use isDeprecated
to find out whether a binding is deprecated.
*
Modifier
constants
* @see Modifier
*/
public int getModifiers();
/**
* Return whether this binding is for something that is deprecated.
* A deprecated class, interface, field, method, or constructor is one that
* is marked with the 'deprecated' tag in its Javadoc comment.
*
* @return true
if this binding is deprecated, and
* false
otherwise
*/
public boolean isDeprecated();
/**
* Return whether this binding is created because the bindings recovery is enabled. This binding is considered
* to be incomplete. Its internal state might be incomplete.
*
* @return true
if this binding is a recovered binding, and
* false
otherwise
* @since 3.3
*/
public boolean isRecovered();
/**
* Returns whether this binding is synthetic. A synthetic binding is one that
* was made up by the compiler, rather than something declared in the
* source code. Note that default constructors (the 0-argument constructor that
* the compiler generates for class declarations with no explicit constructors
* declarations) are not generally considered synthetic (although they
* may be if the class itself is synthetic).
* But see {@link IMethodBinding#isDefaultConstructor() IMethodBinding.isDefaultConstructor}
* for cases where the compiled-generated default constructor can be recognized
* instead.
*
* @return true
if this binding is synthetic, and
* false
otherwise
* @see IMethodBinding#isDefaultConstructor()
*/
public boolean isSynthetic();
/**
* Returns the Java element that corresponds to this binding.
* Returns null
if this binding has no corresponding
* Java element.
* * For array types, this method returns the Java element that corresponds * to the array's element type. For raw and parameterized types, this method * returns the Java element of the erasure. For annotations, this method * returns the Java element of the annotation (i.e. an {@link IAnnotation}). *
*
* Here are the cases where a null
should be expected:
*
null
.
*
*
* @return the Java element that corresponds to this binding,
* or null
if none
* @since 3.1
*/
public IJavaElement getJavaElement();
/**
* Returns the key for this binding.
* * Within a connected cluster of bindings (for example, all bindings * reachable from a given AST), each binding will have a distinct keys. * The keys are generated in a manner that is predictable and as * stable as possible. This last property makes these keys useful for * comparing bindings between disconnected clusters of bindings (for example, * the bindings between the "before" and "after" ASTs of the same * compilation unit). *
** The exact details of how the keys are generated is unspecified. * However, it is a function of the following information: *
Note that the key for member value pair bindings is
* not yet implemented. This returns null
for this kind of bindings.
* Recovered bindings have a unique key.
*
null
* @return true
if the given binding is the identical
* object as this binding, or if the keys of both bindings are the
* same string; false
if the given binding is
* null
, or if the bindings do not have the same key,
* or if one or both of the bindings have no key
* @see #getKey()
* @since 3.1
*/
public boolean isEqualTo(IBinding binding);
/**
* Returns a string representation of this binding suitable for debugging
* purposes only.
*
* @return a debug string
*/
public String toString();
}