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.CSTNode;
008
009
010
011 /**
012 * A base class for compilation messages.
013 *
014 * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
015 *
016 * @version $Id: LocatedMessage.java,v 1.4 2005/06/10 09:55:30 cstein Exp $
017 */
018
019 public class LocatedMessage extends SimpleMessage
020 {
021 protected CSTNode context; // The CSTNode that indicates the location to which the message applies
022
023 public LocatedMessage( String message, CSTNode context, SourceUnit source )
024 {
025 super( message, source );
026 this.context = context;
027 }
028
029
030 public LocatedMessage( String message, Object data, CSTNode context, SourceUnit source )
031 {
032 super( message, data, source );
033 this.context = context;
034 }
035
036
037 public void write( PrintWriter writer, Janitor janitor )
038 {
039 SourceUnit source = (SourceUnit) owner;
040
041 String name = source.getName();
042 int line = context.getStartLine();
043 int column = context.getStartColumn();
044 String sample = source.getSample( line, column, janitor );
045
046 if( sample != null )
047 {
048 writer.println( source.getSample(line, column, janitor) );
049 }
050
051 writer.println( name + ": " + line + ": " + this.message );
052 writer.println("");
053 }
054
055 }
056
057
058
059