Package org.codehaus.janino
Class IClassLoader
- java.lang.Object
-
- org.codehaus.janino.IClassLoader
-
- Direct Known Subclasses:
ClassLoaderIClassLoader,Compiler.CompilerIClassLoader,JavaSourceIClassLoader,ResourceFinderIClassLoader
public abstract class IClassLoader extends java.lang.ObjectLoads anIClassby type name.
-
-
Field Summary
-
Constructor Summary
Constructors Constructor Description IClassLoader(IClassLoader parentIClassLoader)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static IClassLoadercreateJavacLikePathIClassLoader(java.io.File[] bootClassPath, java.io.File[] extDirs, java.io.File[] classPath)Creates anIClassLoaderthat looks for classes in the given "boot class path", then in the given "extension directories", and then in the given "class path".protected voiddefineIClass(IClass iClass)Defines anIClassin the context of thisIClassLoader.protected abstract IClassfindIClass(java.lang.String descriptor)Finds a newIClassby descriptor and callsdefineIClass(IClass).IClassgetArrayIClass(IClass componentType)Gets anIClassthat represents an array of this type.IClassgetArrayIClass(IClass componentType, int n)Gets anIClassthat represents an n-dimensional array of this type.private IClassgetArrayIClass2(IClass componentType)private static IClass.IMethodgetMethod(IClass declaringType, java.lang.String name, IClass... parameterTypes)IClassLoadergetParentIClassLoader()IClassloadIClass(java.lang.String fieldDescriptor)Gets anIClassby field descriptor.protected voidpostConstruct()This method must be called by the constructor of the derived class.private static IClass.IConstructorrequireConstructor(IClass declaringType, IClass... parameterTypes)private static IClass.IMethodrequireMethod(IClass declaringType, java.lang.String name, IClass... parameterTypes)private IClassrequireType(java.lang.String descriptor)
-
-
-
Field Detail
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
TYPE_java_lang_annotation_Retention
public IClass TYPE_java_lang_annotation_Retention
-
TYPE_java_lang_AssertionError
public IClass TYPE_java_lang_AssertionError
-
TYPE_java_lang_Boolean
public IClass TYPE_java_lang_Boolean
-
TYPE_java_lang_Byte
public IClass TYPE_java_lang_Byte
-
TYPE_java_lang_Character
public IClass TYPE_java_lang_Character
-
TYPE_java_lang_Class
public IClass TYPE_java_lang_Class
-
TYPE_java_lang_Cloneable
public IClass TYPE_java_lang_Cloneable
-
TYPE_java_lang_Double
public IClass TYPE_java_lang_Double
-
TYPE_java_lang_Enum
public IClass TYPE_java_lang_Enum
-
TYPE_java_lang_Error
public IClass TYPE_java_lang_Error
-
TYPE_java_lang_Exception
public IClass TYPE_java_lang_Exception
-
TYPE_java_lang_Float
public IClass TYPE_java_lang_Float
-
TYPE_java_lang_Integer
public IClass TYPE_java_lang_Integer
-
TYPE_java_lang_Iterable
public IClass TYPE_java_lang_Iterable
-
TYPE_java_lang_Long
public IClass TYPE_java_lang_Long
-
TYPE_java_lang_Object
public IClass TYPE_java_lang_Object
-
TYPE_java_lang_Override
public IClass TYPE_java_lang_Override
-
TYPE_java_lang_RuntimeException
public IClass TYPE_java_lang_RuntimeException
-
TYPE_java_lang_Short
public IClass TYPE_java_lang_Short
-
TYPE_java_lang_String
public IClass TYPE_java_lang_String
-
TYPE_java_lang_StringBuilder
public IClass TYPE_java_lang_StringBuilder
-
TYPE_java_lang_System
public IClass TYPE_java_lang_System
-
TYPE_java_lang_Throwable
public IClass TYPE_java_lang_Throwable
-
TYPE_java_lang_Void
public IClass TYPE_java_lang_Void
-
TYPE_java_io_Serializable
public IClass TYPE_java_io_Serializable
-
TYPE_java_util_Iterator
public IClass TYPE_java_util_Iterator
-
METH_java_lang_Enum__ordinal
public IClass.IMethod METH_java_lang_Enum__ordinal
-
METH_java_lang_Iterable__iterator
public IClass.IMethod METH_java_lang_Iterable__iterator
-
METH_java_lang_String__concat__java_lang_String
public IClass.IMethod METH_java_lang_String__concat__java_lang_String
-
METH_java_lang_String__equals__java_lang_Object
public IClass.IMethod METH_java_lang_String__equals__java_lang_Object
-
METH_java_lang_String__hashCode
public IClass.IMethod METH_java_lang_String__hashCode
-
METH_java_lang_String__valueOf__int
public IClass.IMethod METH_java_lang_String__valueOf__int
-
METH_java_lang_String__valueOf__long
public IClass.IMethod METH_java_lang_String__valueOf__long
-
METH_java_lang_String__valueOf__float
public IClass.IMethod METH_java_lang_String__valueOf__float
-
METH_java_lang_String__valueOf__double
public IClass.IMethod METH_java_lang_String__valueOf__double
-
METH_java_lang_String__valueOf__char
public IClass.IMethod METH_java_lang_String__valueOf__char
-
METH_java_lang_String__valueOf__boolean
public IClass.IMethod METH_java_lang_String__valueOf__boolean
-
METH_java_lang_String__valueOf__java_lang_Object
public IClass.IMethod METH_java_lang_String__valueOf__java_lang_Object
-
METH_java_lang_StringBuilder__append__int
public IClass.IMethod METH_java_lang_StringBuilder__append__int
-
METH_java_lang_StringBuilder__append__long
public IClass.IMethod METH_java_lang_StringBuilder__append__long
-
METH_java_lang_StringBuilder__append__float
public IClass.IMethod METH_java_lang_StringBuilder__append__float
-
METH_java_lang_StringBuilder__append__double
public IClass.IMethod METH_java_lang_StringBuilder__append__double
-
METH_java_lang_StringBuilder__append__char
public IClass.IMethod METH_java_lang_StringBuilder__append__char
-
METH_java_lang_StringBuilder__append__boolean
public IClass.IMethod METH_java_lang_StringBuilder__append__boolean
-
METH_java_lang_StringBuilder__append__java_lang_Object
public IClass.IMethod METH_java_lang_StringBuilder__append__java_lang_Object
-
METH_java_lang_StringBuilder__append__java_lang_String
public IClass.IMethod METH_java_lang_StringBuilder__append__java_lang_String
-
METH_java_lang_StringBuilder__toString
public IClass.IMethod METH_java_lang_StringBuilder__toString
-
METH_java_lang_Throwable__addSuppressed
@Nullable public IClass.IMethod METH_java_lang_Throwable__addSuppressed
-
METH_java_util_Iterator__hasNext
public IClass.IMethod METH_java_util_Iterator__hasNext
-
METH_java_util_Iterator__next
public IClass.IMethod METH_java_util_Iterator__next
-
CTOR_java_lang_StringBuilder__java_lang_String
public IClass.IConstructor CTOR_java_lang_StringBuilder__java_lang_String
-
parentIClassLoader
private final IClassLoader parentIClassLoader
-
loadedIClasses
private final java.util.Map<java.lang.String,IClass> loadedIClasses
-
unloadableIClasses
private final java.util.Set<java.lang.String> unloadableIClasses
-
-
Constructor Detail
-
IClassLoader
public IClassLoader(@Nullable IClassLoader parentIClassLoader)
- Parameters:
parentIClassLoader-nulliff thisIClassLoaderhas no parent
-
-
Method Detail
-
getParentIClassLoader
public IClassLoader getParentIClassLoader()
-
postConstruct
protected final void postConstruct()
This method must be called by the constructor of the derived class. (The reason being is that this method invokes abstractloadIClass(String)which will not work until the derived class is constructed.)
-
requireType
private IClass requireType(java.lang.String descriptor)
-
getMethod
@Nullable private static IClass.IMethod getMethod(IClass declaringType, java.lang.String name, IClass... parameterTypes)
- Returns:
nulliff the declaringType does not declare a method with that name and parameter types
-
requireMethod
private static IClass.IMethod requireMethod(IClass declaringType, java.lang.String name, IClass... parameterTypes)
- Throws:
java.lang.AssertionError- The declaringType does not declare a method with that name and parameter types
-
requireConstructor
private static IClass.IConstructor requireConstructor(IClass declaringType, IClass... parameterTypes)
-
loadIClass
@Nullable public final IClass loadIClass(java.lang.String fieldDescriptor) throws java.lang.ClassNotFoundException
Gets anIClassby field descriptor.
-
findIClass
@Nullable protected abstract IClass findIClass(java.lang.String descriptor) throws java.lang.ClassNotFoundException
Finds a newIClassby descriptor and callsdefineIClass(IClass).Similar
ClassLoader.findClass(java.lang.String), this method must- Get an
IClassobject from somewhere for the given type - Call
defineIClass(IClass)with thatIClassobject as the argument - Return the
IClassobject
The format of a
descriptoris defined in JVMS 4.3.2. Typical descriptors are:I(Integer)Lpkg1/pkg2/Clazz;(Class declared in package)Lpkg1/pkg2/Outer$Inner;Member class
Notice that this method is never called for array types.
Notice that this method is never called from more than one thread at a time. In other words, implementations of this method need not be thread-safe.
- Returns:
nullif a class with that descriptor could not be found- Throws:
java.lang.ClassNotFoundException- An exception was raised while loading the class
- Get an
-
defineIClass
protected final void defineIClass(IClass iClass)
Defines anIClassin the context of thisIClassLoader.This method should only be called from an implementation of
findIClass(String).- Throws:
InternalCompilerException- A differentIClassobject is already defined for this type
-
getArrayIClass
public IClass getArrayIClass(IClass componentType, int n)
Gets anIClassthat represents an n-dimensional array of this type.- Parameters:
componentType- Required because the superclass of an array class isObjectby definitionn- Dimension count
-
getArrayIClass
public IClass getArrayIClass(IClass componentType)
Gets anIClassthat represents an array of this type.- Parameters:
componentType- Required because the superclass of an array class isObjectby definition
-
getArrayIClass2
private IClass getArrayIClass2(IClass componentType)
- Parameters:
objectType- Must passTYPE_java_lang_Objecthere
-
createJavacLikePathIClassLoader
public static IClassLoader createJavacLikePathIClassLoader(@Nullable java.io.File[] bootClassPath, @Nullable java.io.File[] extDirs, java.io.File[] classPath)
Creates anIClassLoaderthat looks for classes in the given "boot class path", then in the given "extension directories", and then in the given "class path".The default for the
bootClassPathis the path defined in the system property "sun.boot.class.path", and the default for theextensionDirsis the path defined in the "java.ext.dirs" system property.
-
-