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 specializedIClassLoaderthat loadsIClasses 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.CompilerIClassLoaderis an inner class ofCompilerand heavily usesCompiler's members.
-
-
Field Summary
Fields Modifier and Type Field Description private ResourceFinderclassFileFinderprivate ResourceFindersourceFinder-
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 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, 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 IClassfindIClass(java.lang.String type)Finds a newIClassby descriptor and callsIClassLoader.defineIClass(IClass).-
Methods inherited from class org.codehaus.janino.IClassLoader
createJavacLikePathIClassLoader, defineIClass, getArrayIClass, getArrayIClass, 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_FILEparentIClassLoader-IClassLoaderthrough whichIClasses are to be loaded
-
-
Method Detail
-
findIClass
@Nullable protected IClass findIClass(java.lang.String type) throws java.lang.ClassNotFoundException
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:
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
-
-