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