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.

  • Field Details

  • Constructor Details

    • 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 Details

    • addPhaseOperation

      public void addPhaseOperation(CompilationUnit.IGroovyClassOperation op)
      Adds a Groovy class operation to the output phase.
      Parameters:
      op - the operation to run for generated classes
    • addPhaseOperation

      public void addPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
      Adds a source-unit operation to the supplied phase.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addPhaseOperation

      public void addPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
      Adds a primary-class operation to the supplied phase.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addFirstPhaseOperation

      public void addFirstPhaseOperation(CompilationUnit.IPrimaryClassNodeOperation op, int phase)
      Adds a primary-class operation at the front of the supplied phase queue.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addNewPhaseOperation

      public void addNewPhaseOperation(CompilationUnit.ISourceUnitOperation op, int phase)
      Adds a source-unit operation that becomes active only after the current phase queue drains.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • 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()
      Returns the resolver used for on-demand class lookup.
      Returns:
      the active class-node resolver
    • setClassNodeResolver

      public void setClassNodeResolver(ClassNodeResolver classNodeResolver)
      Replaces the resolver used for on-demand class lookup.
      Parameters:
      classNodeResolver - the resolver to install
    • getJavaCompilationUnitSet

      public Set<JavaFileObject> getJavaCompilationUnitSet()
      Returns the queued Java compilation units used for joint compilation.
      Returns:
      the tracked Java compilation units
    • addJavaCompilationUnits

      public void addJavaCompilationUnits(Set<JavaFileObject> javaCompilationUnitSet)
      Adds Java compilation units to the joint-compilation set.
      Parameters:
      javaCompilationUnitSet - the Java units to add
    • 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)
      Adds an in-memory script source to this compilation unit.
      Parameters:
      name - the source name
      scriptText - the script text
      Returns:
      the created source unit
    • 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 (i.e. without source). WARNING: the source is needed for error reporting, using this method without setting a SourceUnit will cause NullPointerExceptions
    • getClassgenCallback

      public CompilationUnit.ClassgenCallback getClassgenCallback()
      Returns the callback invoked after class generation.
      Returns:
      the class-generation callback, or null
    • 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()
      Returns the callback invoked after each phase transition.
      Returns:
      the progress callback, or null
    • 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 added 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()
      Creates the ASM class visitor used for bytecode generation.
      Returns:
      the class visitor used to emit bytecode
    • mark

      protected void mark() throws CompilationFailedException
      Updates the phase marker on all sources.
      Throws:
      CompilationFailedException
    • addPhaseOperation

      @Deprecated public void addPhaseOperation(CompilationUnit.GroovyClassOperation op)
      Deprecated.
      Adapts a deprecated groovy-class operation to the current API.
      Parameters:
      op - the operation to add
    • addPhaseOperation

      @Deprecated public void addPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
      Deprecated.
      Adapts a deprecated source-unit operation to the current API.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addPhaseOperation

      @Deprecated public void addPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
      Deprecated.
      Adapts a deprecated primary-class operation to the current API.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addFirstPhaseOperation

      @Deprecated public void addFirstPhaseOperation(CompilationUnit.PrimaryClassNodeOperation op, int phase)
      Deprecated.
      Adapts a deprecated primary-class operation to the front of a phase queue.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • addNewPhaseOperation

      @Deprecated public void addNewPhaseOperation(CompilationUnit.SourceUnitOperation op, int phase)
      Deprecated.
      Adapts a deprecated source-unit operation to the delayed phase queue.
      Parameters:
      op - the operation to add
      phase - the phase in which to run it
    • applyToSourceUnits

      Deprecated.
      Applies a deprecated source-unit operation to all source units.
      Parameters:
      op - the operation to run
      Throws:
      CompilationFailedException - if processing fails
    • applyToPrimaryClassNodes

      @Deprecated public void applyToPrimaryClassNodes(CompilationUnit.PrimaryClassNodeOperation op) throws CompilationFailedException
      Deprecated.
      Applies a deprecated primary-class operation to all primary class nodes.
      Parameters:
      op - the operation to run
      Throws:
      CompilationFailedException - if processing fails