//  Copyright 2004 The Apache Software Foundation
//
// 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
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// 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.apache.tapestry.enhance;

/**
 *  This is an unrecoverable error during code generation.
 *  It should not occur and would typically be the result 
 *  of a bug in the Tapestry code.
 *   
 *  @author Mindbridge
 *  @version $Id$
 *  @since 3.0
 */
public class CodeGenerationException extends RuntimeException
{
	Throwable _cause;

    public CodeGenerationException()
    {
        super();
    }

    public CodeGenerationException(String message)
    {
        super(message);
    }

    public CodeGenerationException(String message, Throwable cause)
    {
        super(message);
        _cause = cause;
    }

    public CodeGenerationException(Throwable cause)
    {
        super();
        _cause = cause;
    }
    
    public Throwable getCause()
    {
    	return _cause;
    }
    
    

}
