org.antlr.v4.tool.ANTLRMessage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of antlr4 Show documentation
Show all versions of antlr4 Show documentation
The ANTLR 4 grammar compiler.
/*
* Copyright (c) 2012-2016 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
package org.antlr.v4.tool;
import org.antlr.runtime.Token;
import org.stringtemplate.v4.ST;
import java.util.Arrays;
public class ANTLRMessage {
private static final Object[] EMPTY_ARGS = new Object[0];
private final ErrorType errorType;
private final Object[] args;
private final Throwable e;
// used for location template
public String fileName;
public int line = -1;
public int charPosition = -1;
public Grammar g;
/** Most of the time, we'll have a token such as an undefined rule ref
* and so this will be set.
*/
public Token offendingToken;
public ANTLRMessage(ErrorType errorType) {
this(errorType, (Throwable)null, Token.INVALID_TOKEN);
}
public ANTLRMessage(ErrorType errorType, Token offendingToken, Object... args) {
this(errorType, null, offendingToken, args);
}
public ANTLRMessage(ErrorType errorType, Throwable e, Token offendingToken, Object... args) {
this.errorType = errorType;
this.e = e;
this.args = args;
this.offendingToken = offendingToken;
}
public ErrorType getErrorType() {
return errorType;
}
public Object[] getArgs() {
if (args == null) {
return EMPTY_ARGS;
}
return args;
}
public ST getMessageTemplate(boolean verbose) {
ST messageST = new ST(getErrorType().msg);
messageST.impl.name = errorType.name();
messageST.add("verbose", verbose);
Object[] args = getArgs();
for (int i=0; i0 ) attr += i + 1;
messageST.add(attr, args[i]);
}
if ( args.length<2 ) messageST.add("arg2", null); // some messages ref arg2
Throwable cause = getCause();
if ( cause!=null ) {
messageST.add("exception", cause);
messageST.add("stackTrace", cause.getStackTrace());
}
else {
messageST.add("exception", null); // avoid ST error msg
messageST.add("stackTrace", null);
}
return messageST;
}
public Throwable getCause() {
return e;
}
@Override
public String toString() {
return "Message{" +
"errorType=" + getErrorType() +
", args=" + Arrays.asList(getArgs()) +
", e=" + getCause() +
", fileName='" + fileName + '\'' +
", line=" + line +
", charPosition=" + charPosition +
'}';
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy