@Override
public CompletableFuture<List<? extends SymbolInformation>> symbol(WorkspaceSymbolParams params) {
List<SymbolInformation> symbols = new ArrayList<>();
LSServiceOperationContext symbolsContext = new LSServiceOperationContext();
Map<String, Object[]> compUnits = new HashMap<>();
this.workspaceDocumentManager.getAllFilePaths().forEach(path -> {
symbolsContext.put(DocumentServiceKeys.SYMBOL_LIST_KEY, symbols);
symbolsContext.put(DocumentServiceKeys.FILE_URI_KEY, path.toUri().toString());
List<BLangPackage> bLangPackage = lsCompiler.getBLangPackages(symbolsContext, workspaceDocumentManager,
false, LSCustomErrorStrategy.class, true);
if (bLangPackage != null) {
bLangPackage.forEach(aPackage -> aPackage.compUnits.forEach(compUnit -> {
String unitName = compUnit.getName();
String sourceRoot = LSCompilerUtil.getSourceRoot(path);
String basePath = sourceRoot + File.separator + compUnit.getPosition().src.getPackageName();
String hash = generateHash(compUnit, basePath);
compUnits.put(hash, new Object[]{
new File(basePath + File.separator + unitName).toURI(), compUnit});
}));
}
});
compUnits.values().forEach(compilationUnit -> {
symbolsContext.put(DocumentServiceKeys.SYMBOL_LIST_KEY, symbols);
symbolsContext.put(DocumentServiceKeys.FILE_URI_KEY, compilationUnit[0].toString());
symbolsContext.put(DocumentServiceKeys.SYMBOL_QUERY, params.getQuery());
SymbolFindingVisitor visitor = new SymbolFindingVisitor(symbolsContext);
((BLangCompilationUnit) compilationUnit[1]).accept(visitor);
});
return CompletableFuture.completedFuture(symbols);
}