001 // Copyright 2008 Waterken Inc. under the terms of the MIT X license
002 // found at http://www.opensource.org/licenses/mit-license.html
003 package org.ref_send.log;
004
005 import java.io.Serializable;
006
007 import org.joe_e.Powerless;
008 import org.joe_e.Struct;
009 import org.joe_e.array.IntArray;
010 import org.joe_e.array.PowerlessArray;
011 import org.ref_send.Record;
012 import org.ref_send.deserializer;
013 import org.ref_send.name;
014
015 /**
016 * A source code location.
017 */
018 public class
019 CallSite extends Struct implements Powerless, Record, Serializable {
020 static private final long serialVersionUID = 1L;
021
022 /**
023 * call site's human meaningful name within the {@linkplain #source}
024 */
025 public final String name;
026
027 /**
028 * path to the source code containing the call site
029 */
030 public final String source;
031
032 /**
033 * call site's position within the {@linkplain #source} (optional)
034 * <p>
035 * The expected structure of this table defines a span from the start of the
036 * relevant source code to the end. The first row in the table is the start
037 * of the span and the second row is the end of the span. Each row lists the
038 * line number followed by the column number. For example, a span of code
039 * starting on line 5, column 8 and ending on line 6, column 12 is encoded
040 * as:
041 * </p>
042 * <p>
043 * <code>[ [ 5, 8 ], [ 6, 12 ] ]</code>
044 * </p>
045 * <p>
046 * The delimited span is inclusive, meaning the character at line 6, column
047 * 12 is included in the span defined above.
048 * </p>
049 * <p>
050 * If the end of the span is unknown, it may be omitted. If the column
051 * number is unknown, it may also be omitted. For example, in the case where
052 * only the starting line number is known:
053 * </p>
054 * <p>
055 * <code>[ [ 5 ] ]</code>
056 * </p>
057 * <p>
058 * If source span information is unknown, this member is <code>null</code>.
059 * </p>
060 * <p>
061 * Both lines and columns are numbered starting from one, so the first
062 * character in a source file is at <code>[ 1, 1 ]</code>. A column is a
063 * UTF-16 code unit, the same unit represented by a Java <code>char</code>.
064 * Lines are separated by any character sequence considered a Unicode <a
065 * href="http://en.wikipedia.org/wiki/Newline#Unicode">line terminator</a>.
066 * </p>
067 */
068 public final PowerlessArray<IntArray> span;
069
070 /**
071 * Constructs an instance.
072 * @param name {@link #name}
073 * @param source {@link #source}
074 * @param span {@link #span}
075 */
076 public @deserializer
077 CallSite(@name("name") final String name,
078 @name("source") final String source,
079 @name("span") final PowerlessArray<IntArray> span) {
080 this.name = name;
081 this.source = source;
082 this.span = span;
083 }
084 }