void endAnnotationDef(Set<Whitespace> ws, String identifier, DiagnosticPos identifierPos, boolean publicAnnotation, boolean isTypeAttached) { BLangAnnotation annotationNode = (BLangAnnotation) this.annotationStack.pop(); annotationNode.addWS(ws); BLangIdentifier identifierNode = (BLangIdentifier) this.createIdentifier(identifier); identifierNode.pos = identifierPos; annotationNode.setName(identifierNode); if (publicAnnotation) { annotationNode.flagSet.add(Flag.PUBLIC); } while (!attachPointStack.empty()) { annotationNode.attachPoints.add(attachPointStack.pop()); } if (isTypeAttached) { annotationNode.typeNode = (BLangType) this.typeNodeStack.pop(); } this.compUnit.addTopLevelNode(annotationNode); }
void endCompilationUnit(Set<Whitespace> ws) { compUnit.addWS(ws); }
void addGlobalVariable(DiagnosticPos pos, Set<Whitespace> ws, String identifier, boolean isPublic, boolean isFinal, boolean isDeclaredWithVar, boolean isExpressionAvailable, boolean isListenerVar) { BLangVariable var = (BLangVariable) this.generateBasicVarNode(pos, ws, identifier, isDeclaredWithVar, isExpressionAvailable); if (isPublic) { var.flagSet.add(Flag.PUBLIC); } if (isFinal) { var.flagSet.add(Flag.FINAL); } if (isListenerVar) { var.flagSet.add(Flag.LISTENER); } attachAnnotations(var); attachMarkdownDocumentations(var); attachDeprecatedNode(var); this.compUnit.addTopLevelNode(var); }
void addImportPackageDeclaration(DiagnosticPos pos, Set<Whitespace> ws, String orgName, List<String> nameComps, String version, String alias) { List<BLangIdentifier> pkgNameComps = new ArrayList<>(); nameComps.forEach(e -> pkgNameComps.add((BLangIdentifier) this.createIdentifier(e))); BLangIdentifier versionNode = (BLangIdentifier) this.createIdentifier(version); BLangIdentifier aliasNode = (alias != null && !alias.isEmpty()) ? (BLangIdentifier) this.createIdentifier(alias) : pkgNameComps.get(pkgNameComps.size() - 1); BLangImportPackage importDcl = (BLangImportPackage) TreeBuilder.createImportPackageNode(); importDcl.pos = pos; importDcl.addWS(ws); importDcl.pkgNameComps = pkgNameComps; importDcl.version = versionNode; importDcl.orgName = (BLangIdentifier) this.createIdentifier(orgName); importDcl.alias = aliasNode; this.compUnit.addTopLevelNode(importDcl); if (this.imports.contains(importDcl)) { this.dlog.warning(pos, DiagnosticCode.REDECLARED_IMPORT_MODULE, importDcl.getQualifiedPackageName()); } else { this.imports.add(importDcl); } }
this.compUnit.addTopLevelNode(function);
this.compUnit.addTopLevelNode(function);
this.compUnit.addTopLevelNode(serviceNode); typeDef.pos = pos; serviceNode.serviceTypeDefinition = typeDef; this.compUnit.addTopLevelNode(typeDef); typeDef.name); serviceNode.variableNode = var; this.compUnit.addTopLevelNode(var);
this.compUnit.addTopLevelNode(typeDef); attachDeprecatedNode(typeDefinition); attachAnnotations(typeDefinition); this.compUnit.addTopLevelNode(typeDefinition);
void addObjectType(DiagnosticPos pos, Set<Whitespace> ws, boolean isFieldAnalyseRequired, boolean isAnonymous, boolean isAbstract, boolean isClient, boolean isService) { BLangObjectTypeNode objectTypeNode = populateObjectTypeNode(pos, ws, isAnonymous); objectTypeNode.addWS(this.objectFieldBlockWs.pop()); objectTypeNode.isFieldAnalyseRequired = isFieldAnalyseRequired; if (isAbstract) { objectTypeNode.flagSet.add(Flag.ABSTRACT); } if (isClient) { objectTypeNode.flagSet.add(Flag.CLIENT); } if (isService) { objectTypeNode.flagSet.add(Flag.SERVICE); } if (!isAnonymous) { addType(objectTypeNode); return; } BLangTypeDefinition typeDef = (BLangTypeDefinition) TreeBuilder.createTypeDefinition(); // Generate a name for the anonymous object String genName = anonymousModelHelper.getNextAnonymousTypeKey(pos.src.pkgID); IdentifierNode anonTypeGenName = createIdentifier(genName); typeDef.setName(anonTypeGenName); typeDef.flagSet.add(Flag.PUBLIC); typeDef.typeNode = objectTypeNode; typeDef.pos = pos; this.compUnit.addTopLevelNode(typeDef); addType(createUserDefinedType(pos, ws, (BLangIdentifier) TreeBuilder.createIdentifierNode(), typeDef.name)); }
void addXMLNSDeclaration(DiagnosticPos pos, Set<Whitespace> ws, String namespaceUri, String prefix, boolean isTopLevel) { BLangXMLNS xmlns = (BLangXMLNS) TreeBuilder.createXMLNSNode(); BLangIdentifier prefixIdentifer = (BLangIdentifier) TreeBuilder.createIdentifierNode(); prefixIdentifer.pos = pos; prefixIdentifer.value = prefix; addLiteralValue(pos, removeNthFromStart(ws, 1), TypeTags.STRING, namespaceUri); xmlns.namespaceURI = (BLangLiteral) exprNodeStack.pop(); xmlns.prefix = prefixIdentifer; xmlns.pos = pos; xmlns.addWS(ws); if (isTopLevel) { this.compUnit.addTopLevelNode(xmlns); return; } BLangXMLNSStatement xmlnsStmt = (BLangXMLNSStatement) TreeBuilder.createXMLNSDeclrStatementNode(); xmlnsStmt.xmlnsDecl = xmlns; xmlnsStmt.pos = pos; addStmtToCurrentBlock(xmlnsStmt); }
void addRecordType(DiagnosticPos pos, Set<Whitespace> ws, boolean isFieldAnalyseRequired, boolean isAnonymous, boolean sealed, boolean hasRestField) { // If there is an explicitly defined rest field, take it. BLangType restFieldType = null; if (hasRestField && !sealed) { restFieldType = (BLangType) this.typeNodeStack.pop(); } // Create an anonymous record and add it to the list of records in the current package. BLangRecordTypeNode recordTypeNode = populateRecordTypeNode(pos, ws, isAnonymous); recordTypeNode.isFieldAnalyseRequired = isFieldAnalyseRequired; recordTypeNode.sealed = sealed; recordTypeNode.restFieldType = restFieldType; if (!isAnonymous) { addType(recordTypeNode); return; } BLangTypeDefinition typeDef = (BLangTypeDefinition) TreeBuilder.createTypeDefinition(); // Generate a name for the anonymous object String genName = anonymousModelHelper.getNextAnonymousTypeKey(pos.src.pkgID); IdentifierNode anonTypeGenName = createIdentifier(genName); typeDef.setName(anonTypeGenName); typeDef.flagSet.add(Flag.PUBLIC); typeDef.typeNode = recordTypeNode; typeDef.pos = pos; this.compUnit.addTopLevelNode(typeDef); addType(createUserDefinedType(pos, ws, (BLangIdentifier) TreeBuilder.createIdentifierNode(), typeDef.name)); }
this.compUnit.addTopLevelNode(constantNode);