use of org.wso2.ballerinalang.compiler.semantics.model.symbols.BEndpointVarSymbol in project ballerina by ballerina-lang.
the class Desugar method visitActionInvocationEndpoint.
private void visitActionInvocationEndpoint(BLangInvocation iExpr) {
final BEndpointVarSymbol epSymbol = (BEndpointVarSymbol) iExpr.expr.symbol;
// Convert to endpoint.getClient(). iExpr has to be a VarRef.
final BLangInvocation getClientExpr = ASTBuilderUtil.createInvocationExpr(iExpr.expr.pos, epSymbol.getClientFunction, Collections.emptyList(), symResolver);
getClientExpr.expr = iExpr.expr;
iExpr.expr = getClientExpr;
}
use of org.wso2.ballerinalang.compiler.semantics.model.symbols.BEndpointVarSymbol in project ballerina by ballerina-lang.
the class EndpointDesugar method generateServiceRegistered.
private BLangBlockStmt generateServiceRegistered(BEndpointVarSymbol endpoint, BLangService service, SymbolEnv env, BSymbol encSymbol, BSymbol varEncSymbol) {
final DiagnosticPos pos = service.pos;
final String epName = endpoint.name.value;
BLangBlockStmt temp = new BLangBlockStmt();
final BLangVariable epVariable = ASTBuilderUtil.createVariable(pos, epName, endpoint.type);
final Name name = endpoint.name;
epVariable.symbol = (BVarSymbol) symResolver.lookupMemberSymbol(pos, encSymbol.scope, env, name, SymTag.VARIABLE);
final BLangVariableDef serviceTypeDef = ASTBuilderUtil.createVariableDefStmt(pos, temp);
serviceTypeDef.var = ASTBuilderUtil.createVariable(pos, service.name + "type", symTable.typeDesc);
ASTBuilderUtil.defineVariable(serviceTypeDef.var, varEncSymbol, names);
final BLangUnaryExpr typeOfExpr = ASTBuilderUtil.createUnaryExpr(pos);
serviceTypeDef.var.expr = typeOfExpr;
typeOfExpr.operator = OperatorKind.TYPEOF;
typeOfExpr.expr = getTypeAccessExpression(pos, service.symbol.type);
typeOfExpr.type = symTable.typeDesc;
List<BLangVariable> args = Lists.of(serviceTypeDef.var);
if (endpoint.registerFunction != null && endpoint.registerFunction.params.size() == 2) {
// Endpoint is already desugared. Fix this correctly.
args.add(0, epVariable);
}
final BLangExpressionStmt expressionStmt = ASTBuilderUtil.createExpressionStmt(pos, temp);
final BLangInvocation iExpr = ASTBuilderUtil.createInvocationExpr(pos, endpoint.registerFunction, args, symResolver);
if (endpoint.registerFunction != null && endpoint.registerFunction.params.size() != 2) {
iExpr.expr = ASTBuilderUtil.createVariableRef(epVariable.pos, epVariable.symbol);
}
expressionStmt.expr = iExpr;
return temp;
}
use of org.wso2.ballerinalang.compiler.semantics.model.symbols.BEndpointVarSymbol in project ballerina by ballerina-lang.
the class PackageActionFunctionAndTypesFilter method invocationsAndFieldsOnIdentifier.
/**
* Get the invocations and fields against an identifier (functions, struct fields and types including the enums).
* @param context Text Document Service context (Completion Context)
* @param delimiterIndex delimiter index (index of either . or :)
* @return {@link ArrayList} List of filtered symbol info
*/
private ArrayList<SymbolInfo> invocationsAndFieldsOnIdentifier(TextDocumentServiceContext context, int delimiterIndex) {
ArrayList<SymbolInfo> actionFunctionList = new ArrayList<>();
TokenStream tokenStream = context.get(DocumentServiceKeys.TOKEN_STREAM_KEY);
List<SymbolInfo> symbols = context.get(CompletionKeys.VISIBLE_SYMBOLS_KEY);
SymbolTable symbolTable = context.get(DocumentServiceKeys.SYMBOL_TABLE_KEY);
String variableName = CommonUtil.getPreviousDefaultToken(tokenStream, delimiterIndex).getText();
SymbolInfo variable = this.getVariableByName(variableName, symbols);
String builtinPkgName = symbolTable.builtInPackageSymbol.name.getValue();
Map<Name, Scope.ScopeEntry> entries = new HashMap<>();
String currentPkgName = context.get(DocumentServiceKeys.CURRENT_PACKAGE_NAME_KEY);
if (variable == null) {
return actionFunctionList;
}
String packageID;
BType bType = variable.getScopeEntry().symbol.getType();
String bTypeValue;
if (variable.getScopeEntry().symbol instanceof BEndpointVarSymbol) {
BType getClientFuncType = ((BEndpointVarSymbol) variable.getScopeEntry().symbol).getClientFunction.type;
if (!UtilSymbolKeys.ACTION_INVOCATION_SYMBOL_KEY.equals(tokenStream.get(delimiterIndex).getText()) || !(getClientFuncType instanceof BInvokableType)) {
return actionFunctionList;
}
BType boundType = ((BInvokableType) getClientFuncType).retTypes.get(0);
packageID = boundType.tsymbol.pkgID.toString();
bTypeValue = boundType.toString();
} else if (bType instanceof BArrayType) {
packageID = ((BArrayType) bType).eType.tsymbol.pkgID.toString();
bTypeValue = bType.toString();
} else {
packageID = bType.tsymbol.pkgID.toString();
bTypeValue = bType.toString();
}
// Extract the package symbol. This is used to extract the entries of the particular package
SymbolInfo packageSymbolInfo = symbols.stream().filter(item -> {
Scope.ScopeEntry scopeEntry = item.getScopeEntry();
return (scopeEntry.symbol instanceof BPackageSymbol) && scopeEntry.symbol.pkgID.toString().equals(packageID);
}).findFirst().orElse(null);
if (packageSymbolInfo == null && packageID.equals(builtinPkgName)) {
// If the packageID is ballerina.builtin, we extract entries of builtin package
entries = symbolTable.builtInPackageSymbol.scope.entries;
} else if (packageSymbolInfo == null && packageID.equals(currentPkgName)) {
entries = this.getScopeEntries(bType, context);
} else if (packageSymbolInfo != null) {
// If the package exist, we extract particular entries from package
entries = packageSymbolInfo.getScopeEntry().symbol.scope.entries;
}
entries.forEach((name, scopeEntry) -> {
if (scopeEntry.symbol instanceof BInvokableSymbol && ((BInvokableSymbol) scopeEntry.symbol).receiverSymbol != null) {
String symbolBoundedName = ((BInvokableSymbol) scopeEntry.symbol).receiverSymbol.getType().toString();
if (symbolBoundedName.equals(bTypeValue)) {
// TODO: Need to handle the name in a proper manner
String[] nameComponents = name.toString().split("\\.");
SymbolInfo actionFunctionSymbol = new SymbolInfo(nameComponents[nameComponents.length - 1], scopeEntry);
actionFunctionList.add(actionFunctionSymbol);
}
} else if ((scopeEntry.symbol instanceof BTypeSymbol) && bTypeValue.equals(scopeEntry.symbol.type.toString())) {
// Get the struct fields
Map<Name, Scope.ScopeEntry> fields = scopeEntry.symbol.scope.entries;
fields.forEach((fieldName, fieldScopeEntry) -> {
actionFunctionList.add(new SymbolInfo(fieldName.getValue(), fieldScopeEntry));
});
}
});
// Populate possible iterable operators over the variable
populateIterableOperations(variable, actionFunctionList);
return actionFunctionList;
}
use of org.wso2.ballerinalang.compiler.semantics.model.symbols.BEndpointVarSymbol in project ballerina by ballerina-lang.
the class CommandUtil method getResourceNodeDocumentation.
static DocAttachmentInfo getResourceNodeDocumentation(BLangResource bLangResource, int replaceFrom) {
List<String> attributes = new ArrayList<>();
DiagnosticPos resourcePos = CommonUtil.toZeroBasedPosition(bLangResource.getPosition());
bLangResource.getParameters().forEach(bLangVariable -> {
if (!(bLangVariable.symbol instanceof BEndpointVarSymbol)) {
attributes.add(getDocAttributeFromBLangVariable(bLangVariable, resourcePos.getStartColumn()));
}
});
return new DocAttachmentInfo(getDocumentationAttachment(attributes, resourcePos.getStartColumn()), replaceFrom);
}
Aggregations