Example usage for org.antlr.v4.runtime Token getTokenIndex

List of usage examples for org.antlr.v4.runtime Token getTokenIndex

Introduction

In this page you can find the example usage for org.antlr.v4.runtime Token getTokenIndex.

Prototype

int getTokenIndex();

Source Link

Document

An index from 0..n-1 of the token object in the input stream.

Usage

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;
}