/* * Copyright (c) 2006, 2008 Borland Software Corporation * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Artem Tikhomirov (Borland) - initial API and implementation */ package org.eclipse.gmf.internal.xpand.util; import java.util.Collection; public class ParserException extends Exception { private static final long serialVersionUID = 1L; private final ErrorLocationInfo[] errors; private final String qualifiedResourceName; private static String getMessage(String qualifiedName, ErrorLocationInfo[] errors) { assert errors != null && errors.length > 0; StringBuilder result = new StringBuilder("Following parser errors was reported while parsing " + qualifiedName + " resource:\n"); for (ErrorLocationInfo errorLocationInfo : errors) { result.append("\t"); result.append(errorLocationInfo.toString()); result.append("\n"); } return result.toString(); } public ParserException(String qualifiedName, Collection<? extends ErrorLocationInfo> errors) { this(qualifiedName, errors.toArray(new ErrorLocationInfo[errors.size()])); } public ParserException(String qualifiedName, ErrorLocationInfo... errors) { super(getMessage(qualifiedName, errors)); assert errors != null && errors.length > 0; this.errors = errors; this.qualifiedResourceName = qualifiedName; } public ErrorLocationInfo[] getParsingErrors() { return errors; } public String getResourceName() { return qualifiedResourceName; } public static class ErrorLocationInfo { public final int startLine; public final int startColumn; public final int endLine; public final int endColumn; public final String message; public ErrorLocationInfo(String message) { this(message, -1, -1, -1, -1); } public ErrorLocationInfo(String message, int startLine, int startColumn, int endLine, int endColumn) { this.message = message; this.startLine = startLine; this.startColumn = startColumn; this.endLine = endLine; this.endColumn = endColumn; } public String toString() { return startLine + ":" + startColumn + "-" + endLine + ":" + endColumn + " - " + message; } } }