001 package org.codehaus.groovy.control.messages;
002
003 import java.io.PrintWriter;
004
005 import org.codehaus.groovy.control.Janitor;
006 import org.codehaus.groovy.control.SourceUnit;
007 import org.codehaus.groovy.syntax.SyntaxException;
008
009
010 /**
011 * A class for error messages produced by the parser system.
012 *
013 * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
014 * @version $Id: SyntaxErrorMessage.java 2392 2005-07-01 03:01:19Z fraz $
015 */
016
017 public class SyntaxErrorMessage extends Message {
018 protected SyntaxException cause = null;
019 protected SourceUnit source;
020
021 public SyntaxErrorMessage(SyntaxException cause, SourceUnit source) {
022 this.cause = cause;
023 this.source = source;
024 cause.setSourceLocator(source.getName());
025 }
026
027
028 /**
029 * Returns the underlying SyntaxException.
030 */
031
032 public SyntaxException getCause() {
033 return this.cause;
034 }
035
036
037 /**
038 * Writes out a nicely formatted summary of the syntax error.
039 */
040
041 public void write(PrintWriter output, Janitor janitor) {
042 String name = source.getName();
043 int line = getCause().getStartLine();
044 int column = getCause().getStartColumn();
045 String sample = source.getSample(line, column, janitor);
046
047 output.print(name + ": " + line + ": " + getCause().getMessage());
048 if (sample != null) {
049 output.println();
050 output.print(sample);
051 output.println();
052 }
053 }
054
055
056 }
057
058
059