Package: org.codehaus.groovy.ast

## [Java] Class CompileUnit

- org.codehaus.groovy.ast.CompileUnit

- Represents the entire contents of a compilation step which consists of one or more ModuleNode instances. There's one instance of this that's shared by all modules and classes compiled during a single invocation of the compiler.

  It's attached to MethodNodes and ClassNodes and is used to find fully qualified names of classes, resolve imports, and that sort of thing.

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `static class` | `CompileUnit.ConstructedOuterNestedClassNode` | Represents a resolved type as a placeholder, SEE GROOVY-7812

  - ### Properties Summary

    Properties
    Type | Name and description
    --- | ---
    `T` | `nodeMetaData`
    `Object` | `nodeMetaData`

  - ### Constructor Summary

    Constructors
    Constructor and description
    `CompileUnit (GroovyClassLoader classLoader, CompilerConfiguration config)`
    `CompileUnit (GroovyClassLoader classLoader, CodeSource codeSource, CompilerConfiguration config)`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `void` | `addClass(ClassNode node)` Adds a class to the unit.
    `` | `void` | `addClassNodeToCompile(ClassNode node, SourceUnit location)` this method actually does not compile a class.
    `` | `void` | `addClassNodeToResolve(CompileUnit.ConstructedOuterNestedClassNode cn)` Add a constructed class node as a placeholder to resolve outer nested class further.
    `` | `void` | `addGeneratedInnerClass(InnerClassNode icn)`
    `` | `void` | `addModule(ModuleNode node)`
    `` | `ClassNode` | `getClass(String name)` @return the ClassNode for the given qualified name or returns null if the name does not exist in the current compilation unit (ignoring the .class files on the classpath)
    `` | `GroovyClassLoader` | `getClassLoader()`
    `` | `List<ClassNode>` | `getClasses()` @return a list of all the classes in each module in the compilation unit
    `` | `Map<String, ClassNode>` | `getClassesToCompile()`
    `` | `Map<String, ConstructedOuterNestedClassNode>` | `getClassesToResolve()`
    `` | `CodeSource` | `getCodeSource()`
    `` | `CompilerConfiguration` | `getConfig()`
    `` | `InnerClassNode` | `getGeneratedInnerClass(String name)`
    `` | `Map<String, InnerClassNode>` | `getGeneratedInnerClasses()`
    `` | `ListHashMap` | `getMetaDataMap()`
    `` | `List<ModuleNode>` | `getModules()`
    `<T>` | `T` | `getNodeMetaData(Object key)` Gets the node meta data for the provided key.
    `` | `Map<?, ?>` | `getNodeMetaData()` Returns an unmodifiable view of the current node metadata.
    `` | `SourceUnit` | `getScriptSourceLocation(String className)`
    `` | `boolean` | `hasClassNodeToCompile()`
    `` | `Iterator<String>` | `iterateClassNodeToCompile()`
    `` | `Object` | `putNodeMetaData(Object key, Object value)` Sets the node meta data but allows overwriting values.
    `` | `void` | `removeNodeMetaData(Object key)` Removes a node meta data entry.
    `` | `void` | `setNodeMetaData(Object key, Object value)` Sets the node meta data for the provided key.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Property Detail

    - #### T nodeMetaData

    - #### Object nodeMetaData

  - ### Constructor Detail

    - #### public CompileUnit(GroovyClassLoader classLoader, CompilerConfiguration config)

    - #### public CompileUnit(GroovyClassLoader classLoader, CodeSource codeSource, CompilerConfiguration config)

  - ### Method Detail

    - #### public void addClass(ClassNode node)

      Adds a class to the unit.

    - #### public void addClassNodeToCompile(ClassNode node, SourceUnit location)

      this method actually does not compile a class. It's only a marker that this type has to be compiled by the CompilationUnit at the end of a parse step no node should be be left.

    - #### public void addClassNodeToResolve(CompileUnit.ConstructedOuterNestedClassNode cn)

      Add a constructed class node as a placeholder to resolve outer nested class further.

      Parameters:
        `cn` - the constructed class node

    - #### public void addGeneratedInnerClass(InnerClassNode icn)

    - #### public void addModule(ModuleNode node)

    - #### public ClassNode getClass(String name)

      Returns:
        the ClassNode for the given qualified name or returns null if the name does not exist in the current compilation unit (ignoring the .class files on the classpath)

    - #### public GroovyClassLoader getClassLoader()

    - #### public List<ClassNode> getClasses()

      Returns:
        a list of all the classes in each module in the compilation unit

    - #### public Map<String, ClassNode> getClassesToCompile()

    - #### public Map<String, ConstructedOuterNestedClassNode> getClassesToResolve()

    - #### public CodeSource getCodeSource()

    - #### public CompilerConfiguration getConfig()

    - #### public InnerClassNode getGeneratedInnerClass(String name)

    - #### public Map<String, InnerClassNode> getGeneratedInnerClasses()

    - #### public ListHashMap getMetaDataMap()

    - #### public List<ModuleNode> getModules()

    - #### <T> public T getNodeMetaData(Object key)

      Gets the node meta data for the provided key.

      Parameters:
        `key` - - the meta data key
      Returns:
        the node meta data value for this key

    - #### public Map<?, ?> getNodeMetaData()

      Returns an unmodifiable view of the current node metadata.

      Returns:
        the node metadata. Always not null.

    - #### public SourceUnit getScriptSourceLocation(String className)

    - #### public boolean hasClassNodeToCompile()

    - #### public Iterator<String> iterateClassNodeToCompile()

    - #### public Object putNodeMetaData(Object key, Object value)

      Sets the node meta data but allows overwriting values.

      throws:
        GroovyBugError if key is null
      Parameters:
        `key` - - the meta data key
        `value` - - the meta data value
      Returns:
        the old node meta data value for this key

    - #### public void removeNodeMetaData(Object key)

      Removes a node meta data entry.

      throws:
        GroovyBugError if the key is null
      Parameters:
        `key` - - the meta data key

    - #### public void setNodeMetaData(Object key, Object value)

      Sets the node meta data for the provided key.

      throws:
        GroovyBugError if key is null or there is already meta data under that key
      Parameters:
        `key` - - the meta data key
        `value` - - the meta data value