in com.microsoft.java.lsif.core/src/com/microsoft/java/lsif/core/internal/indexer/Indexer.java [109:159]
private void buildIndex(IPath path, IProgressMonitor monitor, LsifService lsif) throws JavaModelException {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
final ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
Group groupVertex = lsif.getVertexBuilder().group(ResourceUtils.fixURI(path.toFile().toURI()),
ConflictResolution.TAKEDB, path.lastSegment(), ResourceUtils.fixURI(path.toFile().toURI()));
LsifEmitter.getInstance().emit(groupVertex);
LsifEmitter.getInstance().emit(
lsif.getVertexBuilder().event(Event.EventScope.Group, Event.EventKind.BEGIN, groupVertex.getId()));
for (IProject proj : projects) {
if (proj == null) {
return;
}
IJavaProject javaProject = JavaCore.create(proj);
if (!javaProject.exists()) {
continue;
}
boolean hasPackageInformation = false;
try {
hasPackageInformation = generateExportPackageInformation(proj, monitor, lsif, javaProject);
} catch (Exception e) {
// OperationCanceledException, CoreException from WorkspaceHandler.getImporter
// GradleConnectionException, IllegalStateException from
// ProjectConnection.getModel
JavaLanguageServerPlugin.logException(e.getMessage(), e);
}
Project projVertex = lsif.getVertexBuilder().project(javaProject.getElementName());
LsifEmitter.getInstance().emit(projVertex);
LsifEmitter.getInstance().emit(
lsif.getVertexBuilder().event(Event.EventScope.Project, Event.EventKind.BEGIN, projVertex.getId()));
LsifEmitter.getInstance().emit(lsif.getEdgeBuilder().belongsTo(projVertex, groupVertex));
List<ICompilationUnit> sourceList = getAllSourceFiles(javaProject);
dumpParallelly(sourceList, threadPool, projVertex, lsif, hasPackageInformation, monitor);
emitReferenceEdges(lsif);
VisitorUtils.endAllDocument(lsif);
LsifEmitter.getInstance().emit(
lsif.getVertexBuilder().event(Event.EventScope.Project, Event.EventKind.END, projVertex.getId()));
}
LsifEmitter.getInstance()
.emit(lsif.getVertexBuilder().event(Event.EventScope.Group, Event.EventKind.END, groupVertex.getId()));
threadPool.shutdown();
}