public void visit(BLangPackage pkgNode) { if (pkgNode.completedPhases.contains(CompilerPhase.TYPE_CHECK)) { return; } SymbolEnv pkgEnv = this.symTable.pkgEnvMap.get(pkgNode.symbol); // Visit constants first. pkgNode.topLevelNodes.stream().filter(pkgLevelNode -> pkgLevelNode.getKind() == NodeKind.CONSTANT) .forEach(constant -> analyzeDef((BLangNode) constant, pkgEnv)); pkgNode.topLevelNodes.stream().filter(pkgLevelNode -> pkgLevelNode.getKind() != NodeKind.CONSTANT) .filter(pkgLevelNode -> !(pkgLevelNode.getKind() == NodeKind.FUNCTION && ((BLangFunction) pkgLevelNode).flagSet.contains(Flag.LAMBDA))) .forEach(topLevelNode -> analyzeDef((BLangNode) topLevelNode, pkgEnv)); while (pkgNode.lambdaFunctions.peek() != null) { BLangLambdaFunction lambdaFunction = pkgNode.lambdaFunctions.poll(); BLangFunction function = lambdaFunction.function; lambdaFunction.type = function.symbol.type; analyzeDef(lambdaFunction.function, lambdaFunction.cachedEnv); } pkgNode.getTestablePkgs().forEach(testablePackage -> visit((BLangPackage) testablePackage)); pkgNode.completedPhases.add(CompilerPhase.TYPE_CHECK); }
@Override public void visit(BLangPackage pkgNode) { // Then visit each top-level element sorted using the compilation unit List<TopLevelNode> topLevelNodes = pkgNode.topLevelNodes.stream().filter(node -> node.getPosition().getSource().getCompilationUnitName().equals(this.fileName) ).collect(Collectors.toList()); if (topLevelNodes.isEmpty()) { terminateVisitor = true; acceptNode(null); } else { topLevelNodes.stream() .filter(CommonUtil.checkInvalidTypesDefs()) .forEach(topLevelNode -> acceptNode((BLangNode) topLevelNode)); } }
/** * Get the Documentation attachment for the service. * * @param bLangPackage BLangPackage built * @param line Start line of the service in the source * @return {@link DocAttachmentInfo} Documentation attachment for the service */ private static DocAttachmentInfo getServiceDocumentationByPosition(BLangPackage bLangPackage, int line) { for (TopLevelNode topLevelNode : bLangPackage.topLevelNodes) { if (topLevelNode instanceof BLangService && topLevelNode.getPosition().getStartLine() - 1 == line) { BLangService serviceNode = (BLangService) topLevelNode; return getServiceNodeDocumentation(serviceNode); } } return null; }
private void addTopLevelNode(BLangPackage pkgNode, TopLevelNode node) { NodeKind kind = node.getKind();
.filter(topLevelNode -> topLevelNode instanceof BLangTypeDefinition && ((BLangTypeDefinition) topLevelNode).symbol.kind.equals(SymbolKind.OBJECT) && topLevelNode.getPosition().getStartLine() - 1 == finalLine) .findAny() .orElseThrow(() -> new LSCommandExecutorException("Error Executing Create Initializer Command")); int lastFieldOffset; if (fields.isEmpty()) { Diagnostic.DiagnosticPosition position = objectNode.getPosition(); lastFieldLine = position.getStartLine() - 1; lastFieldOffset = position.getStartColumn() - 1 + 4;
public void visit(BLangPackage pkgNode) { if (pkgNode.completedPhases.contains(CompilerPhase.CODE_GEN)) { return; } // Visit imports visitImports(pkgNode); // Visit top level constructs visitTopLevelNodes(pkgNode); // Visit the builtin functions visitBuiltinFunctions(pkgNode, pkgNode.initFunction); visitBuiltinFunctions(pkgNode, pkgNode.startFunction); visitBuiltinFunctions(pkgNode, pkgNode.stopFunction); // We don't need to visit constants since we don't do any code generation for constants. pkgNode.topLevelNodes.stream() .filter(pkgLevelNode -> pkgLevelNode.getKind() != NodeKind.CONSTANT) .filter(pkgLevelNode -> pkgLevelNode.getKind() != NodeKind.VARIABLE && pkgLevelNode.getKind() != NodeKind.XMLNS) .forEach(pkgLevelNode -> genNode((BLangNode) pkgLevelNode, this.env)); // Add function symbol for all functions pkgNode.functions.forEach(funcNode -> { funcNode.symbol = funcNode.originalFuncSymbol; }); currentPkgInfo.addAttributeInfo(AttributeInfo.Kind.LINE_NUMBER_TABLE_ATTRIBUTE, lineNoAttrInfo); pkgNode.completedPhases.add(CompilerPhase.CODE_GEN); }