#2729 do not send file operation messages if LS doesn't exist (#2881)

6.19.x
Evgen Vidolob 2016-10-25 16:10:28 +03:00 committed by GitHub
parent 50af6524b7
commit 31df15d159
3 changed files with 20 additions and 4 deletions

View File

@ -30,6 +30,7 @@ import org.eclipse.che.ide.api.extension.Extension;
import org.eclipse.che.ide.api.keybinding.KeyBindingAgent;
import org.eclipse.che.ide.api.keybinding.KeyBuilder;
import org.eclipse.che.ide.dto.DtoFactory;
import org.eclipse.che.ide.resource.Path;
import org.eclipse.che.ide.util.browser.UserAgent;
import org.eclipse.che.ide.util.input.KeyCodeMap;
import org.eclipse.che.plugin.languageserver.ide.editor.LanguageServerEditorConfiguration;
@ -86,13 +87,18 @@ public class LanguageServerExtension {
@Inject
protected void registerFileEventHandler(final EventBus eventBus,
final TextDocumentServiceClient serviceClient,
final DtoFactory dtoFactory) {
final DtoFactory dtoFactory,
final LanguageServerFileTypeRegister fileTypeRegister) {
eventBus.addHandler(FileEvent.TYPE, new FileEvent.FileEventHandler() {
@Override
public void onFileOperation(final FileEvent event) {
Path location = event.getFile().getLocation();
if (location.getFileExtension() == null || !fileTypeRegister.hasLSForExtension(location.getFileExtension())) {
return;
}
final TextDocumentIdentifierDTO documentId = dtoFactory.createDto(TextDocumentIdentifierDTO.class);
documentId.setUri(event.getFile().getPath());
documentId.setUri(location.toString());
switch (event.getOperationType()) {
case OPEN:
onOpen(event, dtoFactory, serviceClient);

View File

@ -32,7 +32,9 @@ import org.eclipse.che.plugin.languageserver.ide.editor.LanguageServerEditorProv
import org.eclipse.che.plugin.languageserver.ide.hover.HoverProvider;
import org.eclipse.che.plugin.languageserver.ide.service.LanguageServerRegistryServiceClient;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static com.google.common.collect.Lists.newArrayList;
@ -49,8 +51,10 @@ public class LanguageServerFileTypeRegister implements WsAgentComponent {
private final EditorRegistry editorRegistry;
private final OrionContentTypeRegistrant contentTypeRegistrant;
private final OrionHoverRegistrant orionHoverRegistrant;
private final LanguageServerEditorProvider editorProvider;
private final HoverProvider hoverProvider;
private final LanguageServerEditorProvider editorProvider;
private final HoverProvider hoverProvider;
private final Set<String> lsExtensions = new HashSet<>();
@Inject
public LanguageServerFileTypeRegister(LanguageServerRegistryServiceClient serverLanguageRegistry,
@ -85,6 +89,7 @@ public class LanguageServerFileTypeRegister implements WsAgentComponent {
final FileType fileType = new FileType(resources.file(), ext);
fileTypeRegistry.registerFileType(fileType);
editorRegistry.registerDefaultEditor(fileType, editorProvider);
lsExtensions.add(ext);
}
List<String> mimeTypes = lang.getMimeTypes();
if (mimeTypes.isEmpty()) {
@ -119,4 +124,8 @@ public class LanguageServerFileTypeRegister implements WsAgentComponent {
}
});
}
public boolean hasLSForExtension(String ext) {
return lsExtensions.contains(ext);
}
}

View File

@ -25,6 +25,7 @@
<inherits name="io.typefox.lsapi.LsApi"/>
<inherits name="org.eclipse.che.ide.editor.orion.OrionEditor"/>
<inherits name="org.eclipse.che.api.promises.Promises"/>
<inherits name="org.eclipse.che.api.languageserver.LanguageServer"/>
<source path="ide"/>
</module>