1 package jdk.incubator.code; 2 3 /** 4 * Source location information. 5 * 6 * @param sourceRef the reference to the source 7 * @param line the line in the source 8 * @param column the column in the source 9 */ 10 public record Location(String sourceRef, int line, int column) { 11 12 /** 13 * The location value, {@code null}, indicating no location information. 14 */ 15 public static final Location NO_LOCATION = null; 16 17 public Location(int line, int column) { 18 this(null, line, column); 19 } 20 21 @Override 22 public String toString() { 23 StringBuilder s = new StringBuilder(); 24 s.append(line).append(":").append(column); 25 if (sourceRef != null) { 26 s.append(":").append(sourceRef); 27 } 28 return s.toString(); 29 } 30 31 public static Location fromString(String s) { 32 String[] split = s.split(":", 3); 33 if (split.length < 2) { 34 throw new IllegalArgumentException(); 35 } 36 37 int line = Integer.parseInt(split[0]); 38 int column = Integer.parseInt(split[1]); 39 String sourceRef; 40 if (split.length == 3) { 41 sourceRef = split[2]; 42 } else { 43 sourceRef = null; 44 } 45 return new Location(sourceRef, line, column); 46 } 47 }