Package org.codehaus.janino
Class Compiler.CompilerIClassLoader
- java.lang.Object
-
- org.codehaus.janino.IClassLoader
-
- org.codehaus.janino.Compiler.CompilerIClassLoader
-
- Enclosing class:
- Compiler
private class Compiler.CompilerIClassLoader extends IClassLoader
A specializedIClassLoader
that loadsIClass
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 ofCompiler
and heavily usesCompiler
's members.
-
-
Field Summary
Fields Modifier and Type Field Description private ResourceFinder
classFileFinder
private ResourceFinder
sourceFinder
-
Fields 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
Constructors Constructor Description CompilerIClassLoader(ResourceFinder sourceFinder, ResourceFinder classFileFinder, IClassLoader parentIClassLoader)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private 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, java.lang.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(java.lang.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 Detail
-
sourceFinder
private final ResourceFinder sourceFinder
-
classFileFinder
@Nullable private final ResourceFinder classFileFinder
-
-
Constructor Detail
-
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 Detail
-
findIClass
@Nullable protected IClass findIClass(java.lang.String type) throws java.lang.ClassNotFoundException
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:
java.lang.ClassNotFoundException
- An exception was raised while loading theIClass
- Get an
-
defineIClassFromSourceResource
private IClass defineIClassFromSourceResource(Resource sourceResource, java.lang.String className) throws java.lang.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:
java.lang.ClassNotFoundException
-
defineIClassFromClassFileResource
private IClass defineIClassFromClassFileResource(Resource classFileResource) throws java.lang.ClassNotFoundException
Opens the given classFileResource, reads its contents, defines it in theIClassLoader
, and resolves it (this step may involve loading more classes).- Throws:
java.lang.ClassNotFoundException
-
-