Add line numbers to ConfigDocumentParser errors

Add line numbers into the ConfigDocumentParser error messages,
as these were previously not being displayed.
This commit is contained in:
Preben Ingvaldsen 2015-03-25 11:52:50 -07:00
parent 7aff85dead
commit 05e7a0e176

View File

@ -27,6 +27,7 @@ final class ConfigDocumentParser {
} }
static private final class ParseContext { static private final class ParseContext {
private int lineNumber;
final private Stack<Token> buffer; final private Stack<Token> buffer;
final private Iterator<Token> tokens; final private Iterator<Token> tokens;
final private ConfigSyntax flavor; final private ConfigSyntax flavor;
@ -41,6 +42,7 @@ final class ConfigDocumentParser {
int arrayCount; int arrayCount;
ParseContext(ConfigSyntax flavor, Iterator<Token> tokens) { ParseContext(ConfigSyntax flavor, Iterator<Token> tokens) {
lineNumber = 1;
buffer = new Stack<Token>(); buffer = new Stack<Token>();
this.tokens = tokens; this.tokens = tokens;
this.flavor = flavor; this.flavor = flavor;
@ -74,7 +76,13 @@ final class ConfigDocumentParser {
Token t = nextToken(); Token t = nextToken();
if (Tokens.isIgnoredWhitespace(t) || Tokens.isComment(t) || Tokens.isNewline(t) || isUnquotedWhitespace(t)) { if (Tokens.isIgnoredWhitespace(t) || Tokens.isComment(t) || Tokens.isNewline(t) || isUnquotedWhitespace(t)) {
nodes.add(new ConfigNodeSingleToken(t)); nodes.add(new ConfigNodeSingleToken(t));
if (Tokens.isNewline(t)) {
lineNumber = t.lineNumber() + 1;
}
} else { } else {
int newNumber = t.lineNumber();
if (newNumber >= 0)
lineNumber = newNumber;
return t; return t;
} }
} }
@ -108,7 +116,7 @@ final class ConfigDocumentParser {
//do nothing //do nothing
} else if (Tokens.isNewline(t)) { } else if (Tokens.isNewline(t)) {
sawSeparatorOrNewline = true; sawSeparatorOrNewline = true;
lineNumber++;
// we want to continue to also eat // we want to continue to also eat
// a comma if there is one. // a comma if there is one.
} else if (t == Tokens.COMMA) { } else if (t == Tokens.COMMA) {
@ -197,7 +205,7 @@ final class ConfigDocumentParser {
} }
private ConfigException parseError(String message, Throwable cause) { private ConfigException parseError(String message, Throwable cause) {
return new ConfigException.Parse(SimpleConfigOrigin.newSimple(""), message, cause); return new ConfigException.Parse(SimpleConfigOrigin.newSimple("").withLineNumber(lineNumber), message, cause);
} }
private String previousFieldName(Path lastPath) { private String previousFieldName(Path lastPath) {