Class JavaSourceClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
-
- org.codehaus.commons.compiler.jdk.JavaSourceClassLoader
-
public class JavaSourceClassLoader extends AbstractJavaSourceClassLoader
AClassLoader
that loads classes by looking for their source files through a "source path" and compiling them on-the-fly.Notice that this class loader does not support resoures in the sense of
ClassLoader.getResource(String)
,ClassLoader.getResourceAsStream(String)
ndClassLoader.getResources(String)
.- See Also:
ClassLoaders
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
JavaSourceClassLoader.DiagnosticException
Container for aDiagnostic
object.-
Nested classes/interfaces inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
AbstractJavaSourceClassLoader.ProtectionDomainFactory
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Collection<java.lang.String>
compilerOptions
private boolean
debuggingInfoLines
private boolean
debuggingInfoSource
private boolean
debuggingInfoVars
private javax.tools.JavaFileManager
fileManager
private java.nio.charset.Charset
sourceCharset
private ResourceFinder
sourceFinder
private static javax.tools.JavaCompiler
SYSTEM_JAVA_COMPILER
-
Fields inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
protectionDomainFactory
-
-
Constructor Summary
Constructors Constructor Description JavaSourceClassLoader()
JavaSourceClassLoader(java.lang.ClassLoader parentClassLoader)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.Class<?>
findClass(java.lang.String className)
Implementation ofClassLoader.findClass(String)
.private java.lang.Class<?>
findClass2(java.lang.String className)
private javax.tools.JavaFileObject
findClassFile(java.lang.String className)
private javax.tools.JavaFileManager
getJavaFileManager()
Creates the underlyingJavaFileManager
lazily, becausesetSourcePath(File[])
and consorts are called after initialization.private static java.lang.String
getSourceResourceName(java.lang.String className)
Constructs the name of a resource that could contain the source code of the class with the given name.private static javax.tools.JavaCompiler
getSystemJavaCompiler()
private void
init()
void
setCompilerOptions(java.lang.String[] compilerOptions)
Notice: Don't use the '-g' options - these are controlled throughsetDebuggingInfo(boolean, boolean, boolean)
.void
setDebuggingInfo(boolean lines, boolean vars, boolean source)
void
setSourceCharset(java.nio.charset.Charset charset)
void
setSourceFinder(ResourceFinder sourceFinder)
void
setSourcePath(java.io.File[] sourcePath)
-
Methods inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
getResourceAsStream, main, setProtectionDomainFactory, setSourceFileCharacterEncoding
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Field Detail
-
SYSTEM_JAVA_COMPILER
private static final javax.tools.JavaCompiler SYSTEM_JAVA_COMPILER
-
sourceFinder
private ResourceFinder sourceFinder
-
sourceCharset
private java.nio.charset.Charset sourceCharset
-
debuggingInfoLines
private boolean debuggingInfoLines
-
debuggingInfoVars
private boolean debuggingInfoVars
-
debuggingInfoSource
private boolean debuggingInfoSource
-
compilerOptions
private java.util.Collection<java.lang.String> compilerOptions
-
fileManager
@Nullable private javax.tools.JavaFileManager fileManager
-
-
Method Detail
-
getSystemJavaCompiler
private static javax.tools.JavaCompiler getSystemJavaCompiler()
-
init
private void init()
-
getJavaFileManager
private javax.tools.JavaFileManager getJavaFileManager()
Creates the underlyingJavaFileManager
lazily, becausesetSourcePath(File[])
and consorts are called after initialization.
-
setSourcePath
public void setSourcePath(java.io.File[] sourcePath)
- Specified by:
setSourcePath
in classAbstractJavaSourceClassLoader
- Parameters:
sourcePath
- The sequence of directories to search for Java source files
-
setSourceFinder
public void setSourceFinder(ResourceFinder sourceFinder)
- Specified by:
setSourceFinder
in classAbstractJavaSourceClassLoader
- Parameters:
sourceFinder
- Is used when searching for Java source files
-
setSourceCharset
public void setSourceCharset(java.nio.charset.Charset charset)
- Specified by:
setSourceCharset
in classAbstractJavaSourceClassLoader
- Parameters:
charset
- The character set to using when reading characters from a source file
-
setDebuggingInfo
public void setDebuggingInfo(boolean lines, boolean vars, boolean source)
- Specified by:
setDebuggingInfo
in classAbstractJavaSourceClassLoader
- Parameters:
lines
- Whether line number debugging information should be generatedvars
- Whether variables debugging information should be generatedsource
- Whether source file debugging information should be generated
-
setCompilerOptions
public void setCompilerOptions(java.lang.String[] compilerOptions)
Notice: Don't use the '-g' options - these are controlled throughsetDebuggingInfo(boolean, boolean, boolean)
.- Parameters:
compilerOptions
- All command line options supported by the JDK JAVAC tool
-
findClass
protected java.lang.Class<?> findClass(java.lang.String className) throws java.lang.ClassNotFoundException
Implementation ofClassLoader.findClass(String)
.- Overrides:
findClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
findClass2
private java.lang.Class<?> findClass2(java.lang.String className) throws java.io.IOException
- Throws:
java.io.IOException
-
findClassFile
private javax.tools.JavaFileObject findClassFile(java.lang.String className) throws java.io.IOException
- Throws:
java.io.IOException
-
getSourceResourceName
private static java.lang.String getSourceResourceName(java.lang.String className)
Constructs the name of a resource that could contain the source code of the class with the given name.Notice that member types are declared inside a different type, so the relevant source file is that of the outermost declaring class.
- Parameters:
className
- Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner"- Returns:
- the name of the resource, e.g. "pkg1/pkg2/Outer.java"
-
-