Package org.codehaus.groovy.control
Class CompilationUnit
- java.lang.Object
-
- org.codehaus.groovy.control.ProcessingUnit
-
- org.codehaus.groovy.control.CompilationUnit
-
- Direct Known Subclasses:
JavaAwareCompilationUnit
,JavaStubCompilationUnit
public class CompilationUnit extends ProcessingUnit
The CompilationUnit collects all compilation data as it is generated by the compiler system. You can use this object to add additional source units to the compilation, or force the compilation to be run again (to affect only the deltas).You can also add PhaseOperations to this compilation using the addPhaseOperation method. This is commonly used when you want to wire a new AST Transformation into the compilation.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
CompilationUnit.ClassgenCallback
A callback interface you can use to "accompany" the classgen() code as it traverses the ClassNode tree.static class
CompilationUnit.GroovyClassOperation
Deprecated.static interface
CompilationUnit.IGroovyClassOperation
static interface
CompilationUnit.IPrimaryClassNodeOperation
static interface
CompilationUnit.ISourceUnitOperation
static class
CompilationUnit.PrimaryClassNodeOperation
Deprecated.static interface
CompilationUnit.ProgressCallback
A callback interface you can use to get a callback after every unit of the compile process.static class
CompilationUnit.SourceUnitOperation
Deprecated.
-
Field Summary
Fields Modifier and Type Field Description protected CompileUnit
ast
The overall AST for this CompilationUnit.protected ASTTransformationsContext
astTransformationsContext
The AST transformations state data.protected CompilationUnit.ClassgenCallback
classgenCallback
A callback for use duringclassgen
protected ClassNodeResolver
classNodeResolver
protected boolean
configured
True after the firstconfigure(CompilerConfiguration)
operation.protected boolean
debug
Controls behavior ofclassgen
and other routines.protected CompilationUnit.ProgressCallback
progressCallback
A callback for use duringcompile()
protected Queue<SourceUnit>
queuedSources
protected ResolveVisitor
resolveVisitor
protected Map<String,SourceUnit>
sources
The source units from which this unit is built.-
Fields inherited from class org.codehaus.groovy.control.ProcessingUnit
classLoader, configuration, errorCollector, phase, phaseComplete
-
-
Constructor Summary
Constructors Constructor Description CompilationUnit()
Initializes the CompilationUnit with defaults.CompilationUnit(GroovyClassLoader loader)
Initializes the CompilationUnit with defaults except for class loader.CompilationUnit(CompilerConfiguration configuration)
Initializes the CompilationUnit with no security considerations.CompilationUnit(CompilerConfiguration configuration, CodeSource codeSource, GroovyClassLoader loader)
Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.CompilationUnit(CompilerConfiguration configuration, CodeSource codeSource, GroovyClassLoader loader, GroovyClassLoader transformLoader)
Initializes the CompilationUnit with a CodeSource for controlling security stuff, a class loader for loading classes, and a class loader for loading AST transformations.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
addClassNode(ClassNode node)
Adds a ClassNode directly to the unit (ie.void
addFirstPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
void
addFirstPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
Deprecated.void
addJavaCompilationUnits(Set<JavaFileObject> javaCompilationUnitSet)
void
addNewPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
void
addNewPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
Deprecated.void
addPhaseOperation(CompilationUnit.GroovyClassOperation op)
Deprecated.void
addPhaseOperation(CompilationUnit.IGroovyClassOperation op)
void
addPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
void
addPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
void
addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
Deprecated.void
addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
Deprecated.SourceUnit
addSource(File file)
Adds a source file to the unit.SourceUnit
addSource(String name, InputStream stream)
Adds a InputStream source to the unit.SourceUnit
addSource(String name, String scriptText)
SourceUnit
addSource(URL url)
Adds a source file to the unit.SourceUnit
addSource(SourceUnit source)
Adds a SourceUnit to the unit.void
addSources(File[] files)
Adds a set of source files to the unit.void
addSources(String[] paths)
Adds a set of file paths to the unit.void
applyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation op)
Deprecated.void
applyToSourceUnits(CompilationUnit.SourceUnitOperation op)
Deprecated.void
compile()
Synonym forcompile(Phases.ALL)
.void
compile(int throughPhase)
Compiles the compilation unit from sources.void
configure(CompilerConfiguration configuration)
Configures its debugging mode and classloader classpath from a given compiler configuration.protected org.objectweb.asm.ClassVisitor
createClassVisitor()
protected boolean
dequeued()
Dequeues any source units add through addSource and resets the compiler phase to initialization.CompileUnit
getAST()
Returns the CompileUnit that roots our AST.ASTTransformationsContext
getASTTransformationsContext()
List<GroovyClass>
getClasses()
Get the GroovyClasses generated by compile().CompilationUnit.ClassgenCallback
getClassgenCallback()
ClassNode
getClassNode(String name)
Convenience routine to get the named ClassNode.ClassNodeResolver
getClassNodeResolver()
ClassNode
getFirstClassNode()
Convenience routine to get the first ClassNode, for when you are sure there is only one.Set<JavaFileObject>
getJavaCompilationUnitSet()
CompilationUnit.ProgressCallback
getProgressCallback()
GroovyClassLoader
getTransformLoader()
Returns the class loader for loading AST transformations.Iterator<SourceUnit>
iterator()
Returns an iterator on the unit's SourceUnits.protected void
mark()
Updates the phase marker on all sources.void
setClassgenCallback(CompilationUnit.ClassgenCallback visitor)
Sets a ClassgenCallback.void
setClassNodeResolver(ClassNodeResolver classNodeResolver)
void
setProgressCallback(CompilationUnit.ProgressCallback callback)
Sets a ProgressCallback.-
Methods inherited from class org.codehaus.groovy.control.ProcessingUnit
completePhase, getClassLoader, getConfiguration, getErrorCollector, getPhase, getPhaseDescription, gotoPhase, isPhaseComplete, nextPhase, setClassLoader, setConfiguration
-
-
-
-
Field Detail
-
ast
protected CompileUnit ast
The overall AST for this CompilationUnit.
-
sources
protected Map<String,SourceUnit> sources
The source units from which this unit is built.
-
queuedSources
protected Queue<SourceUnit> queuedSources
-
debug
protected boolean debug
Controls behavior ofclassgen
and other routines.
-
configured
protected boolean configured
True after the firstconfigure(CompilerConfiguration)
operation.
-
classgenCallback
protected CompilationUnit.ClassgenCallback classgenCallback
A callback for use duringclassgen
-
progressCallback
protected CompilationUnit.ProgressCallback progressCallback
A callback for use duringcompile()
-
classNodeResolver
protected ClassNodeResolver classNodeResolver
-
resolveVisitor
protected ResolveVisitor resolveVisitor
-
astTransformationsContext
protected ASTTransformationsContext astTransformationsContext
The AST transformations state data.
-
-
Constructor Detail
-
CompilationUnit
public CompilationUnit()
Initializes the CompilationUnit with defaults.
-
CompilationUnit
public CompilationUnit(GroovyClassLoader loader)
Initializes the CompilationUnit with defaults except for class loader.
-
CompilationUnit
public CompilationUnit(CompilerConfiguration configuration)
Initializes the CompilationUnit with no security considerations.
-
CompilationUnit
public CompilationUnit(CompilerConfiguration configuration, CodeSource codeSource, GroovyClassLoader loader)
Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.
-
CompilationUnit
public CompilationUnit(CompilerConfiguration configuration, CodeSource codeSource, GroovyClassLoader loader, GroovyClassLoader transformLoader)
Initializes the CompilationUnit with a CodeSource for controlling security stuff, a class loader for loading classes, and a class loader for loading AST transformations.Note: The transform loader must be able to load compiler classes. That means
ProcessingUnit.classLoader
must be at last a parent totransformLoader
. The other loader has no such constraint.- Parameters:
transformLoader
- - the loader for transformsloader
- - loader used to resolve classes against during compilationcodeSource
- - security setting for the compilationconfiguration
- - compilation configuration
-
-
Method Detail
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.IGroovyClassOperation op)
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
-
addFirstPhaseOperation
public void addFirstPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
-
addNewPhaseOperation
public void addNewPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
-
configure
public void configure(CompilerConfiguration configuration)
Configures its debugging mode and classloader classpath from a given compiler configuration. This cannot be done more than once due to limitations inURLClassLoader
.- Overrides:
configure
in classProcessingUnit
-
getAST
public CompileUnit getAST()
Returns the CompileUnit that roots our AST.
-
getClasses
public List<GroovyClass> getClasses()
Get the GroovyClasses generated by compile().
-
getFirstClassNode
public ClassNode getFirstClassNode()
Convenience routine to get the first ClassNode, for when you are sure there is only one.
-
getClassNode
public ClassNode getClassNode(String name)
Convenience routine to get the named ClassNode.
-
getASTTransformationsContext
public ASTTransformationsContext getASTTransformationsContext()
- Returns:
- the AST transformations current context
-
getClassNodeResolver
public ClassNodeResolver getClassNodeResolver()
-
setClassNodeResolver
public void setClassNodeResolver(ClassNodeResolver classNodeResolver)
-
getJavaCompilationUnitSet
public Set<JavaFileObject> getJavaCompilationUnitSet()
-
addJavaCompilationUnits
public void addJavaCompilationUnits(Set<JavaFileObject> javaCompilationUnitSet)
-
getTransformLoader
public GroovyClassLoader getTransformLoader()
Returns the class loader for loading AST transformations.
-
addSources
public void addSources(String[] paths)
Adds a set of file paths to the unit.
-
addSources
public void addSources(File[] files)
Adds a set of source files to the unit.
-
addSource
public SourceUnit addSource(File file)
Adds a source file to the unit.
-
addSource
public SourceUnit addSource(URL url)
Adds a source file to the unit.
-
addSource
public SourceUnit addSource(String name, InputStream stream)
Adds a InputStream source to the unit.
-
addSource
public SourceUnit addSource(String name, String scriptText)
-
addSource
public SourceUnit addSource(SourceUnit source)
Adds a SourceUnit to the unit.
-
iterator
public Iterator<SourceUnit> iterator()
Returns an iterator on the unit's SourceUnits.
-
addClassNode
public void addClassNode(ClassNode node)
Adds a ClassNode directly to the unit (ie. without source). WARNING: the source is needed for error reporting, using this method without setting a SourceUnit will cause NullPinterExceptions
-
getClassgenCallback
public CompilationUnit.ClassgenCallback getClassgenCallback()
-
setClassgenCallback
public void setClassgenCallback(CompilationUnit.ClassgenCallback visitor)
Sets a ClassgenCallback. You can have only one, and setting it tonull
removes any existing setting.
-
getProgressCallback
public CompilationUnit.ProgressCallback getProgressCallback()
-
setProgressCallback
public void setProgressCallback(CompilationUnit.ProgressCallback callback)
Sets a ProgressCallback. You can have only one, and setting it tonull
removes any existing setting.
-
compile
public void compile() throws CompilationFailedException
Synonym forcompile(Phases.ALL)
.- Throws:
CompilationFailedException
-
compile
public void compile(int throughPhase) throws CompilationFailedException
Compiles the compilation unit from sources.- Throws:
CompilationFailedException
-
dequeued
protected boolean dequeued() throws CompilationFailedException
Dequeues any source units add through addSource and resets the compiler phase to initialization.Note: this does not mean a file is recompiled. If a SourceUnit has already passed a phase it is skipped until a higher phase is reached.
- Returns:
- true if there was a queued source
- Throws:
CompilationFailedException
-
createClassVisitor
protected org.objectweb.asm.ClassVisitor createClassVisitor()
-
mark
protected void mark() throws CompilationFailedException
Updates the phase marker on all sources.- Throws:
CompilationFailedException
-
addPhaseOperation
@Deprecated public void addPhaseOperation(CompilationUnit.GroovyClassOperation op)
Deprecated.
-
addPhaseOperation
@Deprecated public void addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
Deprecated.
-
addPhaseOperation
@Deprecated public void addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
Deprecated.
-
addFirstPhaseOperation
@Deprecated public void addFirstPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
Deprecated.
-
addNewPhaseOperation
@Deprecated public void addNewPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
Deprecated.
-
applyToSourceUnits
@Deprecated public void applyToSourceUnits(CompilationUnit.SourceUnitOperation op) throws CompilationFailedException
Deprecated.- Throws:
CompilationFailedException
-
applyToPrimaryClassNodes
@Deprecated public void applyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation op) throws CompilationFailedException
Deprecated.- Throws:
CompilationFailedException
-
-