Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Improve language server wrapper implementation #88

Merged
merged 3 commits into from
Jun 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 28 additions & 29 deletions src/main/java/org/wso2/lsp4intellij/IntellijLanguageClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@

public class IntellijLanguageClient implements ApplicationComponent {

private static Logger LOG = Logger.getInstance(IntellijLanguageClient.class);

private static final Map<Pair<String, String>, LanguageServerWrapper> extToLanguageWrapper = new ConcurrentHashMap<>();
private static Map<String, Set<LanguageServerWrapper>> projectToLanguageWrappers = new ConcurrentHashMap<>();
private static Map<String, LanguageServerDefinition> extToServerDefinition = new ConcurrentHashMap<>();
private static Map<String, LSPExtensionManager> extToExtManager = new ConcurrentHashMap<>();

private static Logger LOG = Logger.getInstance(IntellijLanguageClient.class);

@Override
public void initComponent() {
// LSPState.getInstance.getState(); //Need that to trigger loadState
Expand Down Expand Up @@ -139,14 +139,14 @@ public static boolean isExtensionSupported(String ext) {
public static void editorOpened(Editor editor) {
VirtualFile file = FileDocumentManager.getInstance().getFile(editor.getDocument());
if (!FileUtils.isFileSupported(file)) {
LOG.debug("Handling open on a editor which host a virtual file");
LOG.debug("Handling open on a editor which host a LightVirtual/Null file");
return;
}

Project project = editor.getProject();
String rootPath = FileUtils.editorToProjectFolderPath(editor);
String rootUri = FileUtils.pathToUri(rootPath);
if (file != null && rootUri != null) {
if (rootUri != null && project != null) {
ApplicationUtils.pool(() -> {
String ext = file.getExtension();
final String fileName = file.getName();
Expand Down Expand Up @@ -183,23 +183,25 @@ public static void editorOpened(Editor editor) {

// Update project mapping for language servers
final String projectUri = FileUtils.pathToUri(project.getBasePath());
Set<LanguageServerWrapper> wrappers = projectToLanguageWrappers.get(projectUri);
if (wrappers == null) {
wrappers = new HashSet<>();
projectToLanguageWrappers.put(projectUri, wrappers);
}
if (!wrappers.contains(wrapper)) {
wrappers.add(wrapper);
}
Set<LanguageServerWrapper> wrappers = projectToLanguageWrappers
.computeIfAbsent(projectUri, k -> new HashSet<>());
wrappers.add(wrapper);
} else {
LOG.info("Wrapper already existing for " + ext + " , " + rootUri);
}
LOG.info("Adding file " + fileName);
wrapper.connect(editor);
} else {
LOG.warn("Could not find a server definition for " + ext);
}
});
} else {
LOG.warn("File for editor " + editor.getDocument().getText() + " is null");
if (rootUri == null) {
LOG.warn("File for editor " + editor.getDocument().getText() + " is null");
}
if (project == null) {
LOG.warn("Project for editor " + editor.getDocument().getText() + " is null");
}
}
}

Expand All @@ -211,22 +213,17 @@ public static void editorOpened(Editor editor) {
public static void editorClosed(Editor editor) {
VirtualFile file = FileDocumentManager.getInstance().getFile(editor.getDocument());
if (!FileUtils.isFileSupported(file)) {
LOG.debug("Handling close on a editor which host a virtual file");
LOG.debug("Handling close on a editor which host a LightVirtual/Null file");
return;
}

if (file != null) {
ApplicationUtils.pool(() -> {
String ext = file.getExtension();
LanguageServerWrapper serverWrapper = LanguageServerWrapper.forEditor(editor);
if (serverWrapper != null) {
LOG.info("Disconnecting " + FileUtils.editorToURIString(editor));
serverWrapper.disconnect(editor);
}
});
} else {
LOG.warn("File for editor " + editor.getDocument().getText() + " is null");
}
ApplicationUtils.pool(() -> {
LanguageServerWrapper serverWrapper = LanguageServerWrapper.forEditor(editor);
if (serverWrapper != null) {
LOG.info("Disconnecting " + FileUtils.editorToURIString(editor));
serverWrapper.disconnect(editor);
}
});
}

/**
Expand Down Expand Up @@ -339,11 +336,13 @@ private static void flattenExtensions() {

public static void removeWrapper(LanguageServerWrapper wrapper) {
if (wrapper.getProject() != null) {
extToLanguageWrapper.remove(new MutablePair<>(wrapper.getServerDefinition().ext,
FileUtils.pathToUri(wrapper.getProject().getBasePath())));
String[] extensions = wrapper.getServerDefinition().ext.split(LanguageServerDefinition.SPLIT_CHAR);
for (String ext : extensions) {
extToLanguageWrapper.remove(new MutablePair<>(ext,
FileUtils.pathToUri(wrapper.getProject().getBasePath())));
}
} else {
LOG.error("No attached projects found for wrapper");

}
}

Expand Down
Loading