private void buildIndex()

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();
	}