org.codehaus.janino
public class CachingJavaSourceClassLoader extends JavaSourceClassLoader
The application provides access to the resource storeage through a pair of a ResourceFinder and a ResourceCreator (see CachingJavaSourceClassLoader.
See (String[])
for
an example how to use this class.
Notice: You must NOT rely on that this class stores some particular data in some
particular resources through the given classFileCacheResourceFinder/Creator
!
These serve only as a means for the CachingJavaSourceClassLoader to persistently
cache some data between invocations. In other words: If you want to compile .java
files into .class
files, then don't use this class but Compiler
instead!
Constructor Summary | |
---|---|
CachingJavaSourceClassLoader(ClassLoader parentClassLoader, File[] optionalSourcePath, String optionalCharacterEncoding, File cacheDirectory, EnumeratorSet debuggingInformation) | |
CachingJavaSourceClassLoader(ClassLoader parentClassLoader, ResourceFinder sourceFinder, String optionalCharacterEncoding, ResourceFinder classFileCacheResourceFinder, ResourceCreator classFileCacheResourceCreator, EnumeratorSet debuggingInformation)
Notice that this class is thread-safe if and only if the
classFileCacheResourceCreator stores its data atomically,
i.e. the classFileCacheResourceFinder sees the resource
written by the classFileCacheResourceCreator only after
the OutputStream is closed.
|
Method Summary | |
---|---|
protected Map | generateBytecodes(String className)
Override generateBytecodes to implement
class file caching.
|
Parameters: optionalSourcePath Directories to scan for source files cacheDirectory Directory to use for caching generated class files (see class description)
classFileCacheResourceCreator
stores its data atomically,
i.e. the classFileCacheResourceFinder
sees the resource
written by the classFileCacheResourceCreator
only after
the OutputStream is closed.
In order to make the caching scheme work, both the
classFileCacheResourceFinder
and the
sourceFinder
must support the lastModified
method, so that the modification time of the source and the class files
can be compared.
Parameters: parentClassLoader Attempt to load classes through this one before looking for source files sourceFinder Finds JavaTM source for class pkg.Cls
in resource pkg/Cls.java
optionalCharacterEncoding Encoding of JavaTM source or null
for platform default encoding classFileCacheResourceFinder Finds precompiled class pkg.Cls
in resource pkg/Cls.class
(see class description) classFileCacheResourceCreator Stores compiled class pkg.Cls
in resource pkg/Cls.class
(see class description) debuggingInformation What debugging information to include into the generated class files
Returns: String name => byte[] bytecode, or null
if no source code could be found
Throws: ClassNotFoundException on compilation problems or class file cache I/O problems