// Path: src/main/java/com/jenkov/container/ContainerException.java
// public class ContainerException extends RuntimeException {
// 
//     public static final long serialVersionUID = -1;
// 
//     protected List<InfoItem> infoItems =
//             new ArrayList<InfoItem>();
// 
//     public static class InfoItem{
//         public String errorContext = null;
//         public String errorCode  = null;
//         public String errorText  = null;
//         public InfoItem(String contextCode, String errorCode,
//                                      String errorText){
// 
//             this.errorContext = contextCode;
//             this.errorCode   = errorCode;
//             this.errorText   = errorText;
//         }
//     }
// 
// 
//     public ContainerException(String errorContext, String errorCode, String errorMessage){
//         super(errorMessage);
//         addInfo(errorContext, errorCode, errorMessage);
//     }
// 
//     public ContainerException(String errorContext, String errorCode, String errorMessage, Throwable cause){
//         super(errorMessage, cause);
//         addInfo(errorContext, errorCode, errorMessage);
//     }
// 
//     public ContainerException addInfo(String errorContext, String errorCode, String errorText){
//         this.infoItems.add(
//             new InfoItem(errorContext, errorCode, errorText));
//         return this;
//     }
// 
//     public List<InfoItem> getInfoItems() {
//         return infoItems;
//     }
// 
//     public String getCode(){
//         StringBuilder builder = new StringBuilder();
// 
//         for(int i = this.infoItems.size()-1 ; i >=0; i--){
//             InfoItem info =
//                 this.infoItems.get(i);
//             builder.append('[');
//             builder.append(info.errorContext);
//             builder.append(':');
//             builder.append(info.errorCode);
//             builder.append(']');
//         }
// 
//         return builder.toString();
//     }
// 
//     public String toString(){
//         StringBuilder builder = new StringBuilder();
// 
//         builder.append("Error Code  : " + getCode());
//         builder.append('\n');
// 
// 
//         //append additional context information.
//         for(int i = this.infoItems.size()-1 ; i >=0; i--){
//             InfoItem info =
//                 this.infoItems.get(i);
//             builder.append("Context Info: ");
//             builder.append('[');
//             builder.append(info.errorContext);
//             builder.append(':');
//             builder.append(info.errorCode);
//             builder.append(']');
//             builder.append(" : ");
//             builder.append(info.errorText);
//             if(i>0) builder.append('\n');
//         }
// 
//         //append root causes and text from this exception first.
//         if(getMessage() != null) {
//             builder.append('\n');
//             if(getCause() == null){
//                 builder.append(getMessage());
//             } else if(!getMessage().equals(getCause().toString())){
//                 builder.append(getMessage());
//             }
//         }
//         appendException(builder, getCause());
// 
//         return builder.toString();
//     }
// 
//     private void appendException(
//             StringBuilder builder, Throwable throwable){
//         if(throwable == null) return;
//         appendException(builder, throwable.getCause());
//         builder.append(throwable.toString());
//         builder.append('\n');
//     }
// }


import com.jenkov.container.ContainerException;
package com.jenkov.container.script;


/**
 * @author Jakob Jenkov - Copyright 2004-2006 Jenkov Development
 */
public class ParserException extends ContainerException {

    public ParserException(String errorContext, String errorCode, String errorMessage) {
        super(errorContext, errorCode, errorMessage);
    }

// Path: src/main/java/com/jenkov/container/ContainerException.java
// public class ContainerException extends RuntimeException {
// 
//     public static final long serialVersionUID = -1;
// 
//     protected List<InfoItem> infoItems =
//             new ArrayList<InfoItem>();
// 
//     public static class InfoItem{
//         public String errorContext = null;
//         public String errorCode  = null;
//         public String errorText  = null;
//         public InfoItem(String contextCode, String errorCode,
//                                      String errorText){
// 
//             this.errorContext = contextCode;
//             this.errorCode   = errorCode;
//             this.errorText   = errorText;
//         }
//     }
// 
// 
//     public ContainerException(String errorContext, String errorCode, String errorMessage){
//         super(errorMessage);
//         addInfo(errorContext, errorCode, errorMessage);
//     }
// 
//     public ContainerException(String errorContext, String errorCode, String errorMessage, Throwable cause){
//         super(errorMessage, cause);
//         addInfo(errorContext, errorCode, errorMessage);
//     }
// 
//     public ContainerException addInfo(String errorContext, String errorCode, String errorText){
//         this.infoItems.add(
//             new InfoItem(errorContext, errorCode, errorText));
//         return this;
//     }
// 
//     public List<InfoItem> getInfoItems() {
//         return infoItems;
//     }
// 
//     public String getCode(){
//         StringBuilder builder = new StringBuilder();
// 
//         for(int i = this.infoItems.size()-1 ; i >=0; i--){
//             InfoItem info =
//                 this.infoItems.get(i);
//             builder.append('[');
//             builder.append(info.errorContext);
//             builder.append(':');
//             builder.append(info.errorCode);
//             builder.append(']');
//         }
// 
//         return builder.toString();
//     }
// 
//     public String toString(){
//         StringBuilder builder = new StringBuilder();
// 
//         builder.append("Error Code  : " + getCode());
//         builder.append('\n');
// 
// 
//         //append additional context information.
//         for(int i = this.infoItems.size()-1 ; i >=0; i--){
//             InfoItem info =
//                 this.infoItems.get(i);
//             builder.append("Context Info: ");
//             builder.append('[');
//             builder.append(info.errorContext);
//             builder.append(':');
//             builder.append(info.errorCode);
//             builder.append(']');
//             builder.append(" : ");
//             builder.append(info.errorText);
//             if(i>0) builder.append('\n');
//         }
// 
//         //append root causes and text from this exception first.
//         if(getMessage() != null) {
//             builder.append('\n');
//             if(getCause() == null){
//                 builder.append(getMessage());
//             } else if(!getMessage().equals(getCause().toString())){
//                 builder.append(getMessage());
//             }
//         }
//         appendException(builder, getCause());
// 
//         return builder.toString();
//     }
// 
//     private void appendException(
//             StringBuilder builder, Throwable throwable){
//         if(throwable == null) return;
//         appendException(builder, throwable.getCause());
//         builder.append(throwable.toString());
//         builder.append('\n');
//     }
// }


// Path: src/main/java/com/jenkov/container/script/ParserException.java
import com.jenkov.container.ContainerException;

package com.jenkov.container.script;


/**
 * @author Jakob Jenkov - Copyright 2004-2006 Jenkov Development
 */
public class ParserException extends ContainerException {

    public ParserException(String errorContext, String errorCode, String errorMessage) {
        super(errorContext, errorCode, errorMessage);
    }

    public ParserException(String errorContext, String errorCode, String errorMessage, Throwable cause) {