Class Compiler.CompilerIClassLoader
java.lang.Object
org.codehaus.janino.IClassLoader
org.codehaus.janino.Compiler.CompilerIClassLoader
- Enclosing class:
Compiler
A specialized
IClassLoader that loads IClasses from the following sources:
- An already-parsed compilation unit
- A class file in the output directory (if existent and younger than source file)
- A source file in any of the source path directories
- The parent class loader
Notice that the Compiler.CompilerIClassLoader is an inner class of Compiler and heavily uses Compiler's members.
-
Field Summary
FieldsFields inherited from class IClassLoader
CTOR_java_lang_StringBuilder__java_lang_String, 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__boolean, METH_java_lang_String__valueOf__char, METH_java_lang_String__valueOf__double, METH_java_lang_String__valueOf__float, METH_java_lang_String__valueOf__int, METH_java_lang_String__valueOf__java_lang_Object, METH_java_lang_String__valueOf__long, METH_java_lang_StringBuilder__append__boolean, METH_java_lang_StringBuilder__append__char, METH_java_lang_StringBuilder__append__double, METH_java_lang_StringBuilder__append__float, METH_java_lang_StringBuilder__append__int, METH_java_lang_StringBuilder__append__java_lang_Object, METH_java_lang_StringBuilder__append__java_lang_String, METH_java_lang_StringBuilder__append__long, METH_java_lang_StringBuilder__toString, METH_java_lang_Throwable__addSuppressed, METH_java_util_Iterator__hasNext, METH_java_util_Iterator__next, TYPE_java_io_Serializable, 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_util_Iterator -
Constructor Summary
ConstructorsConstructorDescriptionCompilerIClassLoader(ResourceFinder sourceFinder, ResourceFinder classFileFinder, IClassLoader parentIClassLoader) -
Method Summary
Modifier and TypeMethodDescriptionprivate IClassdefineIClassFromClassFileResource(Resource classFileResource) Opens the given classFileResource, reads its contents, defines it in theIClassLoader, and resolves it (this step may involve loading more classes).private IClassdefineIClassFromSourceResource(Resource sourceResource, String className) Parses the compilation unit stored in the given sourceResource, remembers it inCompiler.this.parsedCompilationUnits(it may declare other classes that are needed later), finds the declaration of the type with the given className, and defines it in theIClassLoader.protected IClassfindIClass(String type) Finds a newIClassby descriptor and callsIClassLoader.defineIClass(IClass).Methods inherited from class IClassLoader
createJavacLikePathIClassLoader, defineIClass, getArrayIClass, getArrayIClass, getParentIClassLoader, loadIClass, postConstruct
-
Field Details
-
sourceFinder
-
classFileFinder
-
-
Constructor Details
-
CompilerIClassLoader
CompilerIClassLoader(ResourceFinder sourceFinder, @Nullable ResourceFinder classFileFinder, IClassLoader parentIClassLoader) - Parameters:
sourceFinder- Where to look for more source filesclassFileFinder- Where to look for previously generated .class resources, orICompiler.FIND_NEXT_TO_SOURCE_FILEparentIClassLoader-IClassLoaderthrough whichIClasses are to be loaded
-
-
Method Details
-
findIClass
Description copied from class:IClassLoaderFinds a newIClassby descriptor and callsIClassLoader.defineIClass(IClass).Similar
ClassLoader.findClass(java.lang.String), this method must- Get an
IClassobject from somewhere for the given type - Call
IClassLoader.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.
- Specified by:
findIClassin classIClassLoader- Parameters:
type- field descriptor of theIClassto load, e.g."Lpkg1/pkg2/Outer$Inner;"- Returns:
nullif a the type could not be found- Throws:
ClassNotFoundException- An exception was raised while loading theIClass
- Get an
-
defineIClassFromSourceResource
private IClass defineIClassFromSourceResource(Resource sourceResource, String className) throws ClassNotFoundException Parses the compilation unit stored in the given sourceResource, remembers it inCompiler.this.parsedCompilationUnits(it may declare other classes that are needed later), finds the declaration of the type with the given className, and defines it in theIClassLoader.Notice that the compilation unit is not compiled here!
- Throws:
ClassNotFoundException
-
defineIClassFromClassFileResource
private IClass defineIClassFromClassFileResource(Resource classFileResource) throws ClassNotFoundException Opens the given classFileResource, reads its contents, defines it in theIClassLoader, and resolves it (this step may involve loading more classes).- Throws:
ClassNotFoundException
-