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 classCompilationUnit.ClassgenCallbackA callback interface you can use to "accompany" the classgen() code as it traverses the ClassNode tree.static classCompilationUnit.GroovyClassOperationstatic classCompilationUnit.PrimaryClassNodeOperationAn callback interface for use in the applyToPrimaryClassNodes loop driver.static classCompilationUnit.ProgressCallbackA callback interface you can use to get a callback after every unit of the compile process.static classCompilationUnit.SourceUnitOperationAn callback interface for use in the applyToSourceUnits loop driver.
-
Field Summary
Fields Modifier and Type Field Description protected CompileUnitastprotected ASTTransformationsContextastTransformationsContextprotected CompilationUnit.ClassgenCallbackclassgenCallbackprotected ClassNodeResolverclassNodeResolverprotected java.util.MapclassSourcesByPublicClassNameDeprecated.protected booleanconfiguredprotected booleandebugprotected java.util.List<GroovyClass>generatedClassesprotected java.util.List<java.lang.String>namesprotected OptimizerVisitoroptimizerprotected CompilationUnit.ProgressCallbackprogressCallbackprotected java.util.LinkedList<SourceUnit>queuedSourcesprotected ResolveVisitorresolveVisitorprotected java.util.Map<java.lang.String,SourceUnit>sourcesprotected StaticImportVisitorstaticImportVisitorprotected java.util.MapsummariesByPublicClassNameDeprecated.protected java.util.MapsummariesBySourceNameDeprecated.protected Verifierverifier-
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, java.security.CodeSource security, GroovyClassLoader loader)Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.CompilationUnit(CompilerConfiguration configuration, java.security.CodeSource security, 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 voidaddClassNode(ClassNode node)Adds a ClassNode directly to the unit (ie.voidaddFirstPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)voidaddNewPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)voidaddPhaseOperation(CompilationUnit.GroovyClassOperation op)voidaddPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)voidaddPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)SourceUnitaddSource(java.io.File file)Adds a source file to the unit.SourceUnitaddSource(java.lang.String name, java.io.InputStream stream)Adds a InputStream source to the unit.SourceUnitaddSource(java.lang.String name, java.lang.String scriptText)SourceUnitaddSource(java.net.URL url)Adds a source file to the unit.SourceUnitaddSource(SourceUnit source)Adds a SourceUnit to the unit.voidaddSources(java.io.File[] files)Adds a set of source files to the unit.voidaddSources(java.lang.String[] paths)Adds a set of file paths to the unit.voidapplyToGeneratedGroovyClasses(CompilationUnit.GroovyClassOperation body)voidapplyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation body)A loop driver for applying operations to all primary ClassNodes in our AST.voidapplyToSourceUnits(CompilationUnit.SourceUnitOperation body)A loop driver for applying operations to all SourceUnits.voidcompile()Synonym for compile(Phases.ALL).voidcompile(int throughPhase)Compiles the compilation unit from sources.voidconfigure(CompilerConfiguration configuration)Configures its debugging mode and classloader classpath from a given compiler configuration.protected org.objectweb.asm.ClassVisitorcreateClassVisitor()protected booleandequeued()Dequeues any source units add through addSource and resets the compiler phase to initialization.CompileUnitgetAST()Returns the CompileUnit that roots our AST.ASTTransformationsContextgetASTTransformationsContext()java.util.ListgetClasses()Get the GroovyClasses generated by compile().CompilationUnit.ClassgenCallbackgetClassgenCallback()ClassNodegetClassNode(java.lang.String name)Convenience routine to get the named ClassNode.ClassNodeResolvergetClassNodeResolver()java.util.MapgetClassSourcesByPublicClassName()Deprecated.ClassNodegetFirstClassNode()Convenience routine to get the first ClassNode, for when you are sure there is only one.CompilationUnit.ProgressCallbackgetProgressCallback()java.util.MapgetSummariesByPublicClassName()Deprecated.java.util.MapgetSummariesBySourceName()Deprecated.GroovyClassLoadergetTransformLoader()Returns the class loader for loading AST transformations.booleanisPublicClass(java.lang.String className)Deprecated.java.util.Iterator<SourceUnit>iterator()Returns an iterator on the unit's SourceUnits.protected voidmark()Updates the phase marker on all sources.voidsetClassgenCallback(CompilationUnit.ClassgenCallback visitor)Sets a ClassgenCallback.voidsetClassNodeResolver(ClassNodeResolver classNodeResolver)voidsetProgressCallback(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
-
astTransformationsContext
protected ASTTransformationsContext astTransformationsContext
-
summariesBySourceName
@Deprecated protected java.util.Map summariesBySourceName
Deprecated.
-
summariesByPublicClassName
@Deprecated protected java.util.Map summariesByPublicClassName
Deprecated.
-
classSourcesByPublicClassName
@Deprecated protected java.util.Map classSourcesByPublicClassName
Deprecated.
-
sources
protected java.util.Map<java.lang.String,SourceUnit> sources
-
names
protected java.util.List<java.lang.String> names
-
queuedSources
protected java.util.LinkedList<SourceUnit> queuedSources
-
ast
protected CompileUnit ast
-
generatedClasses
protected java.util.List<GroovyClass> generatedClasses
-
verifier
protected Verifier verifier
-
debug
protected boolean debug
-
configured
protected boolean configured
-
classgenCallback
protected CompilationUnit.ClassgenCallback classgenCallback
-
progressCallback
protected CompilationUnit.ProgressCallback progressCallback
-
resolveVisitor
protected ResolveVisitor resolveVisitor
-
staticImportVisitor
protected StaticImportVisitor staticImportVisitor
-
optimizer
protected OptimizerVisitor optimizer
-
classNodeResolver
protected ClassNodeResolver classNodeResolver
-
-
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, java.security.CodeSource security, GroovyClassLoader loader)
Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.
-
CompilationUnit
public CompilationUnit(CompilerConfiguration configuration, java.security.CodeSource security, 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 CompilationUnit.class.classLoader must be at last a parent to transformLoader. The other loader has no such constraint.- Parameters:
transformLoader- - the loader for transformsloader- - loader used to resolve classes against during compilationsecurity- - security setting for the compilationconfiguration- - compilation configuration
-
-
Method Detail
-
getTransformLoader
public GroovyClassLoader getTransformLoader()
Returns the class loader for loading AST transformations.
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
-
addFirstPhaseOperation
public void addFirstPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
-
addPhaseOperation
public void addPhaseOperation(CompilationUnit.GroovyClassOperation op)
-
addNewPhaseOperation
public void addNewPhaseOperation(CompilationUnit.SourceUnitOperation 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:
configurein classProcessingUnit
-
getAST
public CompileUnit getAST()
Returns the CompileUnit that roots our AST.
-
getSummariesBySourceName
@Deprecated public java.util.Map getSummariesBySourceName()
Deprecated.
-
getSummariesByPublicClassName
@Deprecated public java.util.Map getSummariesByPublicClassName()
Deprecated.
-
getClassSourcesByPublicClassName
@Deprecated public java.util.Map getClassSourcesByPublicClassName()
Deprecated.
-
isPublicClass
@Deprecated public boolean isPublicClass(java.lang.String className)
Deprecated.
-
getClasses
public java.util.List 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(java.lang.String name)
Convenience routine to get the named ClassNode.
-
getASTTransformationsContext
public ASTTransformationsContext getASTTransformationsContext()
- Returns:
- the AST transformations current context
-
addSources
public void addSources(java.lang.String[] paths)
Adds a set of file paths to the unit.
-
addSources
public void addSources(java.io.File[] files)
Adds a set of source files to the unit.
-
addSource
public SourceUnit addSource(java.io.File file)
Adds a source file to the unit.
-
addSource
public SourceUnit addSource(java.net.URL url)
Adds a source file to the unit.
-
addSource
public SourceUnit addSource(java.lang.String name, java.io.InputStream stream)
Adds a InputStream source to the unit.
-
addSource
public SourceUnit addSource(java.lang.String name, java.lang.String scriptText)
-
addSource
public SourceUnit addSource(SourceUnit source)
Adds a SourceUnit to the unit.
-
iterator
public java.util.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
-
setClassgenCallback
public void setClassgenCallback(CompilationUnit.ClassgenCallback visitor)
Sets a ClassgenCallback. You can have only one, and setting it to null removes any existing setting.
-
getClassgenCallback
public CompilationUnit.ClassgenCallback getClassgenCallback()
-
setProgressCallback
public void setProgressCallback(CompilationUnit.ProgressCallback callback)
Sets a ProgressCallback. You can have only one, and setting it to null removes any existing setting.
-
getProgressCallback
public CompilationUnit.ProgressCallback getProgressCallback()
-
compile
public void compile() throws CompilationFailedExceptionSynonym for compile(Phases.ALL).- Throws:
CompilationFailedException
-
compile
public void compile(int throughPhase) throws CompilationFailedExceptionCompiles the compilation unit from sources.- Throws:
CompilationFailedException
-
dequeued
protected boolean dequeued() throws CompilationFailedExceptionDequeues 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 CompilationFailedExceptionUpdates the phase marker on all sources.- Throws:
CompilationFailedException
-
applyToSourceUnits
public void applyToSourceUnits(CompilationUnit.SourceUnitOperation body) throws CompilationFailedException
A loop driver for applying operations to all SourceUnits. Automatically skips units that have already been processed through the current phase.- Throws:
CompilationFailedException
-
applyToPrimaryClassNodes
public void applyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation body) throws CompilationFailedException
A loop driver for applying operations to all primary ClassNodes in our AST. Automatically skips units that have already been processed through the current phase.- Throws:
CompilationFailedException
-
applyToGeneratedGroovyClasses
public void applyToGeneratedGroovyClasses(CompilationUnit.GroovyClassOperation body) throws CompilationFailedException
- Throws:
CompilationFailedException
-
getClassNodeResolver
public ClassNodeResolver getClassNodeResolver()
-
setClassNodeResolver
public void setClassNodeResolver(ClassNodeResolver classNodeResolver)
-
-