Package org.codehaus.janino
Class Compiler.CompilerIClassLoader
java.lang.Object
org.codehaus.janino.IClassLoader
org.codehaus.janino.Compiler.CompilerIClassLoader
- Enclosing class:
- Compiler
A specialized
IClassLoader
that loads IClass
es 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 org.codehaus.janino.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 IClass
defineIClassFromClassFileResource
(Resource classFileResource) Opens the given classFileResource, reads its contents, defines it in theIClassLoader
, and resolves it (this step may involve loading more classes).private IClass
defineIClassFromSourceResource
(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 IClass
findIClass
(String type) Finds a newIClass
by descriptor and callsIClassLoader.defineIClass(IClass)
.Methods inherited from class org.codehaus.janino.IClassLoader
createJavacLikePathIClassLoader, defineIClass, 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_FILE
parentIClassLoader
-IClassLoader
through whichIClass
es are to be loaded
-
-
Method Details
-
findIClass
Description copied from class:IClassLoader
Finds a newIClass
by descriptor and callsIClassLoader.defineIClass(IClass)
.Similar
ClassLoader.findClass(java.lang.String)
, this method must- Get an
IClass
object from somewhere for the given type - Call
IClassLoader.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.
- Specified by:
findIClass
in classIClassLoader
- Parameters:
type
- field descriptor of theIClass
to load, e.g."Lpkg1/pkg2/Outer$Inner;"
- Returns:
null
if 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
-