blob: 6da2907fd8baf686af5253b061c9ed4d21c9760b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2013 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
* Stephan Herrmann - Contribution for bug 186342 - [compiler][null] Using annotations for null checking
* Andy Clement (GoPivotal, Inc) aclement@gopivotal.com - Contributions for
* Bug 407191 - [1.8] Binary access support for type annotations
*******************************************************************************/
package org.eclipse.jdt.internal.compiler.env;
// clinit methods (synthetics too?) can be returned from IBinaryType>>getMethods()
// BUT do not have to be... the compiler will ignore them when building the binding.
// The synthetic argument of a member type's constructor (i.e. the first arg of a non-static
// member type) is also ignored by the compiler, BUT in this case it must be included
// in the constructor's signature.
public interface IBinaryMethod extends IGenericMethod {
/**
* Answer the runtime visible and invisible annotations for this method or null if none.
*/
IBinaryAnnotation[] getAnnotations();
/**
* Return {@link ClassSignature} for a Class {@link java.lang.Class}.
* Return {@link org.eclipse.jdt.internal.compiler.impl.Constant} for compile-time constant of primitive type, as well as String literals.
* Return {@link EnumConstantSignature} if value is an enum constant.
* Return {@link IBinaryAnnotation} for annotation type.
* Return {@link Object}[] for array type.
*
* @return default value of this annotation method
*/
Object getDefaultValue();
/**
* Answer the resolved names of the exception types in the
* class file format as specified in section 4.2 of the Java 2 VM spec
* or null if the array is empty.
*
* For example, java.lang.String is java/lang/String.
*/
char[][] getExceptionTypeNames();
/**
* Answer the receiver's MethodSignature, which describes the type parameters,
* parameter types, return type, and exception types
* as specified in "4.7.9.1 Signatures" of the Java SE 8 VM spec.
*/
char[] getGenericSignature();
/**
* Answer the receiver's method descriptor which describes the parameter &
* return types as specified in section 4.4.3 of the Java 2 VM spec.
*
* For example:
* - int foo(String) is (Ljava/lang/String;)I
* - Object[] foo(int) is (I)[Ljava/lang/Object;
*/
char[] getMethodDescriptor();
/**
* Answer the annotations on the <code>index</code>th parameter or null if none
* @param index the index of the parameter of interest
* @param classFileName (file) name of the declaring class for error reporting
*/
IBinaryAnnotation[] getParameterAnnotations(int index, char[] classFileName);
/**
* Answer the number of parameter annotations that can be retrieved
* using {@link #getParameterAnnotations(int, char[])}.
* @return one beyond the highest legal argument to {@link #getParameterAnnotations(int, char[])}.
*/
int getAnnotatedParametersCount();
/**
* Answer the name of the method.
*
* For a constructor, answer <init> & <clinit> for a clinit method.
*/
char[] getSelector();
/**
* Answer the tagbits set according to the bits for annotations.
*/
long getTagBits();
/**
* Answer whether the receiver represents a class initializer method.
*/
boolean isClinit();
/**
* Answer the type annotations on this method.
*/
IBinaryTypeAnnotation[] getTypeAnnotations();
}