Fix after rebasing master branch
Signed-off-by: Anatoliy Bazko <abazko@redhat.com>6.19.x
parent
5fd609831d
commit
0e98bda4a0
|
|
@ -16,7 +16,7 @@
|
|||
<parent>
|
||||
<artifactId>che-agents-parent</artifactId>
|
||||
<groupId>org.eclipse.che</groupId>
|
||||
<version>6.1.0-SNAPSHOT</version>
|
||||
<version>6.2.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>ls-java-agent</artifactId>
|
||||
<name>Language Server Java Agent</name>
|
||||
|
|
|
|||
|
|
@ -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() {}
|
||||
|
|
|
|||
|
|
@ -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<Extended
|
|||
* @param editorPartPresenter the active editor
|
||||
*/
|
||||
public void show(EditorPartPresenter editorPartPresenter) {
|
||||
if (view.isShowing()) {
|
||||
showInheritedMembers = !showInheritedMembers;
|
||||
view.setShowInherited(showInheritedMembers);
|
||||
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();
|
||||
});
|
||||
} 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<Extended
|
|||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
view.hide();
|
||||
showInheritedMembers = false;
|
||||
activeEditor.setFocus();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.che.ide.ext.java.client.navigation.filestructure;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.NativeEvent;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.DockLayoutPanel;
|
||||
|
|
@ -18,10 +19,20 @@ import com.google.gwt.user.client.ui.Label;
|
|||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import elemental.events.Event;
|
||||
import java.util.List;
|
||||
import org.eclipse.che.ide.api.action.Action;
|
||||
import org.eclipse.che.ide.api.action.ActionEvent;
|
||||
import org.eclipse.che.ide.api.action.ActionManager;
|
||||
import org.eclipse.che.ide.api.keybinding.KeyBindingAgent;
|
||||
import org.eclipse.che.ide.api.mvp.View;
|
||||
import org.eclipse.che.ide.ext.java.client.JavaExtension;
|
||||
import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant;
|
||||
import org.eclipse.che.ide.ui.toolbar.PresentationFactory;
|
||||
import org.eclipse.che.ide.ui.window.Window;
|
||||
import org.eclipse.che.ide.util.input.CharCodeWithModifiers;
|
||||
import org.eclipse.che.ide.util.input.SignalEvent;
|
||||
import org.eclipse.che.ide.util.input.SignalEventUtils;
|
||||
import org.eclipse.che.jdt.ls.extension.api.dto.ExtendedSymbolInformation;
|
||||
import org.eclipse.che.plugin.languageserver.ide.filestructure.ElementSelectionDelegate;
|
||||
import org.eclipse.che.plugin.languageserver.ide.filestructure.FileStructureView;
|
||||
|
|
@ -40,6 +51,9 @@ public final class FileStructureWindow extends Window
|
|||
private static FileStructureWindowUiBinder UI_BINDER =
|
||||
GWT.create(FileStructureWindowUiBinder.class);
|
||||
private final FileStructureView view;
|
||||
private final ActionManager actionManager;
|
||||
private final PresentationFactory presentationFactor;
|
||||
private final KeyBindingAgent keyBindingAgent;
|
||||
|
||||
@UiField DockLayoutPanel treeContainer;
|
||||
@UiField Label showInheritedLabel;
|
||||
|
|
@ -47,9 +61,19 @@ public final class FileStructureWindow extends Window
|
|||
@UiField(provided = true)
|
||||
final JavaLocalizationConstant locale;
|
||||
|
||||
private ElementSelectionDelegate<ExtendedSymbolInformation> 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<ExtendedSymbolInformation> input) {
|
||||
public void setInput(String title, List<ExtendedSymbolInformation> input) {
|
||||
setTitle(title);
|
||||
view.setInput(input);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public void show() {
|
||||
super.show(view);
|
||||
protected void onShow() {
|
||||
view.onShow();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDelegate(ElementSelectionDelegate<ExtendedSymbolInformation> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<parent>
|
||||
<artifactId>che-plugin-java-parent</artifactId>
|
||||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<version>6.1.0-SNAPSHOT</version>
|
||||
<version>6.2.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>che-plugin-java-server</artifactId>
|
||||
<name>Che Plugin :: Java :: Language Server</name>
|
||||
|
|
@ -93,6 +93,10 @@
|
|||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-java-ext-lang-shared</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-java-server</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.lsp4j</groupId>
|
||||
<artifactId>org.eclipse.lsp4j</artifactId>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ public final class FileStructureView
|
|||
}
|
||||
|
||||
public void setInput(List<ExtendedSymbolInformation> 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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,11 @@
|
|||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.ls.jdt</groupId>
|
||||
<artifactId>jdt.ls.extension.api</artifactId>
|
||||
<version>${che.ls.jdt.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-java-ext-lang-shared</artifactId>
|
||||
|
|
@ -105,6 +110,10 @@
|
|||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-java-maven-tools</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-java-server</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.che.plugin</groupId>
|
||||
<artifactId>che-plugin-maven-generator-archetype</artifactId>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue