1 16 package com.google.gwt.dev.js; 17 18 21 public class JsParserException extends Exception { 22 23 26 public static class SourceDetail { 27 private final int line; 28 29 private final int lineOffset; 30 31 private final String lineSource; 32 33 public SourceDetail(int line, String lineSource, int lineOffset) { 34 this.line = line; 35 this.lineSource = lineSource; 36 this.lineOffset = lineOffset; 37 } 38 39 public int getLine() { 40 return line; 41 } 42 43 public int getLineOffset() { 44 return lineOffset; 45 } 46 47 public String getLineSource() { 48 return lineSource; 49 } 50 } 51 52 private final SourceDetail sourceDetail; 53 54 public JsParserException(String msg) { 55 super(msg); 56 sourceDetail = null; 57 } 58 59 public JsParserException(String msg, int line, String lineSource, 60 int lineOffset) { 61 this(msg, line, lineSource, lineOffset, null); 62 } 63 64 public JsParserException(String msg, int line, String lineSource, 65 int lineOffset, Throwable cause) { 66 super(msg, cause); 67 sourceDetail = new SourceDetail(line, lineSource, lineOffset); 68 } 69 70 public JsParserException(String msg, Throwable cause) { 71 super(msg, cause); 72 sourceDetail = null; 73 } 74 75 public String getDescription() { 76 StringBuffer sb = new StringBuffer (); 77 78 if (sourceDetail != null) { 79 sb.append("Line "); 80 sb.append(sourceDetail.getLine()); 81 sb.append(": "); 82 sb.append(getMessage()); 83 sb.append("\n"); 84 sb.append("> "); 85 sb.append(sourceDetail.getLineSource()); 86 sb.append("\n> "); 87 for (int i = 0, n = sourceDetail.getLineOffset(); i < n; ++i) { 88 sb.append('-'); 89 } 90 sb.append('^'); 91 } else { 92 sb.append(getMessage()); 93 } 94 95 return sb.toString(); 96 } 97 98 104 public SourceDetail getSourceDetail() { 105 return sourceDetail; 106 } 107 } 108 | Popular Tags |