Package gw.lang.parser.exceptions
Class ParseIssue
- java.lang.Object
-
- java.lang.Throwable
-
- java.lang.Exception
-
- gw.lang.parser.exceptions.ParseIssue
-
- All Implemented Interfaces:
IParseIssue,java.io.Serializable
- Direct Known Subclasses:
ParseException,ParseWarning
public abstract class ParseIssue extends java.lang.Exception implements IParseIssue
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Integer_lineNumberprivate java.lang.Integer_lineOffsetprivate java.lang.Object[]_messageArgsprivate ResourceKey_messageKeyprivate IGosuClass_parentClassprivate IParsedElement_parentElementprivate java.lang.String_stateSourceprivate ISymbolTable_symbolTableprivate java.lang.Integer_tokenColumnprivate java.lang.Integer_tokenEndprivate java.lang.Integer_tokenStartprivate static intCONTEXT_LINESprivate static java.lang.StringSOURCE_DELIMITER
-
Constructor Summary
Constructors Modifier Constructor Description protectedParseIssue(IParserState parserState, ResourceKey key, java.lang.Object... msgArgs)protectedParseIssue(IParserState state, java.lang.Throwable t)protectedParseIssue(java.lang.Integer lineNumber, java.lang.Integer lineOffset, java.lang.Integer tokenColumn, java.lang.Integer tokenStart, java.lang.Integer tokenEnd, ISymbolTable symbolTable, ResourceKey key, java.lang.Object... msgArgs)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddLineOffset(int offset)voidadjustOffset(int offset, int lineNumOffset, int columnOffset)booleanappliesToPosition(int iPos)Returns true if this issue is relevant to the given positionprivate voiddebug()java.lang.ThrowablefillInStackTrace()Don't fill in stack trace since parse issues are not really "exceptional" in terms of the parser's Java implementation; we don't care much about the Java stack trace when these are thrown.protected static java.lang.StringformatError(ResourceKey key, java.lang.Object... msgArgs)intgetColumn()java.lang.StringgetConsoleMessage()java.lang.StringgetContextString()java.lang.StringgetContextStringNoLineNumbers()ITypegetExpectedType()intgetLine()java.lang.IntegergetLineNumber()java.lang.IntegergetLineOffset()intgetLineReportingOffset()java.lang.Object[]getMessageArgs()ResourceKeygetMessageKey()private java.lang.StringgetMyMessage()java.lang.StringgetPlainMessage()IParsedElementgetSource()Warning: Only valid if called from the parser thread.java.lang.StringgetStateSource()ISymbolTablegetSymbolTable()Warning: Only valid if called from the parser thread.java.lang.IntegergetTokenColumn()java.lang.IntegergetTokenEnd()java.lang.IntegergetTokenStart()java.lang.StringgetUIMessage()private voidinitFieldsFromParserState(IParserState parserState)static java.lang.StringmakeContextString(int lineOfError, java.lang.String source, int lineReportingOffset)private static java.lang.StringmakeContextString(int lineOfError, java.lang.String source, int lineReportingOffset, boolean showLineNumbers)private java.lang.Object[]normalizeMessageArgs(java.lang.Object[] args)Normalize all non string & non number args to string types to prevent race conditions wrt/ the TypeSystem lock when the message is formatted.voidresetPositions()voidresolve(IParserPart parserBase)voidsetMessage(ResourceKey key, java.lang.Object... args)voidsetSource(IParsedElement sourceOfError)voidsetStateSource(java.lang.String parserSource)-
Methods inherited from class java.lang.Throwable
addSuppressed, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface gw.lang.parser.IParseIssue
printStackTrace, setExpectedType
-
-
-
-
Field Detail
-
SOURCE_DELIMITER
private static final java.lang.String SOURCE_DELIMITER
- See Also:
- Constant Field Values
-
CONTEXT_LINES
private static final int CONTEXT_LINES
- See Also:
- Constant Field Values
-
_lineNumber
private java.lang.Integer _lineNumber
-
_lineOffset
private java.lang.Integer _lineOffset
-
_tokenColumn
private java.lang.Integer _tokenColumn
-
_tokenStart
private java.lang.Integer _tokenStart
-
_tokenEnd
private java.lang.Integer _tokenEnd
-
_messageKey
private ResourceKey _messageKey
-
_messageArgs
private java.lang.Object[] _messageArgs
-
_symbolTable
private ISymbolTable _symbolTable
-
_parentElement
private IParsedElement _parentElement
-
_stateSource
private java.lang.String _stateSource
-
_parentClass
private IGosuClass _parentClass
-
-
Constructor Detail
-
ParseIssue
protected ParseIssue(IParserState parserState, ResourceKey key, java.lang.Object... msgArgs)
-
ParseIssue
protected ParseIssue(java.lang.Integer lineNumber, java.lang.Integer lineOffset, java.lang.Integer tokenColumn, java.lang.Integer tokenStart, java.lang.Integer tokenEnd, ISymbolTable symbolTable, ResourceKey key, java.lang.Object... msgArgs)
-
ParseIssue
protected ParseIssue(IParserState state, java.lang.Throwable t)
-
-
Method Detail
-
debug
private void debug()
-
fillInStackTrace
public java.lang.Throwable fillInStackTrace()
Don't fill in stack trace since parse issues are not really "exceptional" in terms of the parser's Java implementation; we don't care much about the Java stack trace when these are thrown. Rather parse issues provide a means to tag parsed elements with issues discovered during parsing, such as syntax warnings and errors. Hence, the ParseIssue interface. Note this method is otherwise very costly from a performance standpoint.- Overrides:
fillInStackTracein classjava.lang.Throwable
-
initFieldsFromParserState
private void initFieldsFromParserState(IParserState parserState)
-
normalizeMessageArgs
private java.lang.Object[] normalizeMessageArgs(java.lang.Object[] args)
Normalize all non string & non number args to string types to prevent race conditions wrt/ the TypeSystem lock when the message is formatted.
-
formatError
protected static java.lang.String formatError(ResourceKey key, java.lang.Object... msgArgs)
-
getLineNumber
public java.lang.Integer getLineNumber()
-
getLineOffset
public java.lang.Integer getLineOffset()
-
addLineOffset
public void addLineOffset(int offset)
-
getTokenColumn
public java.lang.Integer getTokenColumn()
-
getTokenEnd
public java.lang.Integer getTokenEnd()
- Specified by:
getTokenEndin interfaceIParseIssue
-
getTokenStart
public java.lang.Integer getTokenStart()
- Specified by:
getTokenStartin interfaceIParseIssue
-
getContextString
public java.lang.String getContextString()
-
getContextStringNoLineNumbers
public java.lang.String getContextStringNoLineNumbers()
-
getStateSource
public java.lang.String getStateSource()
-
setStateSource
public void setStateSource(java.lang.String parserSource)
-
getMyMessage
private java.lang.String getMyMessage()
-
getPlainMessage
public java.lang.String getPlainMessage()
- Specified by:
getPlainMessagein interfaceIParseIssue- Returns:
- the raw message for this parse issue, with no formatting
-
getConsoleMessage
public java.lang.String getConsoleMessage()
- Specified by:
getConsoleMessagein interfaceIParseIssue- Returns:
- the message for this parse issue formatted for printing out to a console
-
makeContextString
public static java.lang.String makeContextString(int lineOfError, java.lang.String source, int lineReportingOffset)
-
makeContextString
private static java.lang.String makeContextString(int lineOfError, java.lang.String source, int lineReportingOffset, boolean showLineNumbers)
-
getUIMessage
public java.lang.String getUIMessage()
- Specified by:
getUIMessagein interfaceIParseIssue- Returns:
- the message formatted for use by an IDE
-
getLine
public int getLine()
- Specified by:
getLinein interfaceIParseIssue- Returns:
- the line that this issue is on
-
getColumn
public int getColumn()
- Specified by:
getColumnin interfaceIParseIssue
-
getSource
public IParsedElement getSource()
Warning: Only valid if called from the parser thread. Otherwise we null it out.- Specified by:
getSourcein interfaceIParseIssue- Returns:
- the parsed element that this issue is associated with
-
setSource
public void setSource(IParsedElement sourceOfError)
-
getSymbolTable
public ISymbolTable getSymbolTable()
Warning: Only valid if called from the parser thread. Otherwise we null it out.- Specified by:
getSymbolTablein interfaceIParseIssue- Returns:
- the symbol table state at the creation of this issue. Can return null if no symbol table is present.
-
appliesToPosition
public boolean appliesToPosition(int iPos)
Description copied from interface:IParseIssueReturns true if this issue is relevant to the given position- Specified by:
appliesToPositionin interfaceIParseIssue
-
getMessageKey
public ResourceKey getMessageKey()
- Specified by:
getMessageKeyin interfaceIParseIssue- Returns:
- the resource key for this ParseIssue, which can be used as a kind of identifier for the type of issue.
-
resolve
public void resolve(IParserPart parserBase)
- Specified by:
resolvein interfaceIParseIssue
-
resetPositions
public void resetPositions()
- Specified by:
resetPositionsin interfaceIParseIssue
-
adjustOffset
public void adjustOffset(int offset, int lineNumOffset, int columnOffset)
-
setMessage
public void setMessage(ResourceKey key, java.lang.Object... args)
-
getMessageArgs
public java.lang.Object[] getMessageArgs()
- Specified by:
getMessageArgsin interfaceIParseIssue
-
getLineReportingOffset
public int getLineReportingOffset()
-
getExpectedType
public IType getExpectedType()
- Specified by:
getExpectedTypein interfaceIParseIssue
-
-