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 8552 2007-10-10 20:56:37Z blackdrag $
Author:
Chris Poirier, Jochen Theodorou

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
           
private  CompilationUnit.PrimaryClassNodeOperation classgen
          Runs classgen() on a single ClassNode.
protected  CompilationUnit.ClassgenCallback classgenCallback
           
protected  java.util.Map classSourcesByPublicClassName
           
private  CompilationUnit.SourceUnitOperation compileCompleteCheck
           
protected  boolean configured
           
private  CompilationUnit.SourceUnitOperation convert
          Runs convert() on a single SourceUnit.
protected  boolean debug
           
protected  java.util.List generatedClasses
           
private  CompilationUnit.SourceUnitOperation mark
          Marks a single SourceUnit with the current phase, if it isn't already there yet.
protected  java.util.List names
           
private  CompilationUnit.GroovyClassOperation output
           
(package private)  java.util.LinkedList[] phaseOperations
           
protected  CompilationUnit.ProgressCallback progressCallback
           
protected  java.util.LinkedList queuedSources
           
private  CompilationUnit.SourceUnitOperation resolve
          Resolves all types
protected  ResolveVisitor resolveVisitor
           
protected  java.util.Map sources
           
private  CompilationUnit.PrimaryClassNodeOperation staticImport
           
protected  StaticImportVisitor staticImportVisitor
           
protected  java.util.Map summariesByPublicClassName
           
protected  java.util.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, java.security.CodeSource security, GroovyClassLoader loader)
          Initializes the CompilationUnit with a CodeSource for controlling security stuff and a class loader for loading classes.
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.
 void addPhaseOperation(CompilationUnit.GroovyClassOperation op)
           
 void addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
           
 void addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
           
 SourceUnit addSource(java.io.File file)
          Adds a source file to the unit.
 SourceUnit addSource(SourceUnit source)
          Adds a SourceUnit to the unit.
 SourceUnit addSource(java.lang.String name, java.io.InputStream stream)
          Adds a InputStream source to the unit.
 SourceUnit addSource(java.net.URL url)
          Adds a source file to the unit.
 void addSources(java.io.File[] files)
          Adds a set of source files to the unit.
 void addSources(java.lang.String[] paths)
          Adds a set of file paths to the unit.
private  void appendCompilerConfigurationClasspathToClassLoader(CompilerConfiguration configuration, GroovyClassLoader classLoader)
           
 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.
private  void changeBugText(GroovyBugError e, SourceUnit context)
           
 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.
 java.util.List getClasses()
          Get the GroovyClasses generated by compile().
 ClassNode getClassNode(java.lang.String name)
          Convenience routine to get the named ClassNode.
 java.util.Map getClassSourcesByPublicClassName()
           
 ClassNode getFirstClassNode()
          Convenience routine to get the first ClassNode, for when you are sure there is only one.
private  java.util.List getPrimaryClassNodes(boolean sort)
           
private  java.util.List getSorted(int[] index, java.util.List unsorted)
           
 java.util.Map getSummariesByPublicClassName()
           
 java.util.Map getSummariesBySourceName()
          Get the source summaries
 boolean isPublicClass(java.lang.String className)
           
 java.util.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.
private  void sortClasses()
           
 
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 java.util.Map sources

summariesBySourceName

protected java.util.Map summariesBySourceName

summariesByPublicClassName

protected java.util.Map summariesByPublicClassName

classSourcesByPublicClassName

protected java.util.Map classSourcesByPublicClassName

names

protected java.util.List names

queuedSources

protected java.util.LinkedList queuedSources

ast

protected CompileUnit ast

generatedClasses

protected java.util.List 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

phaseOperations

java.util.LinkedList[] phaseOperations

resolve

private final CompilationUnit.SourceUnitOperation resolve
Resolves all types


staticImport

private CompilationUnit.PrimaryClassNodeOperation staticImport

convert

private CompilationUnit.SourceUnitOperation convert
Runs convert() on a single SourceUnit.


output

private CompilationUnit.GroovyClassOperation output

compileCompleteCheck

private CompilationUnit.SourceUnitOperation compileCompleteCheck

classgen

private CompilationUnit.PrimaryClassNodeOperation classgen
Runs classgen() on a single ClassNode.


mark

private CompilationUnit.SourceUnitOperation mark
Marks a single SourceUnit with the current phase, if it isn't already there yet.

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.

Method Detail

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)

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

appendCompilerConfigurationClasspathToClassLoader

private void appendCompilerConfigurationClasspathToClassLoader(CompilerConfiguration configuration,
                                                               GroovyClassLoader classLoader)

getAST

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


getSummariesBySourceName

public java.util.Map getSummariesBySourceName()
Get the source summaries


getSummariesByPublicClassName

public java.util.Map getSummariesByPublicClassName()

getClassSourcesByPublicClassName

public java.util.Map getClassSourcesByPublicClassName()

isPublicClass

public boolean isPublicClass(java.lang.String className)

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.


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


iterator

public java.util.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

sortClasses

private void sortClasses()
                  throws CompilationFailedException
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

getPrimaryClassNodes

private java.util.List getPrimaryClassNodes(boolean sort)

getSorted

private java.util.List getSorted(int[] index,
                                 java.util.List unsorted)

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

changeBugText

private void changeBugText(GroovyBugError e,
                           SourceUnit context)


Copyright © ${year} The Codehaus. All Rights Reserved.