List of usage examples for org.antlr.v4.runtime Token getTokenIndex
int getTokenIndex();
From source file:net.certiv.json.parser.JsonErrorListener.java
License:Open Source License
@Override public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { Parser parser = (Parser) recognizer; String name = parser.getSourceName(); TokenStream tokens = parser.getInputStream(); Token offSymbol = (Token) offendingSymbol; int thisError = offSymbol.getTokenIndex(); if (offSymbol.getType() == -1 && thisError == tokens.size() - 1) { Log.debug(this, name + ": Incorrect error: " + msg); return;//www . ja v a 2s .c o m } String offSymName = JsonLexer.VOCABULARY.getSymbolicName(offSymbol.getType()); if (thisError > lastError + 10) { lastError = thisError - 10; } for (int idx = lastError + 1; idx <= thisError; idx++) { Token token = tokens.get(idx); if (token.getChannel() != Token.HIDDEN_CHANNEL) Log.error(this, name + ":" + token.toString()); } lastError = thisError; List<String> stack = parser.getRuleInvocationStack(); Collections.reverse(stack); Log.error(this, name + " rule stack: " + stack); Log.error(this, name + " line " + line + ":" + charPositionInLine + " at " + offSymName + ": " + msg); }
From source file:org.ballerinalang.composer.service.workspace.suggetions.CapturePossibleTokenStrategy.java
License:Open Source License
/** * Checks whether cursor is within the whitespace region between current token to last token * @param token Token to be evaluated/* w ww . j a va 2 s. c om*/ * @param parser Parser Instance * @return true|false */ protected boolean isCursorBetweenGivenTokenAndLastNonHiddenToken(Token token, Parser parser) { boolean isCursorBetween = false; if (cursorPosition.equals(getSourcePosition(token))) { isCursorBetween = true; } else { Token lastNonHiddenToken = null; for (int tokenIdx = token.getTokenIndex() - 1; tokenIdx >= 0; tokenIdx--) { Token lastToken = parser.getTokenStream().get(tokenIdx); if (lastToken.getChannel() != Token.HIDDEN_CHANNEL) { lastNonHiddenToken = lastToken; break; } } if (lastNonHiddenToken != null) { if (cursorPosition.getLine() >= lastNonHiddenToken.getLine() && cursorPosition.getLine() <= token.getLine()) { if (cursorPosition.getLine() == lastNonHiddenToken.getLine()) { isCursorBetween = cursorPosition .getCharacter() >= (lastNonHiddenToken.getCharPositionInLine() + lastNonHiddenToken.getText().length()); } else if (cursorPosition.getLine() == token.getLine()) { isCursorBetween = cursorPosition.getCharacter() <= token.getCharPositionInLine(); } else { isCursorBetween = true; } } } } return isCursorBetween; }
From source file:org.ballerinalang.langserver.common.utils.CommonUtil.java
License:Open Source License
/** * Get n number of default tokens from a given start index. * * @param tokenStream Token Stream//from ww w. j a v a 2 s. c o m * @param n number of tokens to extract * @param startIndex Start token index * @return {@link List} List of tokens extracted */ public static List<Token> getNDefaultTokensToLeft(TokenStream tokenStream, int n, int startIndex) { List<Token> tokens = new ArrayList<>(); Token t; while (n > 0) { t = getDefaultTokenToLeftOrRight(tokenStream, startIndex, -1); if (t == null) { return new ArrayList<>(); } tokens.add(t); n--; startIndex = t.getTokenIndex(); } return Lists.reverse(tokens); }
From source file:org.ballerinalang.langserver.common.utils.CommonUtil.java
License:Open Source License
/** * Get the Nth Default token to the left of current token index. * * @param tokenStream Token Stream to traverse * @param startIndex Start position of the token stream * @param offset Number of tokens to traverse left * @return {@link Token} Nth Token// ww w . j a v a 2 s . c o m */ public static Token getNthDefaultTokensToLeft(TokenStream tokenStream, int startIndex, int offset) { Token token = null; int indexCounter = startIndex; for (int i = 0; i < offset; i++) { token = getPreviousDefaultToken(tokenStream, indexCounter); indexCounter = token.getTokenIndex(); } return token; }
From source file:org.ballerinalang.langserver.common.utils.CommonUtil.java
License:Open Source License
/** * Get the current token index from the token stream. * * @param context LSServiceOperationContext * @return {@link Integer} token index *//*from w w w.j ava 2 s. c o m*/ public static int getCurrentTokenFromTokenStream(LSContext context) { TokenStream tokenStream = context.get(CompletionKeys.TOKEN_STREAM_KEY); Position position = context.get(DocumentServiceKeys.POSITION_KEY).getPosition(); Token lastToken = null; int line = position.getLine(); int col = position.getCharacter(); int tokenLine; int tokenCol; int index = 0; if (tokenStream == null) { return -1; } while (true) { Token token = tokenStream.get(index); tokenLine = token.getLine() - 1; tokenCol = token.getCharPositionInLine(); if (tokenLine > line || (tokenLine == line && tokenCol >= col)) { break; } index++; lastToken = token; } return lastToken == null ? -1 : lastToken.getTokenIndex(); }
From source file:org.ballerinalang.langserver.completions.BallerinaCustomErrorStrategy.java
License:Open Source License
/** * Checks whether cursor is within the whitespace region between current token to last token. * @param token Token to be evaluated/*from w w w . jav a2s . co m*/ * @param parser Parser Instance * @return true|false */ private boolean isCursorBetweenGivenTokenAndLastNonHiddenToken(Token token, Parser parser) { this.setContextException(parser); boolean isCursorBetween = false; int line = this.context.get(DocumentServiceKeys.POSITION_KEY).getPosition().getLine(); int character = this.context.get(DocumentServiceKeys.POSITION_KEY).getPosition().getCharacter(); Token lastNonHiddenToken = null; for (int tokenIdx = token.getTokenIndex() - 1; tokenIdx >= 0; tokenIdx--) { Token lastToken = parser.getTokenStream().get(tokenIdx); if (lastToken.getChannel() != Token.HIDDEN_CHANNEL) { lastNonHiddenToken = lastToken; break; } } if (lastNonHiddenToken != null) { // Convert the token lines and char positions to zero based indexing int lastNonHiddenTokenLine = lastNonHiddenToken.getLine() - 1; int lastNonHiddenTokenChar = lastNonHiddenToken.getCharPositionInLine(); int tokenLine = token.getLine() - 1; int tokenChar = token.getCharPositionInLine(); if (line >= lastNonHiddenTokenLine && line <= tokenLine) { if (line == lastNonHiddenTokenLine) { isCursorBetween = character >= (lastNonHiddenTokenChar + lastNonHiddenToken.getText().length()); } else { isCursorBetween = line != tokenLine || character <= tokenChar; } } } return isCursorBetween; }
From source file:org.ballerinalang.langserver.completions.CompletionCustomErrorStrategy.java
License:Open Source License
private void removePendingTokensAfterThisToken(Parser recognizer, Token token, TokenRemovalStrategy currentStrategy) { int currentTokenIndex = recognizer.getCurrentToken().getTokenIndex(); if (token != null && (isInLastTermination(recognizer) || TokenRemovalStrategy.SYNC.equals(currentStrategy) && currentTokenIndex < token.getTokenIndex() || TokenRemovalStrategy.MATCH.equals(currentStrategy) && currentTokenIndex <= token.getTokenIndex())) { return;// w w w.j a v a 2 s . co m } while (removeTokenCount > 0) { forceConsumedTokens.push(recognizer.consume()); removeTokenCount--; } this.context.put(CompletionKeys.FORCE_CONSUMED_TOKENS_KEY, forceConsumedTokens); }
From source file:org.ballerinalang.langserver.completions.CompletionCustomErrorStrategy.java
License:Open Source License
private boolean isInFirstTokenOfCursorLine(Parser recognizer) { Token currentToken = recognizer.getCurrentToken(); if (firstTokenOfCursorLine == null) { firstTokenOfCursorLine = getFirstTokenOfCursorLine(recognizer); }/*ww w. j av a 2 s. c o m*/ return firstTokenOfCursorLine != null && currentToken.getTokenIndex() == firstTokenOfCursorLine.getTokenIndex(); }
From source file:org.ballerinalang.langserver.completions.CompletionCustomErrorStrategy.java
License:Open Source License
private boolean isInLastTermination(Parser recognizer) { Token currentToken = recognizer.getCurrentToken(); if (lastTerminationToken == null) { lastTerminationToken = getLastTerminationToken(recognizer.getInputStream()); }/*w w w .j ava 2 s . c om*/ return lastTerminationToken != null && currentToken.getTokenIndex() == lastTerminationToken.getTokenIndex(); }
From source file:org.ballerinalang.langserver.completions.CompletionCustomErrorStrategy.java
License:Open Source License
private Token getFirstTokenOfCursorLine(Parser recognizer) { TokenStream tokenStream = recognizer.getInputStream(); Token firstCursorLineToken = null;/* w w w . j ava 2s . com*/ int cursorLine = this.context.get(DocumentServiceKeys.POSITION_KEY).getPosition().getLine() + 1; int cursorCol = this.context.get(DocumentServiceKeys.POSITION_KEY).getPosition().getCharacter() + 1; int index = 1; Token beforeCursorToken = tokenStream.LT(index); int type = beforeCursorToken.getType(); int tLine = beforeCursorToken.getLine(); int tCol = beforeCursorToken.getCharPositionInLine(); if (cursorLine < tLine || (cursorLine == tLine && cursorCol <= tCol)) { return null; } firstCursorLineToken = (tLine == cursorLine) ? beforeCursorToken : null; while (type != BallerinaParser.EOF && (tLine <= cursorLine)) { int tokenIndex = beforeCursorToken.getTokenIndex(); if (tLine == cursorLine && (firstCursorLineToken == null || firstCursorLineToken.getTokenIndex() > tokenIndex)) { firstCursorLineToken = beforeCursorToken; } index++; beforeCursorToken = tokenStream.LT(index); type = beforeCursorToken.getType(); tLine = beforeCursorToken.getLine(); } return firstCursorLineToken; }