Package org.codehaus.janino

# Class IClass

java.lang.Object
org.codehaus.janino.IClass

All Implemented Interfaces:
  `IType`, `ITypeVariableOrIClass`

Direct Known Subclasses:
  `ClassFileIClass`

public abstract class IClass extends Object implements ITypeVariableOrIClass
A simplified equivalent to "java.lang.reflect".

'JLS7' means a reference to the Java Language Specification, Java SE 7 Edition.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`IClass.IAnnotation`
Representation of a Java "annotation".
`class`
`IClass.IConstructor`
Representation of a constructor of an `IClass`.
`class`
`IClass.IField`
Representation of a field of this `IClass`.
`class`
`IClass.IInvocable`
Base class for `IClass.IConstructor` and `IClass.IMethod`.
`static interface`
`IClass.IMember`
Base for the members of an `IClass`.
`class`
`IClass.IMethod`
Representation of a method in an `IClass`.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final IClass`
`BOOLEAN`
The `IClass` object for the primitive type BOOLEAN.
`static final IClass`
`BYTE`
The `IClass` object for the primitive type BYTE.
`static final IClass`
`CHAR`
The `IClass` object for the primitive type CHAR.
`static final IClass`
`DOUBLE`
The `IClass` object for the primitive type DOUBLE.
`static final IClass`
`FLOAT`
The `IClass` object for the primitive type FLOAT.
`static final IClass`
`INT`
The `IClass` object for the primitive type INT.
`static final IClass`
`LONG`
The `IClass` object for the primitive type LONG.
`static final IClass.IAnnotation[]`
`NO_ANNOTATIONS`
Array of zero `IClass.IAnnotation`s.
`static final Object`
`NOT_CONSTANT`
Special return value for `IClass.IField.getConstantValue()` indicating that the field does not have a constant value.
`static final IClass`
`NULL`
The `IClass` of the `null` literal.
`static final IClass`
`SHORT`
The `IClass` object for the primitive type SHORT.
`static final IClass`
`VOID`
The `IClass` object for the type VOID.

## Constructor Summary

Constructors
Constructor
Description
`IClass()`

## Method Summary

Modifier and Type
Method
Description
`protected void`
`clearIFieldCaches()`
Clears the cache of declared fields which this class maintains in order to minimize the invocations of `getDeclaredIFields2()`.
`final IClass.IConstructor`
`findIConstructor(IClass[] parameterTypes)`
`final IClass.IMethod`
`findIMethod(String methodName, IClass[] parameterTypes)`
`abstract Access`
`getAccess()`
`final IClass`
`getComponentType()`
`protected abstract IClass`
`getComponentType2()`
`final IClass[]`
`getDeclaredIClasses()`
Returns the classes and interfaces declared as members of the class (but not inherited classes and interfaces).
`protected abstract IClass[]`
`getDeclaredIClasses2()`
`final IClass.IConstructor[]`
`getDeclaredIConstructors()`
Returns all the constructors declared by the class represented by the type.
`protected abstract IClass.IConstructor[]`
`getDeclaredIConstructors2()`
The uncached version of `getDeclaredIConstructors()` which must be implemented by derived classes.
`final IClass.IField`
`getDeclaredIField(String name)`
Returns the named `IClass.IField` declared in this `IClass` (does not work for inherited fields).
`final IClass.IField[]`
`getDeclaredIFields()`
Returns the `IClass.IField`s declared in this `IClass` (but not inherited fields).
`protected abstract IClass.IField[]`
`getDeclaredIFields2()`
Uncached version of `getDeclaredIFields()`.
`final IClass.IMethod[]`
`getDeclaredIMethods()`
Returns the methods of the class or interface (but not inherited methods).
`final IClass.IMethod[]`
`getDeclaredIMethods(String methodName)`
Returns all methods with the given name declared in the class or interface (but not inherited methods).
`protected abstract IClass.IMethod[]`
`getDeclaredIMethods2()`
The uncached version of `getDeclaredIMethods()` which must be implemented by derived classes.
`final IClass`
`getDeclaringIClass()`
`protected abstract IClass`
`getDeclaringIClass2()`
`final String`
`getDescriptor()`
Returns the field descriptor for the type as defined by JVMS 4.3.2.
`protected abstract String`
`getDescriptor2()`
`static String[]`
`getDescriptors(IClass[] iClasses)`
Convenience method that determines the field descriptors of an array of `IClass`es.
`final IClass.IAnnotation[]`
`getIAnnotations()`
`protected IClass.IAnnotation[]`
`getIAnnotations2()`
`final IClass.IMethod[]`
`getIMethods()`
Returns all methods declared in the class or interface, its superclasses and its superinterfaces.
`final IClass[]`
`getInterfaces()`
Returns the interfaces implemented by the class, respectively the superinterfaces of the interface, respectively `{` `Cloneable``,` `Serializable` `}` for arrays.
`protected abstract IClass[]`
`getInterfaces2()`
`final ITypeVariable[]`
`getITypeVariables()`
`protected abstract ITypeVariable[]`
`getITypeVariables2()`
The uncached version of `getDeclaredIConstructors()` which must be implemented by derived classes.
`final IClass`
`getOuterIClass()`
The following types have an "outer class": Anonymous classes declared in a non-static method of a class Local classes declared in a non-static method of a class Non-static member classes
`protected abstract IClass`
`getOuterIClass2()`
`final IClass`
`getSuperclass()`
Returns the superclass of the class.
`protected abstract IClass`
`getSuperclass2()`
`IClass.IField[]`
`getSyntheticIFields()`
`final boolean`
`hasIMethod(String methodName, IClass[] parameterTypes)`
`boolean`
`implementsInterface(IClass that)`
If `this` represents a class: Return `true` if this class directly or indirectly implements `that` interface.
`void`
`invalidateMethodCaches()`
This class caches the declared methods in order to minimize the invocations of `getDeclaredIMethods2()`.
`abstract boolean`
`isAbstract()`
Whether the class may be instantiated (JVMS 4.1 access_flags).
`abstract boolean`
`isArray()`
`boolean`
`isAssignableFrom(IClass that)`
Determines if `this` is assignable from that.
`abstract boolean`
`isEnum()`
`abstract boolean`
`isFinal()`
Whether subclassing is allowed (JVMS 4.1 access_flags)
`abstract boolean`
`isInterface()`
`abstract boolean`
`isPrimitive()`
`abstract boolean`
`isPrimitiveNumeric()`
`boolean`
`isSubclassOf(IClass that)`
Returns `true` if this class is an immediate or non-immediate subclass of `that` class.
`static IClass`
`rawTypeOf(IType type)`
`String`
`toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Field Details

### NOT_CONSTANT

public static final Object NOT_CONSTANT
Special return value for `IClass.IField.getConstantValue()` indicating that the field does not have a constant value.

### NULL

public static final IClass NULL
The `IClass` of the `null` literal.

### VOID

public static final IClass VOID
The `IClass` object for the type VOID.

### BYTE

public static final IClass BYTE
The `IClass` object for the primitive type BYTE.

### CHAR

public static final IClass CHAR
The `IClass` object for the primitive type CHAR.

### DOUBLE

public static final IClass DOUBLE
The `IClass` object for the primitive type DOUBLE.

### FLOAT

public static final IClass FLOAT
The `IClass` object for the primitive type FLOAT.

### INT

public static final IClass INT
The `IClass` object for the primitive type INT.

### LONG

public static final IClass LONG
The `IClass` object for the primitive type LONG.

### SHORT

public static final IClass SHORT
The `IClass` object for the primitive type SHORT.

### BOOLEAN

public static final IClass BOOLEAN
The `IClass` object for the primitive type BOOLEAN.

### NO_ANNOTATIONS

public static final IClass.IAnnotation[] NO_ANNOTATIONS
Array of zero `IClass.IAnnotation`s.

## Constructor Details

### IClass

public IClass()

## Method Details

### getITypeVariables

public final ITypeVariable[] getITypeVariables() throws CompileException

Returns:
  Zero-length array if this `IClass` declares no type variables
Throws:
  `CompileException`

### getITypeVariables2

protected abstract ITypeVariable[] getITypeVariables2() throws CompileException
The uncached version of `getDeclaredIConstructors()` which must be implemented by derived classes.

Throws:
  `CompileException`

### getDeclaredIConstructors

public final IClass.IConstructor[] getDeclaredIConstructors()
Returns all the constructors declared by the class represented by the type. If the class has a default constructor, it is included.

Returns an array with zero elements for an interface, array, primitive type or `void`.

### getDeclaredIConstructors2

protected abstract IClass.IConstructor[] getDeclaredIConstructors2()
The uncached version of `getDeclaredIConstructors()` which must be implemented by derived classes.

### getDeclaredIMethods

public final IClass.IMethod[] getDeclaredIMethods()
Returns the methods of the class or interface (but not inherited methods). For covariant methods, only the method with the most derived return type is included.

Returns an empty array for an array, primitive type or `void`.

### getDeclaredIMethods2

protected abstract IClass.IMethod[] getDeclaredIMethods2()
The uncached version of `getDeclaredIMethods()` which must be implemented by derived classes.

### getDeclaredIMethods

public final IClass.IMethod[] getDeclaredIMethods(String methodName)
Returns all methods with the given name declared in the class or interface (but not inherited methods).

Returns an empty array if no methods with that name are declared.

Returns:
  an array of `IClass.IMethod`s that must not be modified

### getIMethods

public final IClass.IMethod[] getIMethods() throws CompileException
Returns all methods declared in the class or interface, its superclasses and its superinterfaces.

Returns:
  an array of `IClass.IMethod`s that must not be modified
Throws:
  `CompileException`

### hasIMethod

public final boolean hasIMethod(String methodName, IClass[] parameterTypes) throws CompileException

Returns:
  Whether this `IClass` (or its superclass or the interfaces it implements) has an `IClass.IMethod` with the given name and parameter types
Throws:
  `CompileException`

### findIMethod

@Nullable public final IClass.IMethod findIMethod(String methodName, IClass[] parameterTypes) throws CompileException

Returns:
  The `IClass.IMethod` declared in this `IClass` (or its superclass or the interfaces it implements) with the given name and parameter types, or `null` if an applicable method could not be found
Throws:
  `CompileException`

### findIConstructor

@Nullable public final IClass.IConstructor findIConstructor(IClass[] parameterTypes) throws CompileException

Returns:
  The `IClass.IConstructor` declared in this `IClass` with the given parameter types, or `null` if an applicable constructor could not be found
Throws:
  `CompileException`

### getDeclaredIFields

public final IClass.IField[] getDeclaredIFields()
Returns the `IClass.IField`s declared in this `IClass` (but not inherited fields).

Returns:
  An empty array for an array, primitive type or `void`

### getDeclaredIField

@Nullable public final IClass.IField getDeclaredIField(String name)
Returns the named `IClass.IField` declared in this `IClass` (does not work for inherited fields).

Returns:
  `null` iff this `IClass` does not declare an `IClass.IField` with that name

### clearIFieldCaches

protected void clearIFieldCaches()
Clears the cache of declared fields which this class maintains in order to minimize the invocations of `getDeclaredIFields2()`.

### getDeclaredIFields2

protected abstract IClass.IField[] getDeclaredIFields2()
Uncached version of `getDeclaredIFields()`.

### getSyntheticIFields

public IClass.IField[] getSyntheticIFields()

Returns:
  The synthetic fields of an anonymous or local class, in the order in which they are passed to all constructors

### getDeclaredIClasses

public final IClass[] getDeclaredIClasses() throws CompileException
Returns the classes and interfaces declared as members of the class (but not inherited classes and interfaces).

Returns an empty array for an array, primitive type or `void`.

Throws:
  `CompileException`

### getDeclaredIClasses2

protected abstract IClass[] getDeclaredIClasses2() throws CompileException

Returns:
  The member types of this type
Throws:
  `CompileException`

### getDeclaringIClass

@Nullable public final IClass getDeclaringIClass() throws CompileException

Returns:
  If this class is a member class, the declaring class, otherwise `null`
Throws:
  `CompileException`

### getDeclaringIClass2

@Nullable protected abstract IClass getDeclaringIClass2() throws CompileException

Returns:
  If this class is a member class, the declaring class, otherwise `null`
Throws:
  `CompileException`

### getOuterIClass

@Nullable public final IClass getOuterIClass() throws CompileException
The following types have an "outer class":

- Anonymous classes declared in a non-static method of a class
- Local classes declared in a non-static method of a class
- Non-static member classes

Returns:
  The outer class of this type, or `null`
Throws:
  `CompileException`

### getOuterIClass2

@Nullable protected abstract IClass getOuterIClass2() throws CompileException

Throws:
  `CompileException`
See Also:
  - `getOuterIClass()`

### getSuperclass

@Nullable public final IClass getSuperclass() throws CompileException
Returns the superclass of the class.

Returns `null` for class `Object`, interfaces, arrays, primitive types and `void`.

Throws:
  `CompileException`

### getSuperclass2

@Nullable protected abstract IClass getSuperclass2() throws CompileException

Throws:
  `CompileException`
See Also:
  - `getSuperclass()`

### getAccess

public abstract Access getAccess()

Returns:
  The accessibility of this type

### isFinal

public abstract boolean isFinal()
Whether subclassing is allowed (JVMS 4.1 access_flags)

Returns:
  `true` if subclassing is prohibited

### getInterfaces

public final IClass[] getInterfaces() throws CompileException
Returns the interfaces implemented by the class, respectively the superinterfaces of the interface, respectively `{` `Cloneable``,` `Serializable` `}` for arrays.

Returns an empty array for primitive types and `void`.

Throws:
  `CompileException`

### getInterfaces2

protected abstract IClass[] getInterfaces2() throws CompileException

Throws:
  `CompileException`
See Also:
  - `getInterfaces()`

### isAbstract

public abstract boolean isAbstract()
Whether the class may be instantiated (JVMS 4.1 access_flags).

Returns:
  `true` if instantiation is prohibited

### getDescriptor

public final String getDescriptor()
Returns the field descriptor for the type as defined by JVMS 4.3.2. This method is fast.

### getDescriptor2

protected abstract String getDescriptor2()

Returns:
  The field descriptor for the type as defined by JVMS 4.3.2.

### getDescriptors

public static String[] getDescriptors(IClass[] iClasses)
Convenience method that determines the field descriptors of an array of `IClass`es.

See Also:
  - `getDescriptor()`

### isEnum

public abstract boolean isEnum()

Returns:
  Whether this type represents an enum

### isInterface

public abstract boolean isInterface()

Returns:
  Whether this type represents an interface

### isArray

public abstract boolean isArray()

Returns:
  Whether this type represents an array

### isPrimitive

public abstract boolean isPrimitive()

Returns:
  Whether this type represents a primitive type or `void`

### isPrimitiveNumeric

public abstract boolean isPrimitiveNumeric()

Returns:
  Whether this type represents `byte`, `short`, `int`, `long`, `char`, `float` or `double`

### getComponentType

@Nullable public final IClass getComponentType()

Returns:
  The component type of the array, or `null` for classes, interfaces, primitive types and `void`

### getComponentType2

@Nullable protected abstract IClass getComponentType2()

See Also:
  - `getComponentType()`

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### isAssignableFrom

public boolean isAssignableFrom(IClass that) throws CompileException
Determines if `this` is assignable from that. This is true if `this` is identical with that (JLS7 5.1.1), or if that is widening-primitive-convertible to `this` (JLS7 5.1.2), or if that is widening-reference-convertible to `this` (JLS7 5.1.5).

Throws:
  `CompileException`

### isSubclassOf

public boolean isSubclassOf(IClass that) throws CompileException
Returns `true` if this class is an immediate or non-immediate subclass of `that` class.

Throws:
  `CompileException`

### implementsInterface

public boolean implementsInterface(IClass that) throws CompileException
If `this` represents a class: Return `true` if this class directly or indirectly implements `that` interface.

If `this` represents an interface: Return `true` if this interface directly or indirectly extends `that` interface.

Throws:
  `CompileException`

### getIAnnotations

public final IClass.IAnnotation[] getIAnnotations() throws CompileException

Returns:
  The annotations of this type (possibly the empty array)
Throws:
  `CompileException`

### getIAnnotations2

protected IClass.IAnnotation[] getIAnnotations2() throws CompileException

Throws:
  `CompileException`

### invalidateMethodCaches

public void invalidateMethodCaches()
This class caches the declared methods in order to minimize the invocations of `getDeclaredIMethods2()`.

### rawTypeOf

public static IClass rawTypeOf(IType type)