Handle project updated notifications from jdt.ls (#9983)

Signed-off-by: Valeriy Svydenko <vsvydenk@redhat.com>
6.19.x
Valeriy Svydenko 2018-06-21 13:38:39 +02:00 committed by Thomas Mäder
parent 17a75b9f5d
commit c2b0600e88
3 changed files with 48 additions and 29 deletions

View File

@ -83,21 +83,6 @@ public class ReimportMavenDependenciesAction extends AbstractPerspectiveAction {
javaLanguageExtensionServiceClient
.reImportMavenProjects(paramsDto)
.then(
updatedProjects -> {
for (final String path : updatedProjects) {
appContext
.getWorkspaceRoot()
.getContainer(path)
.then(
container -> {
if (container.isPresent()) {
container.get().synchronize();
}
});
}
// TODO update error markers in poms if needed
})
.catchError(
error -> {
notificationManager.notify(

View File

@ -10,8 +10,10 @@
*/
package org.eclipse.che.plugin.java.languageserver;
import static java.util.Collections.singletonList;
import static org.eclipse.che.api.languageserver.LanguageServiceUtils.removePrefixUri;
import static org.eclipse.che.api.languageserver.util.JsonUtil.convertToJson;
import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT;
import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECTS_CLASSPATH;
import com.google.inject.Inject;
@ -122,12 +124,22 @@ public class JavaLanguageServerLauncher implements LanguageServerConfig {
}
private ExecuteCommandParams convertParams(ExecuteCommandParams params) {
if (CLIENT_UPDATE_PROJECTS_CLASSPATH.equals(params.getCommand())) {
List<Object> fixedPathList = new ArrayList<>();
for (Object uri : params.getArguments()) {
fixedPathList.add(removePrefixUri(convertToJson(uri).getAsString()));
}
params.setArguments(fixedPathList);
String command = params.getCommand();
switch (command) {
case CLIENT_UPDATE_PROJECTS_CLASSPATH:
List<Object> fixedPathList = new ArrayList<>(params.getArguments().size());
for (Object uri : params.getArguments()) {
fixedPathList.add(removePrefixUri(convertToJson(uri).getAsString()));
}
params.setArguments(fixedPathList);
break;
case CLIENT_UPDATE_PROJECT:
Object projectUri = params.getArguments().get(0);
params.setArguments(
singletonList(removePrefixUri(convertToJson(projectUri).getAsString())));
break;
default:
break;
}
return params;
}

View File

@ -10,10 +10,14 @@
*/
package org.eclipse.che.plugin.languageserver.ide.service;
import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECT;
import static org.eclipse.che.jdt.ls.extension.api.Commands.CLIENT_UPDATE_PROJECTS_CLASSPATH;
import com.google.gwt.json.client.JSONString;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.project.node.ProjectClasspathChangedEvent;
import org.eclipse.lsp4j.ExecuteCommandParams;
@ -25,24 +29,42 @@ import org.eclipse.lsp4j.ExecuteCommandParams;
*/
@Singleton
public class ExecuteClientCommandProcessor {
private static final String CLIENT_UPDATE_PROJECTS_CLASSPATH =
"che.jdt.ls.extension.workspace.clientUpdateProjectsClasspath";
private EventBus eventBus;
private AppContext appContext;
@Inject
public ExecuteClientCommandProcessor(EventBus eventBus) {
public ExecuteClientCommandProcessor(EventBus eventBus, AppContext appContext) {
this.eventBus = eventBus;
this.appContext = appContext;
}
public void execute(ExecuteCommandParams params) {
if (CLIENT_UPDATE_PROJECTS_CLASSPATH.equals(params.getCommand())) {
for (Object project : params.getArguments()) {
eventBus.fireEvent(new ProjectClasspathChangedEvent(stringValue(project)));
}
switch (params.getCommand()) {
case CLIENT_UPDATE_PROJECTS_CLASSPATH:
for (Object project : params.getArguments()) {
eventBus.fireEvent(new ProjectClasspathChangedEvent(stringValue(project)));
}
break;
case CLIENT_UPDATE_PROJECT:
updateProject(stringValue(params.getArguments()));
break;
default:
break;
}
}
private void updateProject(String project) {
appContext
.getWorkspaceRoot()
.getContainer(project)
.then(
container -> {
if (container.isPresent()) {
container.get().synchronize();
}
});
}
private String stringValue(Object value) {
return value instanceof JSONString ? ((JSONString) value).stringValue() : String.valueOf(value);
}