use of org.wso2.ballerinalang.compiler.tree.BLangImportPackage in project ballerina by ballerina-lang.
the class PackageLoader method addImportPkg.
// Private methods
private void addImportPkg(BLangPackage bLangPackage, String orgName, String sourcePkgName, String version) {
List<Name> nameComps = getPackageNameComps(sourcePkgName);
List<BLangIdentifier> pkgNameComps = new ArrayList<>();
nameComps.forEach(comp -> {
IdentifierNode node = TreeBuilder.createIdentifierNode();
node.setValue(comp.value);
pkgNameComps.add((BLangIdentifier) node);
});
BLangIdentifier orgNameNode = (BLangIdentifier) TreeBuilder.createIdentifierNode();
orgNameNode.setValue(orgName);
BLangIdentifier versionNode = (BLangIdentifier) TreeBuilder.createIdentifierNode();
versionNode.setValue(version);
BLangImportPackage importDcl = (BLangImportPackage) TreeBuilder.createImportPackageNode();
importDcl.pos = bLangPackage.pos;
importDcl.pkgNameComps = pkgNameComps;
importDcl.orgName = orgNameNode;
importDcl.version = versionNode;
BLangIdentifier alias = (BLangIdentifier) TreeBuilder.createIdentifierNode();
alias.setValue(names.merge(Names.DOT, nameComps.get(nameComps.size() - 1)).value);
importDcl.alias = alias;
bLangPackage.imports.add(importDcl);
}
use of org.wso2.ballerinalang.compiler.tree.BLangImportPackage in project ballerina by ballerina-lang.
the class TreeVisitor method visit.
public void visit(BLangImportPackage importPkgNode) {
BPackageSymbol pkgSymbol = importPkgNode.symbol;
SymbolEnv pkgEnv = symTable.pkgEnvMap.get(pkgSymbol);
acceptNode(pkgEnv.node, pkgEnv);
}
use of org.wso2.ballerinalang.compiler.tree.BLangImportPackage in project ballerina by ballerina-lang.
the class SwaggerConverterUtils method getAlias.
/**
* Gets the alias for a given package from a bLang file root node.
* @param topCompilationUnit The root node.
* @param packageName The package 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("."));
if (packageName.equals(packagePath)) {
return importPackage.getAlias().getValue();
}
}
}
return null;
}
use of org.wso2.ballerinalang.compiler.tree.BLangImportPackage in project ballerina by ballerina-lang.
the class CommandExecutor method executeImportPackage.
/**
* Execute the command, import package.
* @param context Workspace service context
*/
private static void executeImportPackage(WorkspaceServiceContext context) {
String documentUri = null;
VersionedTextDocumentIdentifier textDocumentIdentifier = new VersionedTextDocumentIdentifier();
for (Object arg : context.get(ExecuteCommandKeys.COMMAND_ARGUMENTS_KEY)) {
if (((LinkedTreeMap) arg).get(ARG_KEY).equals(CommandConstants.ARG_KEY_DOC_URI)) {
documentUri = (String) ((LinkedTreeMap) arg).get(ARG_VALUE);
textDocumentIdentifier.setUri(documentUri);
context.put(DocumentServiceKeys.FILE_URI_KEY, documentUri);
} else if (((LinkedTreeMap) arg).get(ARG_KEY).equals(CommandConstants.ARG_KEY_PKG_NAME)) {
context.put(ExecuteCommandKeys.PKG_NAME_KEY, (String) ((LinkedTreeMap) arg).get(ARG_VALUE));
}
}
if (documentUri != null && context.get(ExecuteCommandKeys.PKG_NAME_KEY) != null) {
String fileContent = context.get(ExecuteCommandKeys.DOCUMENT_MANAGER_KEY).getFileContent(Paths.get(URI.create(documentUri)));
String[] contentComponents = fileContent.split("\\n|\\r\\n|\\r");
int totalLines = contentComponents.length;
int lastNewLineCharIndex = Math.max(fileContent.lastIndexOf("\n"), fileContent.lastIndexOf("\r"));
int lastCharCol = fileContent.substring(lastNewLineCharIndex + 1).length();
BLangPackage bLangPackage = TextDocumentServiceUtil.getBLangPackage(context, context.get(ExecuteCommandKeys.DOCUMENT_MANAGER_KEY), false, LSCustomErrorStrategy.class, false).get(0);
context.put(DocumentServiceKeys.CURRENT_PACKAGE_NAME_KEY, bLangPackage.symbol.getName().getValue());
String pkgName = context.get(ExecuteCommandKeys.PKG_NAME_KEY);
DiagnosticPos pos;
// Filter the imports except the runtime import
List<BLangImportPackage> imports = bLangPackage.getImports().stream().filter(bLangImportPackage -> !bLangImportPackage.getAlias().toString().equals(RUNTIME_PKG_ALIAS)).collect(Collectors.toList());
if (!imports.isEmpty()) {
BLangImportPackage lastImport = bLangPackage.getImports().get(bLangPackage.getImports().size() - 1);
pos = lastImport.getPosition();
} else if (imports.isEmpty() && bLangPackage.getPackageDeclaration() != null) {
pos = (DiagnosticPos) bLangPackage.getPackageDeclaration().getPosition();
} else {
pos = null;
}
int endCol = pos == null ? -1 : pos.getEndColumn() - 1;
int endLine = pos == null ? 0 : pos.getEndLine() - 1;
String remainingTextToReplace;
if (endCol != -1) {
int contentLengthToReplaceStart = fileContent.substring(0, fileContent.indexOf(contentComponents[endLine])).length() + endCol + 1;
remainingTextToReplace = fileContent.substring(contentLengthToReplaceStart);
} else {
remainingTextToReplace = fileContent;
}
String editText = (pos != null ? "\r\n" : "") + "import " + pkgName + ";" + (remainingTextToReplace.startsWith("\n") || remainingTextToReplace.startsWith("\r") ? "" : "\r\n") + remainingTextToReplace;
Range range = new Range(new Position(endLine, endCol + 1), new Position(totalLines + 1, lastCharCol));
applySingleTextEdit(editText, range, textDocumentIdentifier, context.get(ExecuteCommandKeys.LANGUAGE_SERVER_KEY).getClient());
}
}
Aggregations