use of org.ballerinalang.langserver.completions.SymbolInfo in project ballerina by ballerina-lang.
the class PackageActionFunctionAndTypesFilter method fillSumIterableOperation.
private void fillSumIterableOperation(List<SymbolInfo> symbolInfoList) {
String lambdaSignature = Snippet.ITR_SUM.toString();
SymbolInfo.IterableOperationSignature signature = new SymbolInfo.IterableOperationSignature(ItemResolverConstants.ITR_SUM_LABEL, lambdaSignature);
SymbolInfo forEachSymbolInfo = new SymbolInfo();
forEachSymbolInfo.setIterableOperation(true);
forEachSymbolInfo.setIterableOperationSignature(signature);
symbolInfoList.add(forEachSymbolInfo);
}
use of org.ballerinalang.langserver.completions.SymbolInfo in project ballerina by ballerina-lang.
the class PackageActionFunctionAndTypesFilter method fillFilterIterableOperation.
private void fillFilterIterableOperation(BType bType, List<SymbolInfo> symbolInfoList) {
String params = getIterableOpLambdaParam(bType);
String lambdaSignature = Snippet.ITR_FILTER.toString().replace(UtilSymbolKeys.ITR_OP_LAMBDA_PARAM_REPLACE_TOKEN, params);
SymbolInfo.IterableOperationSignature signature = new SymbolInfo.IterableOperationSignature(ItemResolverConstants.ITR_FILTER_LABEL, lambdaSignature);
SymbolInfo forEachSymbolInfo = new SymbolInfo();
forEachSymbolInfo.setIterableOperation(true);
forEachSymbolInfo.setIterableOperationSignature(signature);
symbolInfoList.add(forEachSymbolInfo);
}
use of org.ballerinalang.langserver.completions.SymbolInfo in project ballerina by ballerina-lang.
the class ParserRuleMatchStatementContextResolver method resolveItems.
@Override
public ArrayList<CompletionItem> resolveItems(TextDocumentServiceContext completionContext) {
ArrayList<CompletionItem> completionItems = new ArrayList<>();
int currentTokenIndex = completionContext.get(DocumentServiceKeys.TOKEN_INDEX_KEY);
List<SymbolInfo> visibleSymbols = completionContext.get(CompletionKeys.VISIBLE_SYMBOLS_KEY);
TokenStream tokenStream = completionContext.get(DocumentServiceKeys.TOKEN_STREAM_KEY);
while (true) {
if (currentTokenIndex < 0) {
// Ideally should not come to this point
return completionItems;
}
Token token = CommonUtil.getPreviousDefaultToken(tokenStream, currentTokenIndex);
if (token.getText().equals(UtilSymbolKeys.MATCH_KEYWORD_KEY)) {
currentTokenIndex = token.getTokenIndex();
break;
} else {
currentTokenIndex = token.getTokenIndex();
}
}
String identifierMatched = CommonUtil.getNextDefaultToken(tokenStream, currentTokenIndex).getText();
SymbolInfo identifierSymbol = visibleSymbols.stream().filter(symbolInfo -> symbolInfo.getScopeEntry().symbol.getName().getValue().equals(identifierMatched)).findFirst().orElseGet(null);
if (identifierSymbol == null) {
return completionItems;
} else if (identifierSymbol.getScopeEntry().symbol.type instanceof BUnionType) {
Set<BType> memberTypes = ((BUnionType) identifierSymbol.getScopeEntry().symbol.type).getMemberTypes();
memberTypes.forEach(bType -> {
completionItems.add(this.populateCompletionItem(bType.toString(), ItemResolverConstants.B_TYPE, bType.toString()));
});
} else if (identifierSymbol.getScopeEntry().symbol.type instanceof BJSONType) {
ArrayList<Integer> typeTagsList = new ArrayList<>(Arrays.asList(TypeTags.INT, TypeTags.FLOAT, TypeTags.BOOLEAN, TypeTags.STRING, TypeTags.NULL, TypeTags.JSON));
List<SymbolInfo> filteredBasicTypes = visibleSymbols.stream().filter(symbolInfo -> {
BSymbol bSymbol = symbolInfo.getScopeEntry().symbol;
return bSymbol instanceof BTypeSymbol && typeTagsList.contains(bSymbol.getType().tag);
}).collect(Collectors.toList());
this.populateCompletionItemList(filteredBasicTypes, completionItems);
} else if (identifierSymbol.getScopeEntry().symbol.type instanceof BStructType) {
List<SymbolInfo> structSymbols = visibleSymbols.stream().filter(symbolInfo -> {
BSymbol bSymbol = symbolInfo.getScopeEntry().symbol;
return bSymbol instanceof BStructSymbol && !bSymbol.getName().getValue().startsWith(UtilSymbolKeys.ANON_STRUCT_CHECKER);
}).collect(Collectors.toList());
this.populateCompletionItemList(structSymbols, completionItems);
}
return completionItems;
}
use of org.ballerinalang.langserver.completions.SymbolInfo in project ballerina by ballerina-lang.
the class ParserRuleTypeNameContextResolver method filterEndpointContextSymbolInfo.
private static List<SymbolInfo> filterEndpointContextSymbolInfo(TextDocumentServiceContext context) {
List<SymbolInfo> symbolInfos = context.get(CompletionKeys.VISIBLE_SYMBOLS_KEY);
int currentTokenIndex = context.get(DocumentServiceKeys.TOKEN_INDEX_KEY) - 1;
TokenStream tokenStream = context.get(DocumentServiceKeys.TOKEN_STREAM_KEY);
Token packageAlias = CommonUtil.getPreviousDefaultToken(tokenStream, currentTokenIndex);
Token constraintStart = CommonUtil.getPreviousDefaultToken(tokenStream, packageAlias.getTokenIndex() - 1);
List<SymbolInfo> returnList = new ArrayList<>();
if (!(constraintStart.getText().equals("<") || constraintStart.getText().equals("create"))) {
PackageActionFunctionAndTypesFilter filter = new PackageActionFunctionAndTypesFilter();
returnList.addAll(filter.filterItems(context));
} else {
SymbolInfo packageSymbolInfo = symbolInfos.stream().filter(item -> {
Scope.ScopeEntry scopeEntry = item.getScopeEntry();
return item.getSymbolName().equals(packageAlias.getText()) && scopeEntry.symbol instanceof BPackageSymbol;
}).findFirst().orElse(null);
if (packageSymbolInfo != null) {
packageSymbolInfo.getScopeEntry().symbol.scope.entries.forEach((name, value) -> {
if (value.symbol.kind != null && value.symbol.kind.toString().equals(CONNECTOR_KIND)) {
returnList.add(new SymbolInfo(name.toString(), value));
}
});
}
}
return returnList;
}
use of org.ballerinalang.langserver.completions.SymbolInfo in project ballerina by ballerina-lang.
the class BLangEndpointContextResolver method resolveItems.
@Override
@SuppressWarnings("unchecked")
public ArrayList<CompletionItem> resolveItems(TextDocumentServiceContext completionContext) {
BLangNode bLangEndpoint = completionContext.get(CompletionKeys.SYMBOL_ENV_NODE_KEY);
ArrayList<CompletionItem> completionItems = new ArrayList<>();
ArrayList<SymbolInfo> configurationFields = new ArrayList<>();
List<BStructSymbol.BAttachedFunction> attachedFunctions = new ArrayList<>();
if (((BLangEndpoint) bLangEndpoint).type.tsymbol instanceof BStructSymbol) {
attachedFunctions.addAll(((BStructSymbol) ((BLangEndpoint) bLangEndpoint).type.tsymbol).attachedFuncs);
}
BStructSymbol.BAttachedFunction initFunction = attachedFunctions.stream().filter(bAttachedFunction -> bAttachedFunction.funcName.getValue().equals(INIT)).findFirst().orElseGet(null);
BVarSymbol configSymbol = initFunction.symbol.getParameters().get(0);
BType configSymbolType = configSymbol.getType();
if (configSymbolType instanceof BStructType) {
((BStructType) configSymbolType).getFields().forEach(bStructField -> configurationFields.add(new SymbolInfo(bStructField.getName().getValue(), new Scope.ScopeEntry(bStructField.symbol, null))));
}
this.populateCompletionItemList(configurationFields, completionItems);
return completionItems;
}
Aggregations