List of usage examples for org.antlr.v4.runtime Token DEFAULT_CHANNEL
int DEFAULT_CHANNEL
To view the source code for org.antlr.v4.runtime Token DEFAULT_CHANNEL.
Click Source Link
From source file:org.ballerinalang.langserver.completions.spi.LSCompletionProvider.java
License:Open Source License
/** * Check whether the token stream corresponds to a action invocation or a function invocation. * * @param context Completion operation context * @return {@link Boolean} Whether invocation or Field Access *//*from w ww. j av a 2 s .c om*/ protected boolean isInvocationOrInteractionOrFieldAccess(LSContext context) { List<CommonToken> lhsTokens = context.get(CompletionKeys.LHS_TOKENS_KEY); if (lhsTokens == null) { return false; } List<CommonToken> lhsDefaultTokens = lhsTokens.stream() .filter(commonToken -> commonToken.getChannel() == Token.DEFAULT_CHANNEL) .collect(Collectors.toList()); return !lhsDefaultTokens.isEmpty() && ((CommonUtil.getLastItem(lhsDefaultTokens) .getType() == BallerinaParser.COLON) || (CommonUtil.getLastItem(lhsDefaultTokens).getType() == BallerinaParser.DOT) || (CommonUtil.getLastItem(lhsDefaultTokens).getType() == BallerinaParser.RARROW) || (CommonUtil.getLastItem(lhsDefaultTokens).getType() == BallerinaParser.LARROW) || (CommonUtil.getLastItem(lhsDefaultTokens).getType() == BallerinaParser.NOT) || (lhsDefaultTokens.size() >= 2 && (lhsDefaultTokens.get(lhsDefaultTokens.size() - 2).getType() == BallerinaParser.COLON || lhsDefaultTokens.get(lhsDefaultTokens.size() - 2) .getType() == BallerinaParser.DOT || lhsDefaultTokens.get(lhsDefaultTokens.size() - 2) .getType() == BallerinaParser.RARROW || lhsDefaultTokens.get(lhsDefaultTokens.size() - 2) .getType() == BallerinaParser.LARROW || lhsDefaultTokens.get(lhsDefaultTokens.size() - 2) .getType() == BallerinaParser.NOT))); }
From source file:org.ballerinalang.langserver.completions.TreeVisitor.java
License:Open Source License
/** * Check whether the cursor resides within the given node type's parameter context. * Node name is used to identify the correct node * /* ww w . j a v a 2 s .c o m*/ * @param nodeName Name of the node * @param nodeType Node type (Function, Resource, Action or Connector) * @return {@link Boolean} Whether the cursor is within the parameter context */ private boolean isWithinParameterContext(String nodeName, String nodeType, SymbolEnv env) { ParserRuleContext parserRuleContext = lsContext.get(CompletionKeys.PARSER_RULE_CONTEXT_KEY); TokenStream tokenStream = lsContext.get(CompletionKeys.TOKEN_STREAM_KEY); String terminalToken = ""; // If the parser rule context is not parameter context or parameter list context, we skipp the calculation if (!(parserRuleContext instanceof BallerinaParser.ParameterContext || parserRuleContext instanceof BallerinaParser.ParameterListContext)) { return false; } int startTokenIndex = parserRuleContext.getStart().getTokenIndex(); ArrayList<String> terminalKeywords = new ArrayList<>( Arrays.asList(UtilSymbolKeys.ACTION_KEYWORD_KEY, UtilSymbolKeys.CONNECTOR_KEYWORD_KEY, UtilSymbolKeys.FUNCTION_KEYWORD_KEY, UtilSymbolKeys.RESOURCE_KEYWORD_KEY)); ArrayList<Token> filteredTokens = new ArrayList<>(); Token openBracket = null; boolean isWithinParams = false; // Find the index of the closing bracket while (true) { if (startTokenIndex > tokenStream.size()) { // In the ideal case, should not reach this point startTokenIndex = -1; break; } Token token = tokenStream.get(startTokenIndex); String tokenString = token.getText(); if (tokenString.equals(")")) { break; } startTokenIndex++; } // Backtrack the token stream to find a terminal token while (true) { if (startTokenIndex < 0) { break; } Token token = tokenStream.get(startTokenIndex); String tokenString = token.getText(); if (terminalKeywords.contains(tokenString)) { terminalToken = tokenString; break; } if (token.getChannel() == Token.DEFAULT_CHANNEL) { filteredTokens.add(token); } startTokenIndex--; } Collections.reverse(filteredTokens); /* This particular logic identifies a matching pair of closing and opening bracket and then check whether the cursor is within those bracket pair */ if (nodeName.equals(filteredTokens.get(0).getText()) && terminalToken.equals(nodeType)) { String tokenText; for (Token token : filteredTokens) { tokenText = token.getText(); if (tokenText.equals("(")) { openBracket = token; } else if (tokenText.equals(")") && openBracket != null) { Position cursorPos = lsContext.get(DocumentServiceKeys.POSITION_KEY).getPosition(); int openBLine = openBracket.getLine() - 1; int openBCol = openBracket.getCharPositionInLine(); int closeBLine = token.getLine() - 1; int closeBCol = token.getCharPositionInLine(); int cursorLine = cursorPos.getLine(); int cursorCol = cursorPos.getCharacter(); isWithinParams = (cursorLine > openBLine && cursorLine < closeBLine) || (cursorLine == openBLine && cursorCol > openBCol && cursorLine < closeBLine) || (cursorLine > openBLine && cursorCol < closeBCol && cursorLine == closeBLine) || (cursorLine == openBLine && cursorLine == closeBLine && cursorCol >= openBCol && cursorCol <= closeBCol); if (isWithinParams) { break; } else { openBracket = null; } } } } if (isWithinParams) { this.populateSymbols(this.resolveAllVisibleSymbols(env), env); forceTerminateVisitor(); } return isWithinParams; }
From source file:org.ballerinalang.langserver.completions.util.CompletionVisitorUtil.java
License:Open Source License
/** * Check whether the cursor resides within the given node type's parameter context. * Node name is used to identify the correct node * * @param nodeName Name of the node * @param nodeType Node type (Function, Resource, Action or Connector) * @param env Symbol Environment * @param lsContext Language Server Operation Context * @param treeVisitor Completion tree visitor instance * @return {@link Boolean} Whether the cursor is within the parameter context *///from w w w . j ava 2s . co m public static boolean isWithinParameterContext(String nodeName, String nodeType, SymbolEnv env, LSContext lsContext, TreeVisitor treeVisitor) { ParserRuleContext parserRuleContext = lsContext.get(CompletionKeys.PARSER_RULE_CONTEXT_KEY); TokenStream tokenStream = lsContext.get(CompletionKeys.TOKEN_STREAM_KEY); String terminalToken = ""; // If the parser rule context is not parameter context or parameter list context, we skipp the calculation if (!(parserRuleContext instanceof BallerinaParser.ParameterContext || parserRuleContext instanceof BallerinaParser.ParameterListContext)) { return false; } int startTokenIndex = parserRuleContext.getStart().getTokenIndex(); ArrayList<String> terminalKeywords = new ArrayList<>( Arrays.asList(UtilSymbolKeys.ACTION_KEYWORD_KEY, UtilSymbolKeys.CONNECTOR_KEYWORD_KEY, UtilSymbolKeys.FUNCTION_KEYWORD_KEY, UtilSymbolKeys.RESOURCE_KEYWORD_KEY)); ArrayList<Token> filteredTokens = new ArrayList<>(); Token openBracket = null; boolean isWithinParams = false; // Find the index of the closing bracket while (true) { if (startTokenIndex > tokenStream.size()) { // In the ideal case, should not reach this point startTokenIndex = -1; break; } Token token = tokenStream.get(startTokenIndex); String tokenString = token.getText(); if (tokenString.equals(")")) { break; } startTokenIndex++; } // Backtrack the token stream to find a terminal token while (true) { if (startTokenIndex < 0) { break; } Token token = tokenStream.get(startTokenIndex); String tokenString = token.getText(); if (terminalKeywords.contains(tokenString)) { terminalToken = tokenString; break; } if (token.getChannel() == Token.DEFAULT_CHANNEL) { filteredTokens.add(token); } startTokenIndex--; } Collections.reverse(filteredTokens); /* This particular logic identifies a matching pair of closing and opening bracket and then check whether the cursor is within those bracket pair */ if (nodeName.equals(filteredTokens.get(0).getText()) && terminalToken.equals(nodeType)) { String tokenText; for (Token token : filteredTokens) { tokenText = token.getText(); if (tokenText.equals("(")) { openBracket = token; } else if (tokenText.equals(")") && openBracket != null) { Position cursorPos = lsContext.get(DocumentServiceKeys.POSITION_KEY).getPosition(); int openBLine = openBracket.getLine() - 1; int openBCol = openBracket.getCharPositionInLine(); int closeBLine = token.getLine() - 1; int closeBCol = token.getCharPositionInLine(); int cursorLine = cursorPos.getLine(); int cursorCol = cursorPos.getCharacter(); isWithinParams = (cursorLine > openBLine && cursorLine < closeBLine) || (cursorLine == openBLine && cursorCol > openBCol && cursorLine < closeBLine) || (cursorLine > openBLine && cursorCol < closeBCol && cursorLine == closeBLine) || (cursorLine == openBLine && cursorLine == closeBLine && cursorCol >= openBCol && cursorCol <= closeBCol); if (isWithinParams) { break; } else { openBracket = null; } } } } if (isWithinParams) { treeVisitor.populateSymbols(treeVisitor.resolveAllVisibleSymbols(env), env); treeVisitor.forceTerminateVisitor(); } return isWithinParams; }
From source file:org.ballerinalang.langserver.completions.util.filters.ConnectorInitExpressionItemFilter.java
License:Open Source License
/** * Get the first non-hidden token from the start index. * @param startIndex Start index/* w ww .j ava 2s . c o m*/ * @param loopIncrementer decider value used for iterating either left or right from startIndex * @param tokenStream Token Stream * @return {@link Token} Not Hidden Token */ private static Token getFirstNonHiddenToken(int startIndex, int loopIncrementer, TokenStream tokenStream) { int searchIndex = startIndex + loopIncrementer; while (true) { if (searchIndex < 0) { return null; } if (tokenStream.get(searchIndex).getChannel() == Token.DEFAULT_CHANNEL) { return tokenStream.get(searchIndex); } searchIndex += loopIncrementer; } }
From source file:org.ballerinalang.langserver.completions.util.filters.DelimiterBasedContentFilter.java
License:Open Source License
@Override public Either<List<CompletionItem>, List<SymbolInfo>> filterItems(LSContext ctx) { List<CommonToken> lhsTokens = ctx.get(CompletionKeys.LHS_TOKENS_KEY); List<CommonToken> defaultTokens = lhsTokens.stream() .filter(commonToken -> commonToken.getChannel() == Token.DEFAULT_CHANNEL) .collect(Collectors.toList()); String delimiter = CommonUtil.getLastItem(defaultTokens).getText(); String symbolToken = defaultTokens.get(defaultTokens.size() - 2).getText(); ArrayList<SymbolInfo> returnSymbolsInfoList = new ArrayList<>(); List<SymbolInfo> visibleSymbols = ctx.get(CompletionKeys.VISIBLE_SYMBOLS_KEY); SymbolInfo symbol = FilterUtils.getVariableByName(symbolToken, visibleSymbols); boolean isWorkerReceive = UtilSymbolKeys.LEFT_ARROW_SYMBOL_KEY.equals(delimiter); boolean isActionInvocation = UtilSymbolKeys.RIGHT_ARROW_SYMBOL_KEY.equals(delimiter) && CommonUtil.isClientObject(symbol.getScopeEntry().symbol); boolean isWorkerSend = !isActionInvocation && UtilSymbolKeys.RIGHT_ARROW_SYMBOL_KEY.equals(delimiter); if (UtilSymbolKeys.DOT_SYMBOL_KEY.equals(delimiter) || UtilSymbolKeys.BANG_SYMBOL_KEY.equals(delimiter) || isActionInvocation) {//from w w w . ja v a2 s . co m returnSymbolsInfoList.addAll( FilterUtils.getInvocationAndFieldSymbolsOnVar(ctx, symbolToken, delimiter, visibleSymbols)); } else if (isWorkerSend || isWorkerReceive) { List<SymbolInfo> filteredList = visibleSymbols.stream() .filter(symbolInfo -> symbolInfo.getScopeEntry().symbol.type instanceof BFutureType && ((BFutureType) symbolInfo.getScopeEntry().symbol.type).workerDerivative) .collect(Collectors.toList()); returnSymbolsInfoList.addAll(filteredList); } else if (UtilSymbolKeys.PKG_DELIMITER_KEYWORD.equals(delimiter)) { // We are filtering the package functions, actions and the types Either<List<CompletionItem>, List<SymbolInfo>> filteredList = this.getActionsFunctionsAndTypes(ctx, symbolToken, delimiter); if (filteredList.isLeft()) { return Either.forLeft(filteredList.getLeft()); } returnSymbolsInfoList.addAll(filteredList.getRight()); } return Either.forRight(returnSymbolsInfoList); }
From source file:org.ballerinalang.langserver.completions.util.filters.PackageActionFunctionAndTypesFilter.java
License:Open Source License
/** * Check whether the statement being writing is a connector init by analyzing the tokens. * @param startIndex Search start index * @param context Document service context * @return {@link Boolean} connector init or not *///from w ww. j a v a 2 s. c om private boolean isConnectorInit(int startIndex, TextDocumentServiceContext context) { int nonHiddenTokenCount = 0; int counter = startIndex - 1; TokenStream tokenStream = context.get(DocumentServiceKeys.TOKEN_STREAM_KEY); while (true) { Token token = tokenStream.get(counter); if (nonHiddenTokenCount == 2 && tokenStream.get(counter + 1).getText().equals(CREATE_KEYWORD)) { return true; } else if (nonHiddenTokenCount == 2) { break; } if (token.getChannel() == Token.DEFAULT_CHANNEL) { nonHiddenTokenCount++; } counter--; } return false; }
From source file:org.ballerinalang.langserver.completions.util.filters.PackageActionFunctionAndTypesFilter.java
License:Open Source License
/** * Get the package delimiter token index, which is the index of . or :. * @param completionContext Text Document Service context (Completion Context) * @return {@link Integer} Index of the delimiter *///from w w w . j a v a 2 s. com private int getPackageDelimiterTokenIndex(TextDocumentServiceContext completionContext) { ArrayList<String> terminalTokens = new ArrayList<>(Arrays.asList(new String[] { ";", "}", "{" })); int searchTokenIndex = completionContext.get(DocumentServiceKeys.TOKEN_INDEX_KEY); TokenStream tokenStream = completionContext.get(DocumentServiceKeys.TOKEN_STREAM_KEY); int delimiterIndex = -1; String currentTokenStr = tokenStream.get(searchTokenIndex).getText(); if (terminalTokens.contains(currentTokenStr)) { searchTokenIndex -= 1; while (true) { if (tokenStream.get(searchTokenIndex).getChannel() == Token.DEFAULT_CHANNEL) { break; } else { searchTokenIndex -= 1; } } } while (true) { if (searchTokenIndex >= tokenStream.size()) { break; } String tokenString = tokenStream.get(searchTokenIndex).getText(); if (".".equals(tokenString) || ":".equals(tokenString)) { delimiterIndex = searchTokenIndex; break; } else if (terminalTokens.contains(tokenString)) { break; } else { searchTokenIndex++; } } return delimiterIndex; }
From source file:org.ballerinalang.langserver.completions.util.sorters.CallableUnitBodyItemSorter.java
License:Open Source License
@Override public void sortItems(TextDocumentServiceContext ctx, List<CompletionItem> completionItems) { BLangNode previousNode = ctx.get(CompletionKeys.PREVIOUS_NODE_KEY); TokenStream tokenStream = ctx.get(DocumentServiceKeys.TOKEN_STREAM_KEY); if (ctx.get(DocumentServiceKeys.PARSER_RULE_CONTEXT_KEY) != null) { int currentTokenStart = ctx.get(DocumentServiceKeys.PARSER_RULE_CONTEXT_KEY).getStart().getTokenIndex(); Token nextToken = tokenStream.get(currentTokenStart + 1); int cursorLine = ctx.get(DocumentServiceKeys.POSITION_KEY).getPosition().getLine(); int cursorChar = ctx.get(DocumentServiceKeys.POSITION_KEY).getPosition().getCharacter(); if (nextToken.getChannel() != Token.DEFAULT_CHANNEL && (cursorLine > nextToken.getLine() - 1 || (cursorLine == nextToken.getLine() - 1 && cursorChar > nextToken.getCharPositionInLine()))) { completionItems.clear();/*w w w . j a va2 s.c o m*/ return; } } this.clearItemsIfWorkerExists(ctx, completionItems); if (previousNode == null) { this.populateWhenCursorBeforeOrAfterEp(completionItems); } else if (previousNode instanceof BLangVariableDef) { BType bLangType = ((BLangVariableDef) previousNode).var.type; if (bLangType instanceof BEndpointType) { this.populateWhenCursorBeforeOrAfterEp(completionItems); } else if (ctx.get(CompletionKeys.INVOCATION_STATEMENT_KEY) == null || !ctx.get(CompletionKeys.INVOCATION_STATEMENT_KEY)) { CompletionItem workerItem = this.getWorkerSnippet(); workerItem.setSortText(Priority.PRIORITY160.toString()); completionItems.add(workerItem); } } else if (previousNode instanceof BLangWorker) { completionItems.add(this.getWorkerSnippet()); } this.setPriorities(completionItems); }
From source file:org.ballerinalang.langserver.sourceprune.AbstractTokenTraverser.java
License:Open Source License
void alterTokenText(Token token) { this.removedTokens.add(new CommonToken(token)); if (token.getType() == BallerinaParser.NEW_LINE || token.getChannel() != Token.DEFAULT_CHANNEL) { return;/*from w ww . ja v a 2 s. c om*/ } ((CommonToken) token).setText(getNCharLengthEmptyLine(token.getText().length())); this.lastAlteredToken = token.getType(); }
From source file:org.eclipse.titan.designer.AST.ASN1.Block.java
License:Open Source License
@Override public int getChannel() { return Token.DEFAULT_CHANNEL; }