Class IClassLoader
java.lang.Object
org.codehaus.janino.IClassLoader
- Direct Known Subclasses:
ClassLoaderIClassLoader, Compiler.CompilerIClassLoader, JavaSourceIClassLoader, ResourceFinderIClassLoader
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic IClassLoadercreateJavacLikePathIClassLoader(File[] bootClassPath, File[] extDirs, 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 final voiddefineIClass(IClass iClass) Defines anIClassin the context of thisIClassLoader.protected abstract IClassfindIClass(String descriptor) Finds a newIClassby descriptor and callsdefineIClass(IClass).getArrayIClass(IClass componentType) Gets anIClassthat represents an array of this type.getArrayIClass(IClass componentType, int n) Gets anIClassthat represents an n-dimensional array of this type.private IClassgetArrayIClass2(IClass componentType) private static IClass.IMethodfinal IClassloadIClass(String fieldDescriptor) Gets anIClassby field descriptor.protected final voidThis 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, String name, IClass... parameterTypes) private IClassrequireType(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
-
arrayIClasses
-
parentIClassLoader
-
loadedIClasses
-
unloadableIClasses
-
-
Constructor Details
-
IClassLoader
- Parameters:
parentIClassLoader-nulliff thisIClassLoaderhas 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:
nulliff 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 anIClassby field descriptor.- Parameters:
fieldDescriptor- E.g. 'Lpkg1/pkg2/Outer$Inner;'- Returns:
nullif anIClasscould not be loaded- Throws:
ClassNotFoundException- An exception was raised while loading theIClass
-
findIClass
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:
ClassNotFoundException- An exception was raised while loading the class
- Get an
-
defineIClass
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
-
getArrayIClass
-
getArrayIClass2
- Parameters:
objectType- Must passTYPE_java_lang_Objecthere
-
createJavacLikePathIClassLoader
public static IClassLoader createJavacLikePathIClassLoader(@Nullable File[] bootClassPath, @Nullable File[] extDirs, 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.
-