Copyright (c) 2000, 2018 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
/******************************************************************************* * Copyright (c) 2000, 2018 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 *******************************************************************************/
package org.eclipse.jdt.core.util;
Description of a .class file. This class reifies the internal structure of a .class file following the JVM specifications.

Note that several changes were introduced with J2SE 1.5. Class file reader implementations should use support these new class file attributes by returning objects implementing the appropriate specialized attribute interfaces. Class file reader clients can search for these new attributes and downcast to the new interfaces as appropriate.

This interface may be implemented by clients.
Since:2.0
/** * Description of a .class file. This class reifies the internal structure of a .class * file following the JVM specifications. * <p> * Note that several changes were introduced with J2SE 1.5. * Class file reader implementations should use support these * new class file attributes by returning objects implementing * the appropriate specialized attribute interfaces. Class * file reader clients can search for these new attributes * and downcast to the new interfaces as appropriate. * </p> * * This interface may be implemented by clients. * * @since 2.0 */
public interface IClassFileReader {
This value should be used to read completely each part of a .class file.
/** * This value should be used to read completely each part of a .class file. */
int ALL = 0xFFFF;
This value should be used to read only the constant pool entries of a .class file.
/** * This value should be used to read only the constant pool entries of a .class file. */
int CONSTANT_POOL = 0x0001;
This value should be used to read the constant pool entries and the method infos of a .class file.
/** * This value should be used to read the constant pool entries and * the method infos of a .class file. */
int METHOD_INFOS = 0x0002 + CONSTANT_POOL;
This value should be used to read the constant pool entries and the field infos of a .class file.
/** * This value should be used to read the constant pool entries and * the field infos of a .class file. */
int FIELD_INFOS = 0x0004 + CONSTANT_POOL;
This value should be used to read the constant pool entries and the super interface names of a .class file.
/** * This value should be used to read the constant pool entries and * the super interface names of a .class file. */
int SUPER_INTERFACES = 0x0008 + CONSTANT_POOL;
This value should be used to read the constant pool entries and the attributes of a .class file.
/** * This value should be used to read the constant pool entries and * the attributes of a .class file. */
int CLASSFILE_ATTRIBUTES = 0x0010 + CONSTANT_POOL;
This value should be used to read the method bodies. It has to be used with METHOD_INFOS.
/** * This value should be used to read the method bodies. * It has to be used with METHOD_INFOS. */
int METHOD_BODIES = 0x0020;
This value should be used to read the whole contents of the .class file except the method bodies.
/** * This value should be used to read the whole contents of the .class file except the * method bodies. */
int ALL_BUT_METHOD_BODIES = ALL & ~METHOD_BODIES;
Answer back the access flags of the .class file.
Returns:the access flags of the .class file
/** * Answer back the access flags of the .class file. * * @return the access flags of the .class file */
int getAccessFlags();
Answer back the array of field infos of the .class file, an empty array if none.
Returns:the array of field infos of the .class file, an empty array if none
/** * Answer back the array of field infos of the .class file, * an empty array if none. * * @return the array of field infos of the .class file, an empty array if none */
IFieldInfo[] getFieldInfos();
Answer back the names of interfaces implemented by this .class file, an empty array if none. The names are returned as described in the JVM specifications.
Returns:the names of interfaces implemented by this .class file, an empty array if none
/** * Answer back the names of interfaces implemented by this .class file, * an empty array if none. The names are returned as described in the * JVM specifications. * * @return the names of interfaces implemented by this .class file, an empty array if none */
char[][] getInterfaceNames();
Answer back the indexes in the constant pool of interfaces implemented by this .class file, an empty array if none.
Returns:the indexes in the constant pool of interfaces implemented by this .class file, an empty array if none
/** * Answer back the indexes in the constant pool of interfaces implemented * by this .class file, an empty array if none. * * @return the indexes in the constant pool of interfaces implemented * by this .class file, an empty array if none */
int[] getInterfaceIndexes();
Answer back the inner classes attribute of this .class file, null if none.
Returns:the inner classes attribute of this .class file, null if none
/** * Answer back the inner classes attribute of this .class file, null if none. * * @return the inner classes attribute of this .class file, null if none */
IInnerClassesAttribute getInnerClassesAttribute();
Answer back the nest members attribute of this .class file, null if none.
Returns:the nest members attribute of this .class file, null if none
Since:3.16
/** * Answer back the nest members attribute of this .class file, null if none. * * @return the nest members attribute of this .class file, null if none * @since 3.16 */
default INestMembersAttribute getNestMembersAttribute() { return null; }
Answer back the array of method infos of this .class file, an empty array if none.
Returns:the array of method infos of this .class file, an empty array if none
/** * Answer back the array of method infos of this .class file, * an empty array if none. * * @return the array of method infos of this .class file, * an empty array if none */
IMethodInfo[] getMethodInfos();
Answer back the qualified name of the .class file. The name is returned as described in the JVM specifications.
Returns:the qualified name of the .class file
/** * Answer back the qualified name of the .class file. * The name is returned as described in the JVM specifications. * * @return the qualified name of the .class file */
char[] getClassName();
Answer back the index of the class name in the constant pool of the .class file.
Returns:the index of the class name in the constant pool
/** * Answer back the index of the class name in the constant pool * of the .class file. * * @return the index of the class name in the constant pool */
int getClassIndex();
Answer back the qualified name of the superclass of this .class file. The name is returned as described in the JVM specifications. Answer null if getSuperclassIndex() is zero.
Returns:the qualified name of the superclass of this .class file, null if getSuperclassIndex() is zero
/** * Answer back the qualified name of the superclass of this .class file. * The name is returned as described in the JVM specifications. Answer null if * getSuperclassIndex() is zero. * * @return the qualified name of the superclass of this .class file, null if getSuperclassIndex() is zero */
char[] getSuperclassName();
Answer back the index of the superclass name in the constant pool of the .class file. Answer 0 if this .class file represents java.lang.Object.
Returns:the index of the superclass name in the constant pool of the .class file, 0 if this .class file represents java.lang.Object.
/** * Answer back the index of the superclass name in the constant pool * of the .class file. Answer 0 if this .class file represents java.lang.Object. * * @return the index of the superclass name in the constant pool * of the .class file, 0 if this .class file represents java.lang.Object. */
int getSuperclassIndex();
Answer true if this .class file represents a class, false otherwise.
Returns:true if this .class file represents a class, false otherwise
/** * Answer true if this .class file represents a class, false otherwise. * * @return true if this .class file represents a class, false otherwise */
boolean isClass();
Answer true if this .class file represents an interface, false otherwise.
Returns:true if this .class file represents an interface, false otherwise
/** * Answer true if this .class file represents an interface, false otherwise. * * @return true if this .class file represents an interface, false otherwise */
boolean isInterface();
Answer the source file attribute, if it exists, null otherwise.
Returns:the source file attribute, if it exists, null otherwise
/** * Answer the source file attribute, if it exists, null otherwise. * * @return the source file attribute, if it exists, null otherwise */
ISourceAttribute getSourceFileAttribute();
Answer the constant pool of this .class file.
Returns:the constant pool of this .class file
/** * Answer the constant pool of this .class file. * * @return the constant pool of this .class file */
IConstantPool getConstantPool();
Answer the minor version of this .class file.
Returns:the minor version of this .class file
/** * Answer the minor version of this .class file. * * @return the minor version of this .class file */
int getMinorVersion();
Answer the major version of this .class file.
Returns:the major version of this .class file
/** * Answer the major version of this .class file. * * @return the major version of this .class file */
int getMajorVersion();
Answer back the attribute number of the .class file.
Returns:the attribute number of the .class file
/** * Answer back the attribute number of the .class file. * * @return the attribute number of the .class file */
int getAttributeCount();
Answer back the collection of all attributes of the field info. It includes SyntheticAttribute, ConstantValueAttributes, etc. Answers an empty array if none.
Returns:the collection of all attributes of the field info. It includes SyntheticAttribute, ConstantValueAttributes, etc. Answers an empty array if none
/** * Answer back the collection of all attributes of the field info. It * includes SyntheticAttribute, ConstantValueAttributes, etc. Answers an empty * array if none. * * @return the collection of all attributes of the field info. It * includes SyntheticAttribute, ConstantValueAttributes, etc. Answers an empty * array if none */
IClassFileAttribute[] getAttributes();
Answer back the magic number.
Returns:the magic number
/** * Answer back the magic number. * * @return the magic number */
int getMagic();
Answer back the number of field infos.
Returns:the number of field infos
/** * Answer back the number of field infos. * * @return the number of field infos */
int getFieldsCount();
Answer back the number of method infos.
Returns:the number of method infos
/** * Answer back the number of method infos. * * @return the number of method infos */
int getMethodsCount(); }