fix(projects): introduce workspace API and remove 'Project' model

This commit is contained in:
Akash Yadav
2024-07-01 15:58:06 +05:30
parent dba601b71e
commit 1165f12ccb
51 changed files with 674 additions and 538 deletions
@@ -19,17 +19,20 @@ package com.itsaky.androidide.lsp.api;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.itsaky.androidide.eventbus.events.project.ProjectInitializedEvent;
import com.itsaky.androidide.projects.Project;
import com.itsaky.androidide.projects.IWorkspace;
import com.itsaky.androidide.utils.ILogger;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
/**
* Thread-safe implementation of {@link ILanguageServerRegistry}.
@@ -117,14 +120,14 @@ public class DefaultLanguageServerRegistry extends ILanguageServerRegistry {
@Subscribe(threadMode = ThreadMode.BACKGROUND)
@SuppressWarnings("unused")
public void onProjectInitialized(ProjectInitializedEvent event) {
final var project = event.get(Project.class);
if (project == null) {
final var workspace = event.get(IWorkspace.class);
if (workspace == null) {
return;
}
ILogger.ROOT.debug("Dispatching ProjectInitializedEvent to language servers...");
for (final var server : mRegister.values()) {
server.setupWithProject(project);
server.setupWorkspace(workspace);
}
}
}
@@ -46,7 +46,7 @@ import com.itsaky.androidide.lsp.models.ReferenceResult
import com.itsaky.androidide.lsp.models.SignatureHelp
import com.itsaky.androidide.lsp.models.SignatureHelpParams
import com.itsaky.androidide.models.Range
import com.itsaky.androidide.projects.Project
import com.itsaky.androidide.projects.IWorkspace
import java.nio.file.Path
/**
@@ -90,14 +90,14 @@ interface ILanguageServer {
fun applySettings(settings: IServerSettings?)
/**
* Setup this language server with the given project. Servers are not expected to keep a reference
* to the provided project. Instead, use
* [getRootProject()][com.itsaky.androidide.projects.IProjectManager.rootProject] to
* obtain the project instance.
* Setup this language server with the given workspace. Servers are not expected to keep a reference
* to the provided workspace. Instead, use
* [getRootWorkspace()][com.itsaky.androidide.projects.IProjectManager.workspace] to
* obtain the workspace instance.
*
* @param project The initialized project.
* @param workspace The initialized workspace.
*/
fun setupWithProject(project: Project)
fun setupWorkspace(workspace: IWorkspace)
/**
* Compute code completions for the given completion params.
@@ -32,7 +32,8 @@ fun setupLookupForCompletion(file: File) {
}
fun setupLookupForCompletion(file: Path) {
val module = IProjectManager.getInstance().findModuleForFile(file, false) ?: return
val module =
IProjectManager.getInstance().getWorkspace()?.findModuleForFile(file, false) ?: return
val lookup = Lookup.getDefault()
lookup.update(ModuleProject.COMPLETION_MODULE_KEY, module)