Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright 2003-2007 the original author or authors.
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
 package org.codehaus.groovy.ast;
 import java.util.List;
 import java.util.Map;
Represents the entire contents of a compilation step which consists of one or more ModuleNodeinstances

James Strachan
$Revision: 12705 $
 public class CompileUnit {
     private final List modules = new ArrayList();
     private Map classes = new HashMap();
     private CompilerConfiguration config;
     private GroovyClassLoader classLoader;
     private CodeSource codeSource;
     private Map classesToCompile = new HashMap();
     private Map classNameToSource = new HashMap();
     public CompileUnit(GroovyClassLoader classLoaderCompilerConfiguration config) {
     public CompileUnit(GroovyClassLoader classLoaderCodeSource codeSourceCompilerConfiguration config) {
         this. = classLoader;
         this. = config;
         this. = codeSource;
     public List getModules() {
         return ;
     public void addModule(ModuleNode node) {
         // node==null means a compilation error prevented
         // groovy from building an ast
         if (node==nullreturn;


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 ClassNode getClass(String name) {
         ClassNode cn = (ClassNode.get(name);
         if (cn!=nullreturn cn;
         return (ClassNode.get(name);


a list of all the classes in each module in the compilation unit
     public List getClasses() {
         List answer = new ArrayList();
         for (Iterator iter = .iterator(); iter.hasNext();) {
             ModuleNode module = (;
         return answer;
     public CompilerConfiguration getConfig() {
         return ;
     public GroovyClassLoader getClassLoader() {
        return ;
    public CodeSource getCodeSource() {
    	return ;

Appends all of the fully qualified class names in this module into the given map
    void addClasses(List classList) {
        for (Iterator iter = classList.iterator(); iter.hasNext();) {
Adds a class to the unit.
    public void addClass(ClassNode node) {
    	node = node.redirect();
        String name = node.getName();
        ClassNode stored = (ClassNode.get(name);
        if (stored != null && stored != node) {
            // we have a duplicate class!
            // One possibility for this is, that we delcared a script and a 
            // class in the same file and named the class like the file
            SourceUnit nodeSource = node.getModule().getContext();
            SourceUnit storedSource = stored.getModule().getContext();
            String txt = "Invalid duplicate class definition of class "+node.getName()+" : ";
            if (nodeSource==storedSource) {
                // same class in same source
                txt += "The source "+nodeSource.getName()+" contains at least two defintions of the class "+node.getName()+".\n";
                if (node.isScriptBody() || stored.isScriptBody()) {
                    txt += "One of the classes is a explicit generated class using the class statement, the other is a class generated from"+
                           " the script body based on the file name. Solutions are to change the file name or to change the class name.\n";
            } else {
                txt += "The sources "+nodeSource.getName()+" and "+storedSource.getName()+" are containing both a class of the name "+node.getName()+".\n";
                    new SyntaxErrorMessage(new SyntaxException(txtnode.getLineNumber(), node.getColumnNumber()), nodeSource)
        if (.containsKey(name)) {
            ClassNode cn = (ClassNode.get(name);
this emthod 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 addClassNodeToCompile(ClassNode nodeSourceUnit location) {
    public SourceUnit getScriptSourceLocation(String className) {
        return (SourceUnit.get(className);
    public boolean hasClassNodeToCompile(){
        return !.isEmpty();
        return .keySet().iterator();
New to GrepCode? Check out our FAQ X