/** * Gets the alias for a given module from a bLang file root node. * * @param topCompilationUnit The root node. * @param packageName The module name. * @return The alias. */ private static String getAlias(BLangCompilationUnit topCompilationUnit, String packageName) { for (TopLevelNode topLevelNode : topCompilationUnit.getTopLevelNodes()) { if (topLevelNode instanceof BLangImportPackage) { BLangImportPackage importPackage = (BLangImportPackage) topLevelNode; String packagePath = importPackage.getPackageName().stream().map(BLangIdentifier::getValue).collect (Collectors.joining(".")); packagePath = importPackage.getOrgName().toString() + '/' + packagePath; if (packageName.equals(packagePath)) { return importPackage.getAlias().getValue(); } } } return null; } }
public static ImportPackageNode createImportPackageNode() { return new BLangImportPackage(); }
@Override public DiagnosticPos getPosition(BLangPackage bLangPackage) { final DiagnosticPos[] pos = {new DiagnosticPos(null, 0, 0, 0, 0)}; bLangPackage.getImports().forEach(pkg -> pos[0] = getMaximumPosition(pkg.getPosition(), pos[0])); return zeroColumnPosition(pos[0]); } },
BLangPackage sourceOwnerPkg = CommonUtil.getSourceOwnerBLangPackage(relativePath, currentBLangPkg); Optional bLangImport = CommonUtil.getCurrentFileImports(sourceOwnerPkg, ctx).stream() .filter(importPkg -> importPkg.getAlias().getValue().equals(pkgName)) .findFirst(); realOrgName = ((BLangImportPackage) bLangImport.get()).getOrgName().getValue(); } else { realPkgName = pkgName;
/** * Get the current file's imports. * * @param pkg BLangPackage to extract content from * @param ctx LS Operation Context * @return {@link List} List of imports in the current file */ public static List<BLangImportPackage> getCurrentFileImports(BLangPackage pkg, LSContext ctx) { String currentFile = ctx.get(DocumentServiceKeys.RELATIVE_FILE_PATH_KEY); return getCurrentFileTopLevelNodes(pkg, ctx).stream() .filter(topLevelNode -> topLevelNode instanceof BLangImportPackage) .map(topLevelNode -> (BLangImportPackage) topLevelNode) .filter(bLangImportPackage -> bLangImportPackage.pos.getSource().cUnitName.replace("/", FILE_SEPARATOR).equals(currentFile) && !(bLangImportPackage.getOrgName().getValue().equals("ballerina") && getPackageNameComponentsCombined(bLangImportPackage).equals("transaction"))) .collect(Collectors.toList()); }
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); } }
String pkgName = symbol.pkgID.getName().getValue(); String orgName = symbol.pkgID.getOrgName().getValue(); String alias = importPackage == null ? "" : importPackage.getAlias().getValue(); boolean isCaller = parameters.contains(symbol); return new SymbolMetaInfo.SymbolMetaInfoBuilder()
CompletionItem item = new CompletionItem(); item.setLabel(orgName + "/" + pkgName); item.setInsertText(CommonUtil.getLastItem(bLangImportPackage.getPackageName()).value); item.setDetail(ItemResolverConstants.PACKAGE_TYPE); item.setKind(CompletionItemKind.Module);
@Override public String toString() { return "import " + getQualifiedPackageName(); }
Optional bLangImport = CommonUtil.getCurrentFileImports(sourceOwnerPkg, context) .stream() .filter(importPkg -> importPkg.getAlias().getValue().equals(pkgName)) .findFirst(); realOrgName = ((BLangImportPackage) bLangImport.get()).getOrgName().getValue(); } else { realPackageName = pkgName;
if (pkgId.name.getValue().startsWith(Names.BUILTIN_PACKAGE.value)) { dlog.error(importPkgNode.pos, DiagnosticCode.MODULE_NOT_FOUND, importPkgNode.getQualifiedPackageName()); return; if (pkgSymbol == null) { dlog.error(importPkgNode.pos, DiagnosticCode.MODULE_NOT_FOUND, importPkgNode.getQualifiedPackageName()); return;
@Override public void visit(BLangImportPackage importPkgNode) { CursorPositionResolvers .getResolverByClass(cursorPositionResolver) .isCursorBeforeNode(importPkgNode.getPosition(), this, lsContext, importPkgNode, importPkgNode.symbol); }
@Override public DiagnosticPos getPosition(BLangPackage bLangPackage) { final DiagnosticPos[] pos = {new DiagnosticPos(null, 0, 0, 0, 0)}; //after imports bLangPackage.getImports().forEach(imp -> pos[0] = getMaximumPosition(imp.getPosition(), pos[0])); bLangPackage.getGlobalVariables().forEach(var -> pos[0] = getMaximumPosition(var.getPosition(), pos[0])); return zeroColumnPosition(pos[0]); } },
private TextEdit addPackage(String pkgName, BLangPackage srcOwnerPkg, LSContext context) { DiagnosticPos pos = null; // Filter the imports except the runtime import List<BLangImportPackage> imports = CommonUtil.getCurrentFileImports(srcOwnerPkg, context); if (!imports.isEmpty()) { BLangImportPackage lastImport = CommonUtil.getLastItem(imports); pos = lastImport.getPosition(); } int endCol = 0; int endLine = pos == null ? 0 : pos.getEndLine(); String editText = "import " + pkgName + ";\n"; Range range = new Range(new Position(endLine, endCol), new Position(endLine, endCol)); return new TextEdit(range, editText); }
/** * Get the text edit for an auto import statement. * * @param ctx Service operation context * @param orgName package org name * @param pkgName package name * @return {@link List} List of Text Edits to apply */ public static List<TextEdit> getAutoImportTextEdits(LSContext ctx, String orgName, String pkgName) { if (UtilSymbolKeys.BALLERINA_KW.equals(orgName) && UtilSymbolKeys.BUILTIN_KW.equals(pkgName)) { return null; } String relativePath = ctx.get(DocumentServiceKeys.RELATIVE_FILE_PATH_KEY); BLangPackage pkg = ctx.get(DocumentServiceKeys.CURRENT_BLANG_PACKAGE_CONTEXT_KEY); BLangPackage srcOwnerPkg = CommonUtil.getSourceOwnerBLangPackage(relativePath, pkg); List<BLangImportPackage> imports = CommonUtil.getCurrentFileImports(srcOwnerPkg, ctx); Position start = new Position(0, 0); if (!imports.isEmpty()) { BLangImportPackage last = CommonUtil.getLastItem(imports); int endLine = last.getPosition().getEndLine(); start = new Position(endLine, 0); } String importStatement = ItemResolverConstants.IMPORT + " " + orgName + UtilSymbolKeys.SLASH_KEYWORD_KEY + pkgName + UtilSymbolKeys.SEMI_COLON_SYMBOL_KEY + CommonUtil.LINE_SEPARATOR; return Collections.singletonList(new TextEdit(new Range(start, start), importStatement)); }
private TextEdit addPackage(String pkgName, BLangPackage srcOwnerPkg, LSContext context) { DiagnosticPos pos = null; // Filter the imports except the runtime import List<BLangImportPackage> imports = CommonUtil.getCurrentFileImports(srcOwnerPkg, context); if (!imports.isEmpty()) { BLangImportPackage lastImport = CommonUtil.getLastItem(imports); pos = lastImport.getPosition(); } int endCol = 0; int endLine = pos == null ? 0 : pos.getEndLine(); String editText = "import " + pkgName + ";\n"; Range range = new Range(new Position(endLine, endCol), new Position(endLine, endCol)); return new TextEdit(range, editText); }
if (!imports.isEmpty()) { BLangImportPackage last = CommonUtil.getLastItem(imports); start = new Position(last.getPosition().getEndLine(), 0);