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 during `classgen`
    `protected ClassNodeResolver` | `classNodeResolver` |
    `protected boolean` | `configured` | True after the first `configure(CompilerConfiguration)` operation.
    `protected boolean` | `debug` | Controls behavior of `classgen` and other routines.
    `protected CompilationUnit.ProgressCallback` | `progressCallback` | A callback for use during `compile()`
    `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 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.
    `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()` |
    `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`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 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 of `classgen` and other routines.

    - #### configured

          protected boolean configured

      True after the first `configure(CompilerConfiguration)` operation.

    - #### classgenCallback

          protected CompilationUnit.ClassgenCallback classgenCallback

      A callback for use during `classgen`

    - #### progressCallback

          protected CompilationUnit.ProgressCallback progressCallback

      A callback for use during `compile()`

    - #### 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 to `transformLoader`. The other loader has no such constraint.

      Parameters:
        `transformLoader` - - the loader for transforms
        `loader` - - loader used to resolve classes against during compilation
        `codeSource` - - security setting for the compilation
        `configuration` - - 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 in `URLClassLoader`.
      Overrides:
        `configure` in class `ProcessingUnit`

    - #### 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 to `null` 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 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 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`