use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.
the class IterableCodeDesugar method generateMapAggregator.
/**
* Generates following.
*
* result[key] = value;
*
* @param blockStmt target
* @param ctx current context
*/
private void generateMapAggregator(BLangBlockStmt blockStmt, IterableContext ctx) {
final DiagnosticPos pos = blockStmt.pos;
// create assignment result[key] = value
final BLangIndexBasedAccess indexAccessNode = (BLangIndexBasedAccess) TreeBuilder.createIndexBasedAccessNode();
indexAccessNode.pos = pos;
indexAccessNode.indexExpr = ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(0).symbol);
indexAccessNode.expr = ASTBuilderUtil.createVariableRef(pos, ctx.resultVar.symbol);
indexAccessNode.type = ctx.iteratorResultVariables.get(1).symbol.type;
final BLangAssignment valueAssign = ASTBuilderUtil.createAssignmentStmt(pos, blockStmt);
valueAssign.varRefs.add(indexAccessNode);
valueAssign.expr = ASTBuilderUtil.generateConversionExpr(ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(1).symbol), symTable.anyType, symResolver);
}
use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.
the class IterableCodeDesugar method generateArrayAggregator.
/**
* Generates following.
*
* result[count] = value;
* count = count + 1;
*
* @param blockStmt target
* @param ctx current context
*/
private void generateArrayAggregator(BLangBlockStmt blockStmt, IterableContext ctx) {
final DiagnosticPos pos = blockStmt.pos;
// create assignment result[count] = value;
final BLangIndexBasedAccess indexAccessNode = (BLangIndexBasedAccess) TreeBuilder.createIndexBasedAccessNode();
indexAccessNode.pos = pos;
indexAccessNode.indexExpr = ASTBuilderUtil.createVariableRef(pos, ctx.countVar.symbol);
indexAccessNode.expr = ASTBuilderUtil.createVariableRef(pos, ctx.resultVar.symbol);
indexAccessNode.type = ctx.iteratorResultVariables.get(0).symbol.type;
final BLangAssignment valueAssign = ASTBuilderUtil.createAssignmentStmt(pos, blockStmt);
valueAssign.varRefs.add(indexAccessNode);
valueAssign.expr = ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(0).symbol);
// create count = count + 1;
generateCountAggregator(blockStmt, ctx.countVar);
}
use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.
the class IterableCodeDesugar method generateForeach.
/**
* Generates statements for foreach operation.
*
* lambda(...)
*
* @param blockStmt target
* @param operation operation instance
*/
private void generateForeach(BLangBlockStmt blockStmt, Operation operation) {
final DiagnosticPos pos = operation.pos;
final BLangExpressionStmt exprStmt = ASTBuilderUtil.createExpressionStmt(pos, blockStmt);
exprStmt.expr = ASTBuilderUtil.createInvocationExpr(pos, operation.lambdaSymbol, Lists.of(operation.argVar), symResolver);
}
use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.
the class BLangPackageBuilder method endTransformerDef.
public void endTransformerDef(DiagnosticPos pos, Set<Whitespace> ws, boolean publicFunc, String name, boolean paramsAvailable) {
BLangTransformer transformer = (BLangTransformer) this.invokableNodeStack.pop();
transformer.pos = pos;
transformer.addWS(ws);
transformer.setName(this.createIdentifier(name));
if (paramsAvailable) {
this.varListStack.pop().forEach(variableNode -> {
((BLangVariable) variableNode).docTag = DocTag.PARAM;
transformer.addParameter(variableNode);
});
}
// get the source and the target params
List<VariableNode> mappingParams = this.varListStack.pop();
// set the first mapping-param as the source for transformer
VariableNode source = mappingParams.remove(0);
((BLangVariable) source).docTag = DocTag.RECEIVER;
transformer.setSource(source);
mappingParams.forEach(variableNode -> {
((BLangVariable) variableNode).docTag = DocTag.RECEIVER;
transformer.addReturnParameter(variableNode);
});
if (publicFunc) {
transformer.flagSet.add(Flag.PUBLIC);
}
this.compUnit.addTopLevelNode(transformer);
}
use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.
the class BinaryFileWriter method writeExecutableBinary.
public void writeExecutableBinary(BLangPackage packageNode, String fileName) {
if (fileName == null || fileName.isEmpty()) {
throw new IllegalArgumentException("invalid target file name");
}
if (!fileName.endsWith(BLANG_EXEC_FILE_SUFFIX)) {
fileName += BLANG_EXEC_FILE_SUFFIX;
}
// Generate code for the given executable
ProgramFile programFile = this.codeGenerator.generateBALX(packageNode);
ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
try {
ProgramFileWriter.writeProgram(programFile, byteArrayOS);
} catch (IOException e) {
throw new BLangCompilerException("error writing program file '" + fileName + "'", e);
}
final Path execFilePath = this.sourceDirectory.saveCompiledProgram(new ByteArrayInputStream(byteArrayOS.toByteArray()), fileName);
ServiceLoader<CompilerPlugin> processorServiceLoader = ServiceLoader.load(CompilerPlugin.class);
processorServiceLoader.forEach(plugin -> {
plugin.codeGenerated(execFilePath);
});
}
Aggregations