/******************************************************************************* * Copyright (c) 2000, 2010 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 * IBM Corporation - added J2SE 1.5 support *******************************************************************************/ package org.eclipse.jdt.core; /** * Represents a method (or constructor) declared in a type. * * @noimplement This interface is not intended to be implemented by clients. */ public interface IMethod extends IMember, IAnnotatable { /** * Returns a {@link IMemberValuePair member value pair} representing the default value of this * method if any, or <code>null</code> if this method's parent is not an annotation type, or * else if this method does not have a default value. * <p> * Note that {@link IMemberValuePair#getValue()} might return <code>null</code>. Please see this * method for more details. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return a member pair value if any, or <code>null</code> if none * @since 3.4 */ IMemberValuePair getDefaultValue() throws JavaModelException; /** * Returns the simple name of this method. For a constructor, this returns the simple name of * the declaring type. Note: This holds whether the constructor appears in a source or binary * type (even though class files internally define constructor names to be * <code>"<init>"</code>). For the class initialization methods in binary types, this * returns the special name <code>"<clinit>"</code>. This is a handle-only method. * * @return the simple name of this method */ String getElementName(); /** * Returns the type signatures of the exceptions this method throws, in the order declared in * the source. Returns an empty array if this method throws no exceptions. * <p> * For example, a source method declaring <code>"throws IOException"</code>, would return the * array <code>{"QIOException;"}</code>. * </p> * <p> * The type signatures may be either unresolved (for source types) or resolved (for binary * types), and either basic (for basic types) or rich (for parameterized types). See * {@link Signature} for details. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the type signatures of the exceptions this method throws, in the order declared in * the source, an empty array if this method throws no exceptions * @see Signature */ String[] getExceptionTypes() throws JavaModelException; /** * Returns the formal type parameter signatures for this method. Returns an empty array if this * method has no formal type parameters. * <p> * The formal type parameter signatures may be either unresolved (for source types) or resolved * (for binary types). See {@link Signature} for details. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the formal type parameter signatures of this method, in the order declared in the * source, an empty array if none * @see Signature * @since 3.0 * @deprecated Use {@link #getTypeParameters()} instead */ String[] getTypeParameterSignatures() throws JavaModelException; /** * Returns the formal type parameters for this method. Returns an empty array if this method has * no formal type parameters. * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the formal type parameters of this method, in the order declared in the source, an * empty array if none * @since 3.1 */ ITypeParameter[] getTypeParameters() throws JavaModelException; /** * Returns the number of parameters of this method. This is a handle-only method. * * @return the number of parameters of this method */ int getNumberOfParameters(); /** * Returns the binding key for this method only if the given method is {@link #isResolved() * resolved}. A binding key is a key that uniquely identifies this method. It allows access to * generic info for parameterized methods. * * <p> * If the given method is not resolved, the returned key is simply the java element's key. * </p> * * @return the binding key for this method * @see org.eclipse.jdt.core.dom.IBinding#getKey() * @see BindingKey * @see #isResolved() * @since 3.1 */ String getKey(); /** * Returns the names of parameters in this method. For binary types, associated source or * attached Javadoc are used to retrieve the names. If none can be retrieved, then these names * are invented as "arg"+i, where i starts at 0. Returns an empty array if this method has no * parameters. * * <p> * For example, a method declared as <code>public void foo(String text, int length)</code> would * return the array <code>{"text","length"}</code>. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the names of parameters in this method, an empty array if this method has no * parameters */ String[] getParameterNames() throws JavaModelException; /** * Returns the type signatures for the parameters of this method. Returns an empty array if this * method has no parameters. This is a handle-only method. * <p> * For example, a source method declared as * <code>public void foo(String text, int length)</code> would return the array * <code>{"QString;","I"}</code>. * </p> * <p> * The type signatures may be either unresolved (for source types) or resolved (for binary * types), and either basic (for basic types) or rich (for parameterized types). See * {@link Signature} for details. * </p> * * @return the type signatures for the parameters of this method, an empty array if this method * has no parameters * @see Signature */ String[] getParameterTypes(); /** * Returns the names of parameters in this method. For binary types, these names are invented as * "arg"+i, where i starts at 0 (even if source is associated with the binary or if Javdoc is * attached to the binary). Returns an empty array if this method has no parameters. * * <p> * For example, a method declared as <code>public void foo(String text, int length)</code> would * return the array <code>{"text","length"}</code>. For the same method in a binary, this would * return <code>{"arg0", "arg1"}</code>. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the names of parameters in this method, an empty array if this method has no * parameters * @since 3.2 */ String[] getRawParameterNames() throws JavaModelException; /** * Returns the type signature of the return value of this method. For constructors, this returns * the signature for void. * <p> * For example, a source method declared as <code>public String getName()</code> would return * <code>"QString;"</code>. * </p> * <p> * The type signature may be either unresolved (for source types) or resolved (for binary * types), and either basic (for basic types) or rich (for parameterized types). See * {@link Signature} for details. * </p> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @return the type signature of the return value of this method, void for constructors * @see Signature */ String getReturnType() throws JavaModelException; /** * Returns the signature of this method. This includes the signatures for the parameter types * and return type, but does not include the method name, exception types, or type parameters. * <p> * For example, a source method declared as * <code>public void foo(String text, int length)</code> would return * <code>"(QString;I)V"</code>. * </p> * <p> * The type signatures embedded in the method signature may be either unresolved (for source * types) or resolved (for binary types), and either basic (for basic types) or rich (for * parameterized types). See {@link Signature} for details. * </p> * * @return the signature of this method * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @see Signature */ String getSignature() throws JavaModelException; /** * Returns the type parameter declared in this method with the given name. This is a handle-only * method. The type parameter may or may not exist. * * @param name the given simple name * @return the type parameter declared in this method with the given name * @since 3.1 */ ITypeParameter getTypeParameter(String name); /** * Returns whether this method is a constructor. * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * * @return true if this method is a constructor, false otherwise */ boolean isConstructor() throws JavaModelException; /** * Returns whether this method is a main method. It is a main method if: * <ul> * <li>its name is equal to <code>"main"</code></li> * <li>its return type is <code>void</code></li> * <li>it is <code>static</code> and <code>public</code></li> * <li>it defines one parameter whose type's simple name is <code>String[]</code></li> * </ul> * * @exception JavaModelException if this element does not exist or if an exception occurs while * accessing its corresponding resource. * @since 2.0 * @return true if this method is a main method, false otherwise */ boolean isMainMethod() throws JavaModelException; /** * Returns whether this method represents a resolved method. If a method is resolved, its key * contains resolved information. * * @return whether this method represents a resolved method. * @since 3.1 */ boolean isResolved(); /** * Returns whether this method is similar to the given method. Two methods are similar if: * <ul> * <li>their element names are equal</li> * <li>they have the same number of parameters</li> * <li>the simple names of their parameter types are equal</li> * </ul> * This is a handle-only method. * * @param method the given method * @return true if this method is similar to the given method. * @see Signature#getSimpleName(char[]) * @since 2.0 */ boolean isSimilar(IMethod method); }