janino.net

org.codehaus.janino
Class JavaSourceClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
          extended by org.codehaus.janino.JavaSourceClassLoader
Direct Known Subclasses:
CachingJavaSourceClassLoader

public class JavaSourceClassLoader
extends AbstractJavaSourceClassLoader

A ClassLoader that, unlike usual ClassLoaders, does not load byte code, but reads Java™ source code and then scans, parses, compiles and loads it into the virtual machine.

As with any ClassLoader, it is not possible to "update" classes after they've been loaded. The way to achieve this is to give up on the JavaSourceClassLoader and create a new one.


Nested Class Summary
 
Nested classes/interfaces inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
AbstractJavaSourceClassLoader.ProtectionDomainFactory
 
Field Summary
 
Fields inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
optionalProtectionDomainFactory
 
Constructor Summary
JavaSourceClassLoader()
           
JavaSourceClassLoader(ClassLoader parentClassLoader)
           
JavaSourceClassLoader(ClassLoader parentClassLoader, File[] optionalSourcePath, String optionalCharacterEncoding)
          Set up a JavaSourceClassLoader that finds Java™ source code in a file that resides in either of the directories specified by the given source path.
JavaSourceClassLoader(ClassLoader parentClassLoader, JavaSourceIClassLoader iClassLoader)
          Constructs a JavaSourceClassLoader that finds classes through an JavaSourceIClassLoader.
JavaSourceClassLoader(ClassLoader parentClassLoader, ResourceFinder sourceFinder, String optionalCharacterEncoding)
          Constructs a JavaSourceClassLoader that finds Java™ source code through a given ResourceFinder.
 
Method Summary
protected  Class findClass(String name)
          Implementation of ClassLoader.findClass(String).
protected  Map<String,byte[]> generateBytecodes(String name)
          Find, scan, parse the right compilation unit.
 void setCompileErrorHandler(ErrorHandler optionalCompileErrorHandler)
           
 void setDebuggingInfo(boolean debugSource, boolean debugLines, boolean debugVars)
           
 void setSourceFileCharacterEncoding(String optionalCharacterEncoding)
           
 void setSourcePath(File[] sourcePath)
           
 void setWarningHandler(WarningHandler optionalWarningHandler)
           
 
Methods inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
main, setProtectionDomainFactory
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JavaSourceClassLoader

public JavaSourceClassLoader()

JavaSourceClassLoader

public JavaSourceClassLoader(ClassLoader parentClassLoader)

JavaSourceClassLoader

public JavaSourceClassLoader(ClassLoader parentClassLoader,
                             File[] optionalSourcePath,
                             String optionalCharacterEncoding)
Set up a JavaSourceClassLoader that finds Java™ source code in a file that resides in either of the directories specified by the given source path.

Parameters:
parentClassLoader - See ClassLoader
optionalSourcePath - A collection of directories that are searched for Java™ source files in the given order
optionalCharacterEncoding - The encoding of the Java™ source files (null for platform default encoding)

JavaSourceClassLoader

public JavaSourceClassLoader(ClassLoader parentClassLoader,
                             ResourceFinder sourceFinder,
                             String optionalCharacterEncoding)
Constructs a JavaSourceClassLoader that finds Java™ source code through a given ResourceFinder.

You can specify to include certain debugging information in the generated class files, which is useful if you want to debug through the generated classes (see Scanner.Scanner(String, Reader)).

Parameters:
parentClassLoader - See ClassLoader
sourceFinder - Used to locate additional source files
optionalCharacterEncoding - The encoding of the Java™ source files (null for platform default encoding)

JavaSourceClassLoader

public JavaSourceClassLoader(ClassLoader parentClassLoader,
                             JavaSourceIClassLoader iClassLoader)
Constructs a JavaSourceClassLoader that finds classes through an JavaSourceIClassLoader.

Method Detail

setSourcePath

public void setSourcePath(File[] sourcePath)
Specified by:
setSourcePath in class AbstractJavaSourceClassLoader
Parameters:
sourcePath - The sequence of directories to search for Java™ source files

setSourceFileCharacterEncoding

public void setSourceFileCharacterEncoding(String optionalCharacterEncoding)
Specified by:
setSourceFileCharacterEncoding in class AbstractJavaSourceClassLoader
Parameters:
optionalCharacterEncoding - if null, use platform default encoding

setDebuggingInfo

public void setDebuggingInfo(boolean debugSource,
                             boolean debugLines,
                             boolean debugVars)
Specified by:
setDebuggingInfo in class AbstractJavaSourceClassLoader
Parameters:
debugSource - Whether line number debugging information should be generated
debugLines - Whether variables debugging information should be generated
debugVars - Whether source file debugging information should be generated

setCompileErrorHandler

public void setCompileErrorHandler(ErrorHandler optionalCompileErrorHandler)
See Also:
UnitCompiler.setCompileErrorHandler(org.codehaus.commons.compiler.ErrorHandler)

setWarningHandler

public void setWarningHandler(WarningHandler optionalWarningHandler)
See Also:
Parser.setWarningHandler(WarningHandler), UnitCompiler.setCompileErrorHandler(org.codehaus.commons.compiler.ErrorHandler)

findClass

protected Class findClass(String name)
                   throws ClassNotFoundException
Implementation of ClassLoader.findClass(String).

Overrides:
findClass in class ClassLoader
Throws:
ClassNotFoundException

generateBytecodes

protected Map<String,byte[]> generateBytecodes(String name)
                                        throws ClassNotFoundException
Find, scan, parse the right compilation unit. Compile the parsed compilation unit to bytecode. This may cause more compilation units being scanned and parsed. Continue until all compilation units are compiled.

Returns:
String name => byte[] bytecode, or null if no source code could be found
Throws:
ClassNotFoundException - on compilation problems

janino.net