org.eclipse.jdt.core.IMethod Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2000, 2014 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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 null
if this method's parent is
* not an annotation type, or else if this method does not have a default value.
*
* Note that {@link IMemberValuePair#getValue()} might return null
.
* Please see this method for more details.
*
*
* @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 null
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 "<init>"
).
* For the class initialization methods in binary types, this returns
* the special name "<clinit>"
.
* This is a handle-only method.
* @return the simple name of this method
*/
@Override
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.
*
* For example, a source method declaring "throws IOException"
,
* would return the array {"QIOException;"}
.
*
*
* 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.
*
*
* @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.
*
* The formal type parameter signatures may be either unresolved (for source
* types) or resolved (for binary types). See {@link Signature} for details.
*
*
* @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 parameters of this method.
* An empty array is returned, if the method has no parameters.
* For binary types, associated source is used to retrieve the {@link ILocalVariable#getNameRange() name range},
* {@link ILocalVariable#getSourceRange() source range} and the {@link ILocalVariable#getFlags() flags}.
* These local variables can be used to retrieve the {@link ILocalVariable#getAnnotations() parameter annotations}.
*
* @return the parameters of this method
* @throws JavaModelException if this element does not exist or if an
* exception occurs while accessing its corresponding resource.
* @since 3.7
*/
ILocalVariable[] getParameters() throws JavaModelException;
/**
* 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
* - the actual return type for references to {@link Object#getClass() Object.getClass()}
* - the actual parameter types and return type for references to signature polymorphic methods from class MethodHandle
*
*
* If the given method is not resolved, the returned key is simply the java element's key.
*
* @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.
*
* For example, a method declared as public void foo(String text, int length)
* would return the array {"text","length"}
.
*
*
* @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.
*
* For example, a source method declared as public void foo(String text, int length)
* would return the array {"QString;","I"}
.
*
*
* 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.
*
*
* @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.
*
* For example, a method declared as public void foo(String text, int length)
* would return the array {"text","length"}
. For the same method in a
* binary, this would return {"arg0", "arg1"}
.
*
*
* @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.
*
* For example, a source method declared as public String getName()
* would return "QString;"
.
*
*
* 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.
*
*
* @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.
*
* For example, a source method declared as public void foo(String text, int length)
* would return "(QString;I)V"
.
*
*
* 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.
*
*
* @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:
*
* - its name is equal to
"main"
* - its return type is
void
* - it is
static
and public
* - it defines one parameter whose type's simple name is
String[]
*
*
* @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 is a main method candidate.
* It is a main method if:
*
* - its name is equal to
"main"
* - its return type is
void
* - it is
static
and public
* - it defines one parameter whose type's simple name is
String[]
*
* Starting with Java 21 there is "preview feature" that allows instance main methods.
* It is a main method according to this JEP if:
*
* - its name is equal to
"main"
* - its return type is
void
* - it is non-
private
* - it defines one parameter whose type's simple name is
String[]
or no parameter at all
*
*
* @exception JavaModelException if this element does not exist or if an
* exception occurs while accessing its corresponding resource.
* @since 3.36
* @return true if this method is a main method, false otherwise
*/
boolean isMainMethodCandidate() throws JavaModelException;
/**
* Returns whether this method represents a lambda expression.
*
* @since 3.10
* @return true if this method represents a lambda expression, false otherwise.
*/
boolean isLambdaMethod();
/**
* 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:
*
* - their element names are equal
* - they have the same number of parameters
* - the simple names of their parameter types are equal
*
* 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);
}