org.codehaus.groovy.control
Class CompilationUnit

java.lang.Object
  extended by org.codehaus.groovy.control.ProcessingUnit
      extended by org.codehaus.groovy.control.CompilationUnit
Direct Known Subclasses:
JavaAwareCompilationUnit, JavaStubCompilationUnit

public class CompilationUnit
extends ProcessingUnit

Collects all compilation data as it is generated by the compiler system. Allows additional source units to be added and compilation run again (to affect only the deltas).

Version:
$Id: CompilationUnit.java 18432 2009-11-27 13:40:23Z roshandawrani $
Author:
Chris Poirier, Jochen Theodorou, Roshan Dawrani

Nested Class Summary
static class CompilationUnit.ClassgenCallback
          A callback interface you can use to "accompany" the classgen() code as it traverses the ClassNode tree.
static class CompilationUnit.GroovyClassOperation
           
static class CompilationUnit.PrimaryClassNodeOperation
          An callback interface for use in the applyToSourceUnits loop driver.
static class CompilationUnit.ProgressCallback
          A callback interface you can use to get a callback after every unit of the compile process.
static class CompilationUnit.SourceUnitOperation
          An callback interface for use in the applyToSourceUnits loop driver.
 
Field Summary
protected  CompileUnit ast
           
protected  CompilationUnit.ClassgenCallback classgenCallback
           
protected  Map classSourcesByPublicClassName
           
protected  boolean configured
           
protected  boolean debug
           
protected  List<GroovyClass> generatedClasses
           
protected  List names
           
protected  OptimizerVisitor optimizer
           
protected  CompilationUnit.ProgressCallback progressCallback
           
protected  LinkedList queuedSources
           
protected  ResolveVisitor resolveVisitor
           
protected  Map sources
           
protected  StaticImportVisitor staticImportVisitor
           
protected  Map summariesByPublicClassName
           
protected  Map summariesBySourceName
           
protected  Verifier verifier
           
 
Fields inherited from class org.codehaus.groovy.control.ProcessingUnit
classLoader, configuration, errorCollector, phase, phaseComplete
 
Constructor Summary
CompilationUnit()
          Initializes the CompilationUnit with defaults.
CompilationUnit(CompilerConfiguration configuration)
          Initializes the CompilationUnit with no security considerations.
CompilationUnit(CompilerConfiguration configuration, CodeSource security, GroovyClassLoader loader)
          Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.
CompilationUnit(CompilerConfiguration configuration, 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.
CompilationUnit(GroovyClassLoader loader)
          Initializes the CompilationUnit with defaults except for class loader.
 
Method Summary
 void addClassNode(ClassNode node)
          Adds a ClassNode directly to the unit (ie. without source).
 void addNewPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
           
 void addPhaseOperation(CompilationUnit.GroovyClassOperation op)
           
 void addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
           
 void addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
           
 SourceUnit addSource(File file)
          Adds a source file to the unit.
 SourceUnit addSource(SourceUnit source)
          Adds a SourceUnit to the unit.
 SourceUnit addSource(String name, InputStream stream)
          Adds a InputStream source to the unit.
 SourceUnit addSource(URL url)
          Adds a source file 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 applyToGeneratedGroovyClasses(CompilationUnit.GroovyClassOperation body)
           
 void applyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation body)
          A loop driver for applying operations to all primary ClassNodes in our AST.
 void applyToSourceUnits(CompilationUnit.SourceUnitOperation body)
          A loop driver for applying operations to all SourceUnits.
 void compile()
          Synonym for compile(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.
 List getClasses()
          Get the GroovyClasses generated by compile().
 ClassNode getClassNode(String name)
          Convenience routine to get the named ClassNode.
 Map getClassSourcesByPublicClassName()
           
 ClassNode getFirstClassNode()
          Convenience routine to get the first ClassNode, for when you are sure there is only one.
 Map getSummariesByPublicClassName()
           
 Map getSummariesBySourceName()
          Get the source summaries
 GroovyClassLoader getTransformLoader()
          Returns the class loader for loading AST transformations.
 boolean isPublicClass(String className)
           
 Iterator 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 setProgressCallback(CompilationUnit.ProgressCallback callback)
          Sets a ProgressCallback.
 
Methods inherited from class org.codehaus.groovy.control.ProcessingUnit
completePhase, getClassLoader, getConfiguration, getErrorCollector, getPhase, getPhaseDescription, gotoPhase, nextPhase, setClassLoader, setConfiguration
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sources

protected Map sources

summariesBySourceName

protected Map summariesBySourceName

summariesByPublicClassName

protected Map summariesByPublicClassName

classSourcesByPublicClassName

protected Map classSourcesByPublicClassName

names

protected List names

queuedSources

protected LinkedList queuedSources

ast

protected CompileUnit ast

generatedClasses

protected 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
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 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,
                       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 transforms
loader - - loader used to resolve classes against during compilation
security - - security setting for the compilation
configuration - - compilation configuration
Method Detail

getTransformLoader

public GroovyClassLoader getTransformLoader()
Returns the class loader for loading AST transformations.

Returns:
- the transform class loader

addPhaseOperation

public void addPhaseOperation(CompilationUnit.SourceUnitOperation op,
                              int phase)

addPhaseOperation

public void addPhaseOperation(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 in URLClassLoader.

Overrides:
configure in class ProcessingUnit

getAST

public CompileUnit getAST()
Returns the CompileUnit that roots our AST.


getSummariesBySourceName

public Map getSummariesBySourceName()
Get the source summaries


getSummariesByPublicClassName

public Map getSummariesByPublicClassName()

getClassSourcesByPublicClassName

public Map getClassSourcesByPublicClassName()

isPublicClass

public boolean isPublicClass(String className)

getClasses

public 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(String name)
Convenience routine to get the named ClassNode.


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(SourceUnit source)
Adds a SourceUnit to the unit.


iterator

public Iterator 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.


setProgressCallback

public void setProgressCallback(CompilationUnit.ProgressCallback callback)
Sets a ProgressCallback. You can have only one, and setting it to null removes any existing setting.


compile

public void compile()
             throws CompilationFailedException
Synonym for compile(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 SoucreUnit 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

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

Copyright © 2003-2010 The Codehaus. All rights reserved.