diff --git a/agents/ls-java/pom.xml b/agents/ls-java/pom.xml
index 2d451b7124..5bb2d1be48 100644
--- a/agents/ls-java/pom.xml
+++ b/agents/ls-java/pom.xml
@@ -16,7 +16,7 @@
che-agents-parent
org.eclipse.che
- 6.1.0-SNAPSHOT
+ 6.2.0-SNAPSHOT
ls-java-agent
Language Server Java Agent
diff --git a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/window/Window.java b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/window/Window.java
index d97f1fa930..23e2fc4a5a 100644
--- a/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/window/Window.java
+++ b/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/window/Window.java
@@ -21,13 +21,11 @@ import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.impl.FocusImpl;
import com.google.web.bindery.event.shared.EventBus;
-import elemental.js.dom.JsElement;
import javax.inject.Inject;
import org.eclipse.che.ide.api.keybinding.KeyBindingAgent;
import org.eclipse.che.ide.ui.button.ButtonAlignment;
import org.eclipse.che.ide.ui.smartTree.KeyboardNavigationHandler;
import org.eclipse.che.ide.ui.window.event.WindowOpenedEvent;
-import org.vectomatic.dom.svg.ui.SVGResource;
/**
* Base class to create a window based panel with user defined widgets. In general, window contains
@@ -75,10 +73,10 @@ public abstract class Window implements IsWidget {
this.keyBinding = keyBinding;
}
- @Inject
- protected void setEventBus(EventBus eventBus) {
- this.eventBus = eventBus;
- }
+ @Inject
+ protected void setEventBus(EventBus eventBus) {
+ this.eventBus = eventBus;
+ }
// Configuration section
@@ -250,6 +248,7 @@ public abstract class Window implements IsWidget {
keyBinding.disable();
}
+ eventBus.fireEvent(new WindowOpenedEvent());
onShow();
windowManager.bringToFront(this);
@@ -264,9 +263,7 @@ public abstract class Window implements IsWidget {
}
/** Perform user actions after widget show. */
- protected void onShow() {
- eventBus.fireEvent(new WindowOpenedEvent());
- }
+ protected void onShow() {}
/** Perform user actions after widget hide. */
protected void onHide() {}
diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java
index b4a4fb9e05..3610b25436 100644
--- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java
+++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/navigation/filestructure/FileStructurePresenter.java
@@ -18,8 +18,6 @@ import org.eclipse.che.ide.api.editor.texteditor.TextEditor;
import org.eclipse.che.ide.api.resources.VirtualFile;
import org.eclipse.che.ide.ext.java.client.service.JavaLanguageExtensionServiceClient;
import org.eclipse.che.ide.ext.java.dto.DtoClientImpls;
-import org.eclipse.che.ide.ui.loaders.request.LoaderFactory;
-import org.eclipse.che.ide.ui.loaders.request.MessageLoader;
import org.eclipse.che.ide.util.loging.Log;
import org.eclipse.che.jdt.ls.extension.api.dto.ExtendedSymbolInformation;
import org.eclipse.che.jdt.ls.extension.api.dto.FileStructureCommandParameters;
@@ -61,55 +59,33 @@ public class FileStructurePresenter implements ElementSelectionDelegate {
- loader.hide();
- view.setInput(result);
- view.show();
- })
- .catchError(
- e -> {
- loader.hide();
- });
- } else {
- showInheritedMembers = false;
- view.setTitle(editorPartPresenter.getEditorInput().getFile().getName());
- view.setShowInherited(showInheritedMembers);
-
- if (!(editorPartPresenter instanceof TextEditor)) {
- Log.error(getClass(), "Open Declaration support only TextEditor as editor");
- return;
- }
- activeEditor = ((TextEditor) editorPartPresenter);
- VirtualFile file = activeEditor.getEditorInput().getFile();
- javaExtensionService
- .fileStructure(
- new DtoClientImpls.FileStructureCommandParametersDto(
- new FileStructureCommandParameters(dtoHelper.getUri(file), showInheritedMembers)))
- .then(
- result -> {
- loader.hide();
- view.setInput(result);
- view.show();
- })
- .catchError(
- e -> {
- loader.hide();
- Log.error(getClass(), e);
- });
+ if (!(editorPartPresenter instanceof TextEditor)) {
+ Log.error(getClass(), "Open Declaration support only TextEditor as editor");
+ return;
}
+
+ activeEditor = (TextEditor) editorPartPresenter;
+ view.setShowInherited(showInheritedMembers);
+ VirtualFile file = activeEditor.getEditorInput().getFile();
+ javaExtensionService
+ .fileStructure(
+ new DtoClientImpls.FileStructureCommandParametersDto(
+ new FileStructureCommandParameters(dtoHelper.getUri(file), showInheritedMembers)))
+ .then(
+ result -> {
+ view.setInput(file.getName(), result);
+ view.show();
+ showInheritedMembers = !showInheritedMembers;
+ })
+ .catchError(
+ e -> {
+ Log.error(getClass(), e);
+ });
}
@Override
public void onSelect(ExtendedSymbolInformation element) {
+ showInheritedMembers = false;
view.hide();
showInheritedMembers = false;
openHelper.openLocation(element.getInfo().getLocation());
@@ -117,7 +93,7 @@ public class FileStructurePresenter implements ElementSelectionDelegate delegate;
+
@Inject
- public FileStructureWindow(NodeFactory nodeFactory, JavaLocalizationConstant locale) {
- super(false);
+ public FileStructureWindow(
+ NodeFactory nodeFactory,
+ ActionManager actionManager,
+ PresentationFactory presentationFactor,
+ KeyBindingAgent keyBindingAgent,
+ JavaLocalizationConstant locale) {
+ super();
+ this.actionManager = actionManager;
+ this.presentationFactor = presentationFactor;
+ this.keyBindingAgent = keyBindingAgent;
this.locale = locale;
setWidget(UI_BINDER.createAndBindUi(this));
view = new FileStructureView(nodeFactory);
@@ -62,25 +86,58 @@ public final class FileStructureWindow extends Window
on ? locale.hideInheritedMembersLabel() : locale.showInheritedMembersLabel());
}
- public void setInput(List input) {
+ public void setInput(String title, List input) {
+ setTitle(title);
view.setInput(input);
}
- /** {@inheritDoc} */
@Override
- public void show() {
- super.show(view);
+ protected void onShow() {
view.onShow();
}
@Override
public void setDelegate(ElementSelectionDelegate delegate) {
view.setDelegate(delegate);
+ this.delegate = delegate;
}
@Override
- public void onClose() {
+ protected void onHide() {
view.onClose();
- super.hide();
+ delegate.onCancel();
+ }
+
+ @Override
+ public void onKeyPress(NativeEvent evt) {
+ handleKey(evt);
+ }
+
+ @Override
+ public void onEnterPress(NativeEvent evt) {
+ handleKey(evt);
+ }
+
+ private void handleKey(NativeEvent event) {
+ SignalEvent signalEvent = SignalEventUtils.create((Event) event, false);
+ CharCodeWithModifiers keyBinding =
+ keyBindingAgent.getKeyBinding(JavaExtension.JAVA_CLASS_STRUCTURE);
+ if (signalEvent == null || keyBinding == null) {
+ return;
+ }
+ int digest = CharCodeWithModifiers.computeKeyDigest(signalEvent);
+ if (digest == keyBinding.getKeyDigest()) {
+ Action action = actionManager.getAction(JavaExtension.JAVA_CLASS_STRUCTURE);
+ if (action != null) {
+ ActionEvent e = new ActionEvent(presentationFactor.getPresentation(action), actionManager);
+ action.update(e);
+
+ if (e.getPresentation().isEnabled()) {
+ event.preventDefault();
+ event.stopPropagation();
+ action.actionPerformed(e);
+ }
+ }
+ }
}
}
diff --git a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/organizeimports/OrganizeImportsPresenter.java b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/organizeimports/OrganizeImportsPresenter.java
index 4a5e8df738..4163aef2f6 100644
--- a/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/organizeimports/OrganizeImportsPresenter.java
+++ b/plugins/plugin-java/che-plugin-java-ext-lang-client/src/main/java/org/eclipse/che/ide/ext/java/client/organizeimports/OrganizeImportsPresenter.java
@@ -179,7 +179,7 @@ public class OrganizeImportsPresenter implements OrganizeImportsView.ActionDeleg
applyWorkspaceEditAction.applyWorkspaceEdit(result.getWorkspaceEdit());
} finally {
clientServerEventService.sendFileTrackingResumeEvent();
- view.hide();
+ view.close();
}
})
.catchError(
@@ -190,7 +190,7 @@ public class OrganizeImportsPresenter implements OrganizeImportsView.ActionDeleg
notificationManager.notify(title, message, FAIL, FLOAT_MODE);
} finally {
clientServerEventService.sendFileTrackingResumeEvent();
- view.hide();
+ view.close();
}
});
});
diff --git a/plugins/plugin-java/che-plugin-java-server/pom.xml b/plugins/plugin-java/che-plugin-java-server/pom.xml
index 60f362adc9..5249b5ea6d 100644
--- a/plugins/plugin-java/che-plugin-java-server/pom.xml
+++ b/plugins/plugin-java/che-plugin-java-server/pom.xml
@@ -16,7 +16,7 @@
che-plugin-java-parent
org.eclipse.che.plugin
- 6.1.0-SNAPSHOT
+ 6.2.0-SNAPSHOT
che-plugin-java-server
Che Plugin :: Java :: Language Server
@@ -93,6 +93,10 @@
org.eclipse.che.plugin
che-plugin-java-ext-lang-shared
+
+ org.eclipse.che.plugin
+ che-plugin-java-server
+
org.eclipse.lsp4j
org.eclipse.lsp4j
diff --git a/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/ProjectsListener.java b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/ProjectsListener.java
index e2ad5da037..696bb6a043 100644
--- a/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/ProjectsListener.java
+++ b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/ProjectsListener.java
@@ -13,13 +13,9 @@ package org.eclipse.che.plugin.java.languageserver;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import static org.eclipse.che.api.languageserver.service.LanguageServiceUtils.prefixURI;
-import static org.eclipse.che.api.languageserver.service.LanguageServiceUtils.removePrefixUri;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import javax.annotation.PostConstruct;
import org.eclipse.che.api.core.notification.EventService;
import org.eclipse.che.api.core.notification.EventSubscriber;
@@ -27,11 +23,7 @@ import org.eclipse.che.api.project.server.ProjectManager;
import org.eclipse.che.api.project.server.notification.PreProjectDeletedEvent;
import org.eclipse.che.api.project.server.notification.ProjectCreatedEvent;
import org.eclipse.che.api.project.server.notification.ProjectInitializedEvent;
-import org.eclipse.che.commons.lang.concurrent.LoggingUncaughtExceptionHandler;
-import org.eclipse.che.jdt.ls.extension.api.dto.JobResult;
import org.eclipse.che.jdt.ls.extension.api.dto.UpdateWorkspaceParameters;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Monitors projects activity and updates jdt.ls workspace.
@@ -40,31 +32,18 @@ import org.slf4j.LoggerFactory;
*/
@Singleton
public class ProjectsListener {
- private static final Logger LOG = LoggerFactory.getLogger(ProjectsListener.class);
-
- private final JavaLanguageServerExtensionService service;
private final EventService eventService;
- private final ExecutorService executorService;
private final ProjectManager projectManager;
- private final ProjectsSynchronizer projectsSynchronizer;
+ private final WorkspaceSynchronizer workspaceSynchronizer;
@Inject
public ProjectsListener(
- JavaLanguageServerExtensionService service,
EventService eventService,
ProjectManager projectManager,
- ProjectsSynchronizer projectsSynchronizer) {
- this.service = service;
+ WorkspaceSynchronizer workspaceSynchronizer) {
this.eventService = eventService;
this.projectManager = projectManager;
- this.projectsSynchronizer = projectsSynchronizer;
- this.executorService =
- Executors.newSingleThreadExecutor(
- new ThreadFactoryBuilder()
- .setNameFormat("WorkspaceUpdater-%d")
- .setUncaughtExceptionHandler(LoggingUncaughtExceptionHandler.getInstance())
- .setDaemon(true)
- .build());
+ this.workspaceSynchronizer = workspaceSynchronizer;
}
@PostConstruct
@@ -102,7 +81,7 @@ public class ProjectsListener {
String projectUri = prefixURI(event.getProjectPath());
UpdateWorkspaceParameters params =
new UpdateWorkspaceParameters(singletonList(projectUri), emptyList());
- doUpdateWorkspaceAsync(params);
+ workspaceSynchronizer.syncronizerWorkspaceAsync(params);
}
private void onPreProjectDeleted(PreProjectDeletedEvent event) {
@@ -113,7 +92,7 @@ public class ProjectsListener {
String projectUri = prefixURI(event.getProjectPath());
UpdateWorkspaceParameters params =
new UpdateWorkspaceParameters(emptyList(), singletonList(projectUri));
- doUpdateWorkspaceAsync(params);
+ workspaceSynchronizer.syncronizerWorkspaceAsync(params);
}
private void onProjectInitializedEvent(ProjectInitializedEvent event) {
@@ -124,54 +103,10 @@ public class ProjectsListener {
String projectUri = prefixURI(event.getProjectPath());
UpdateWorkspaceParameters params =
new UpdateWorkspaceParameters(singletonList(projectUri), emptyList());
- doUpdateWorkspaceAsync(params);
+ workspaceSynchronizer.syncronizerWorkspaceAsync(params);
}
private boolean isProjectRegistered(String path) {
return projectManager.isRegistered(path);
}
-
- private void doUpdateWorkspaceAsync(UpdateWorkspaceParameters updateWorkspaceParameters) {
- executorService.submit(
- (Runnable)
- () -> {
- JobResult jobResult = service.updateWorkspace(updateWorkspaceParameters);
-
- updateWorkspaceParameters
- .getAddedProjectsUri()
- .forEach(
- projectUri -> {
- String projectPath = removePrefixUri(projectUri);
- projectsSynchronizer.synchronize(projectPath);
- });
-
- switch (jobResult.getSeverity()) {
- case ERROR:
- LOG.error(
- "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
- jobResult.getResultCode(),
- jobResult.getMessage(),
- updateWorkspaceParameters.getAddedProjectsUri().toString(),
- updateWorkspaceParameters.getRemovedProjectsUri().toString());
- break;
- case WARNING:
- case CANCEL:
- LOG.warn(
- "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
- jobResult.getResultCode(),
- jobResult.getMessage(),
- updateWorkspaceParameters.getAddedProjectsUri().toString(),
- updateWorkspaceParameters.getRemovedProjectsUri().toString());
- break;
- default:
- LOG.info(
- "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
- jobResult.getResultCode(),
- jobResult.getMessage(),
- updateWorkspaceParameters.getAddedProjectsUri().toString(),
- updateWorkspaceParameters.getRemovedProjectsUri().toString());
- break;
- }
- });
- }
}
diff --git a/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/WorkspaceSynchronizer.java b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/WorkspaceSynchronizer.java
new file mode 100644
index 0000000000..bdc452c628
--- /dev/null
+++ b/plugins/plugin-java/che-plugin-java-server/src/main/java/org/eclipse/che/plugin/java/languageserver/WorkspaceSynchronizer.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2012-2018 Red Hat, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.che.plugin.java.languageserver;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.eclipse.che.commons.lang.concurrent.LoggingUncaughtExceptionHandler;
+import org.eclipse.che.jdt.ls.extension.api.dto.JobResult;
+import org.eclipse.che.jdt.ls.extension.api.dto.UpdateWorkspaceParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Monitors projects activity and updates jdt.ls workspace.
+ *
+ * @author Anatolii Bazko
+ */
+@Singleton
+public class WorkspaceSynchronizer {
+ private static final Logger LOG = LoggerFactory.getLogger(WorkspaceSynchronizer.class);
+
+ private final JavaLanguageServerExtensionService service;
+ private final ExecutorService executorService;
+ private final ProjectsSynchronizer projectsSynchronizer;
+
+ @Inject
+ public WorkspaceSynchronizer(
+ JavaLanguageServerExtensionService service, ProjectsSynchronizer projectsSynchronizer) {
+ this.service = service;
+ this.projectsSynchronizer = projectsSynchronizer;
+ this.executorService =
+ Executors.newSingleThreadExecutor(
+ new ThreadFactoryBuilder()
+ .setNameFormat("WorkspaceUpdater-%d")
+ .setUncaughtExceptionHandler(LoggingUncaughtExceptionHandler.getInstance())
+ .setDaemon(true)
+ .build());
+ }
+
+ public void syncronizerWorkspaceAsync(UpdateWorkspaceParameters updateWorkspaceParameters) {
+ executorService.submit(
+ () -> {
+ JobResult jobResult = service.updateWorkspace(updateWorkspaceParameters);
+
+ switch (jobResult.getSeverity()) {
+ case ERROR:
+ LOG.error(
+ "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
+ jobResult.getResultCode(),
+ jobResult.getMessage(),
+ updateWorkspaceParameters.getAddedProjectsUri().toString(),
+ updateWorkspaceParameters.getRemovedProjectsUri().toString());
+ break;
+ case WARNING:
+ case CANCEL:
+ LOG.warn(
+ "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
+ jobResult.getResultCode(),
+ jobResult.getMessage(),
+ updateWorkspaceParameters.getAddedProjectsUri().toString(),
+ updateWorkspaceParameters.getRemovedProjectsUri().toString());
+ break;
+ default:
+ LOG.info(
+ "Workspace updated. Result code: '{}', message: '{}'. Added projects: '{}', removed projects: '{}'",
+ jobResult.getResultCode(),
+ jobResult.getMessage(),
+ updateWorkspaceParameters.getAddedProjectsUri().toString(),
+ updateWorkspaceParameters.getRemovedProjectsUri().toString());
+ break;
+ }
+
+ updateWorkspaceParameters
+ .getAddedProjectsUri()
+ .forEach(projectsSynchronizer::synchronize);
+ });
+ }
+}
diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureTree.java b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureTree.java
index a4dc5dea5e..7a699f7686 100644
--- a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureTree.java
+++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureTree.java
@@ -12,6 +12,7 @@ package org.eclipse.che.plugin.languageserver.ide.filestructure;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.Event;
+import elemental.events.KeyboardEvent;
import org.eclipse.che.ide.ui.smartTree.NodeDescriptor;
import org.eclipse.che.ide.ui.smartTree.NodeLoader;
import org.eclipse.che.ide.ui.smartTree.NodeStorage;
@@ -35,6 +36,11 @@ public class FileStructureTree extends Tree {
onDoubleClick(event);
break;
default:
+ if (event instanceof KeyboardEvent && event.getKeyCode() == KeyboardEvent.KeyCode.ENTER) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+
super.onBrowserEvent(event);
}
}
diff --git a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureView.java b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureView.java
index 49cdd7faca..e36f55af4c 100644
--- a/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureView.java
+++ b/plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/filestructure/FileStructureView.java
@@ -60,7 +60,6 @@ public final class FileStructureView
}
public void setInput(List input) {
-
tree.getNodeStorage().clear();
for (ExtendedSymbolInformation symbol : input) {
tree.getNodeStorage().add(nodeFactory.create(delegate, symbol));
@@ -72,6 +71,7 @@ public final class FileStructureView
}
public void onShow() {
+ tree.setFocus(true);
if (!tree.getRootNodes().isEmpty()) {
tree.getSelectionModel().select(tree.getRootNodes().get(0), false);
}
diff --git a/plugins/plugin-maven/che-plugin-maven-server/pom.xml b/plugins/plugin-maven/che-plugin-maven-server/pom.xml
index 2427df3f91..d138e62769 100644
--- a/plugins/plugin-maven/che-plugin-maven-server/pom.xml
+++ b/plugins/plugin-maven/che-plugin-maven-server/pom.xml
@@ -97,6 +97,11 @@
+
+ org.eclipse.che.ls.jdt
+ jdt.ls.extension.api
+ ${che.ls.jdt.version}
+
org.eclipse.che.plugin
che-plugin-java-ext-lang-shared
@@ -105,6 +110,10 @@
org.eclipse.che.plugin
che-plugin-java-maven-tools
+
+ org.eclipse.che.plugin
+ che-plugin-java-server
+
org.eclipse.che.plugin
che-plugin-maven-generator-archetype
diff --git a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/handler/MavenProjectInitHandler.java b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/handler/MavenProjectInitHandler.java
index 571411b0fc..09d3365fba 100644
--- a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/handler/MavenProjectInitHandler.java
+++ b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/handler/MavenProjectInitHandler.java
@@ -11,18 +11,31 @@
*/
package org.eclipse.che.plugin.maven.server.projecttype.handler;
+import static org.eclipse.che.api.languageserver.service.LanguageServiceUtils.prefixURI;
import static org.eclipse.che.plugin.maven.shared.MavenAttributes.MAVEN_ID;
+import com.google.inject.Inject;
import com.google.inject.Singleton;
+import java.util.Collections;
import org.eclipse.che.api.core.ConflictException;
import org.eclipse.che.api.core.ForbiddenException;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.project.server.handlers.ProjectInitHandler;
+import org.eclipse.che.jdt.ls.extension.api.dto.UpdateWorkspaceParameters;
+import org.eclipse.che.plugin.java.languageserver.WorkspaceSynchronizer;
/** @author Vitaly Parfonov */
@Singleton
public class MavenProjectInitHandler implements ProjectInitHandler {
+
+ private final WorkspaceSynchronizer workspaceSynchronizer;
+
+ @Inject
+ public MavenProjectInitHandler(WorkspaceSynchronizer workspaceSynchronizer) {
+ this.workspaceSynchronizer = workspaceSynchronizer;
+ }
+
@Override
public String getProjectType() {
return MAVEN_ID;
@@ -30,5 +43,11 @@ public class MavenProjectInitHandler implements ProjectInitHandler {
@Override
public void onProjectInitialized(String projectFolder)
- throws ServerException, ForbiddenException, ConflictException, NotFoundException {}
+ throws ServerException, ForbiddenException, ConflictException, NotFoundException {
+
+ UpdateWorkspaceParameters params = new UpdateWorkspaceParameters();
+ params.setAddedProjectsUri(Collections.singletonList(prefixURI(projectFolder)));
+
+ workspaceSynchronizer.syncronizerWorkspaceAsync(params);
+ }
}