Package org.codehaus.janino
Class IClassLoader
java.lang.Object
org.codehaus.janino.IClassLoader
- Direct Known Subclasses:
ClassLoaderIClassLoader
,Compiler.CompilerIClassLoader
,JavaSourceIClassLoader
,ResourceFinderIClassLoader
Loads an
IClass
by type name.-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic IClassLoader
createJavacLikePathIClassLoader
(File[] bootClassPath, File[] extDirs, File[] classPath) Creates anIClassLoader
that looks for classes in the given "boot class path", then in the given "extension directories", and then in the given "class path".protected final void
defineIClass
(IClass iClass) Defines anIClass
in the context of thisIClassLoader
.protected abstract IClass
findIClass
(String descriptor) Finds a newIClass
by descriptor and callsdefineIClass(IClass)
.private static IClass.IMethod
final IClass
loadIClass
(String fieldDescriptor) Gets anIClass
by field descriptor.protected final void
This method must be called by the constructor of the derived class.private static IClass.IConstructor
requireConstructor
(IClass declaringType, IClass... parameterTypes) private static IClass.IMethod
requireMethod
(IClass declaringType, String name, IClass... parameterTypes) private IClass
requireType
(String descriptor)
-
Field Details
-
LOGGER
-
TYPE_java_lang_annotation_Retention
-
TYPE_java_lang_AssertionError
-
TYPE_java_lang_Boolean
-
TYPE_java_lang_Byte
-
TYPE_java_lang_Character
-
TYPE_java_lang_Class
-
TYPE_java_lang_Cloneable
-
TYPE_java_lang_Double
-
TYPE_java_lang_Enum
-
TYPE_java_lang_Error
-
TYPE_java_lang_Exception
-
TYPE_java_lang_Float
-
TYPE_java_lang_Integer
-
TYPE_java_lang_Iterable
-
TYPE_java_lang_Long
-
TYPE_java_lang_Object
-
TYPE_java_lang_Override
-
TYPE_java_lang_RuntimeException
-
TYPE_java_lang_Short
-
TYPE_java_lang_String
-
TYPE_java_lang_StringBuilder
-
TYPE_java_lang_System
-
TYPE_java_lang_Throwable
-
TYPE_java_lang_Void
-
TYPE_java_io_Serializable
-
TYPE_java_util_Iterator
-
METH_java_lang_Enum__ordinal
-
METH_java_lang_Iterable__iterator
-
METH_java_lang_String__concat__java_lang_String
-
METH_java_lang_String__equals__java_lang_Object
-
METH_java_lang_String__hashCode
-
METH_java_lang_String__valueOf__int
-
METH_java_lang_String__valueOf__long
-
METH_java_lang_String__valueOf__float
-
METH_java_lang_String__valueOf__double
-
METH_java_lang_String__valueOf__char
-
METH_java_lang_String__valueOf__boolean
-
METH_java_lang_String__valueOf__java_lang_Object
-
METH_java_lang_StringBuilder__append__int
-
METH_java_lang_StringBuilder__append__long
-
METH_java_lang_StringBuilder__append__float
-
METH_java_lang_StringBuilder__append__double
-
METH_java_lang_StringBuilder__append__char
-
METH_java_lang_StringBuilder__append__boolean
-
METH_java_lang_StringBuilder__append__java_lang_Object
-
METH_java_lang_StringBuilder__append__java_lang_String
-
METH_java_lang_StringBuilder__toString
-
METH_java_lang_Throwable__addSuppressed
-
METH_java_util_Iterator__hasNext
-
METH_java_util_Iterator__next
-
CTOR_java_lang_StringBuilder__java_lang_String
-
parentIClassLoader
-
loadedIClasses
-
unloadableIClasses
-
-
Constructor Details
-
IClassLoader
- Parameters:
parentIClassLoader
-null
iff thisIClassLoader
has no parent
-
-
Method Details
-
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
-
getMethod
@Nullable private static IClass.IMethod getMethod(IClass declaringType, String name, IClass... parameterTypes) - Returns:
null
iff the declaringType does not declare a method with that name and parameter types
-
requireMethod
private static IClass.IMethod requireMethod(IClass declaringType, String name, IClass... parameterTypes) - Throws:
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
Gets anIClass
by field descriptor.- Parameters:
fieldDescriptor
- E.g. 'Lpkg1/pkg2/Outer$Inner;'- Returns:
null
if anIClass
could not be loaded- Throws:
ClassNotFoundException
- An exception was raised while loading theIClass
-
findIClass
Finds a newIClass
by descriptor and callsdefineIClass(IClass)
.Similar
ClassLoader.findClass(java.lang.String)
, this method must- Get an
IClass
object from somewhere for the given type - Call
defineIClass(IClass)
with thatIClass
object as the argument - Return the
IClass
object
The format of a
descriptor
is 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:
null
if a class with that descriptor could not be found- Throws:
ClassNotFoundException
- An exception was raised while loading the class
- Get an
-
defineIClass
Defines anIClass
in the context of thisIClassLoader
.This method should only be called from an implementation of
findIClass(String)
.- Throws:
InternalCompilerException
- A differentIClass
object is already defined for this type
-
createJavacLikePathIClassLoader
public static IClassLoader createJavacLikePathIClassLoader(@Nullable File[] bootClassPath, @Nullable File[] extDirs, File[] classPath) Creates anIClassLoader
that 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
bootClassPath
is the path defined in the system property "sun.boot.class.path", and the default for theextensionDirs
is the path defined in the "java.ext.dirs" system property.
-