/******************************************************************************* * 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. * * * @return the list of resolved annotations, or the empty list if there are no * annotations associated with the object * @since 3.2 */ public IAnnotationBinding[] getAnnotations(); /** * Returns the kind of bindings this is. That is one of the kind constants: * 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. *

* * @return the bit-wise or of 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: *

* For all other kind of type, method, variable, annotation and package bindings, * this method returns non-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. *

* * @return the key for this binding */ public String getKey(); /** * There is no special definition of equality for bindings; equality is * simply object identity. Within the context of a single cluster of * bindings, each binding is represented by a distinct object. However, * between different clusters of bindings, the binding objects may or may * not be different; in these cases, the client should compare bindings * using {@link #isEqualTo(IBinding)}, which checks their keys. * * @param obj {@inheritDoc} * @return {@inheritDoc} */ public boolean equals(Object obj); /** * Returns whether this binding has the same key as that of the given * binding. Within the context of a single cluster of bindings, each * binding is represented by a distinct object. However, between * different clusters of bindings, the binding objects may or may * not be different objects; in these cases, the binding keys * are used where available. * * @param binding the other binding, or 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(); }