Skip to content

Commit ea372fb

Browse files
authored
* Check LS launcher for ability to launch * This PR fixes eclipse-che#5528 by filtering contributed languages and launchers for their ability to launch. Signed-off-by: Thomas Mäder <tmader@redhat.com> Signed-off-by: Vitalii Parfonov <vparfonov@redhat.com>
1 parent bb0a3f0 commit ea372fb

1 file changed

Lines changed: 20 additions & 15 deletions

File tree

wsagent/che-core-api-languageserver/src/main/java/org/eclipse/che/api/languageserver/registry/LanguageServerRegistryImpl.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.google.inject.Inject;
1414
import com.google.inject.Provider;
1515
import com.google.inject.Singleton;
16+
1617
import org.eclipse.che.api.core.ServerException;
1718
import org.eclipse.che.api.languageserver.exception.LanguageServerException;
1819
import org.eclipse.che.api.languageserver.launcher.LanguageServerLauncher;
@@ -25,39 +26,43 @@
2526
import org.eclipse.lsp4j.ServerCapabilities;
2627
import org.eclipse.lsp4j.services.LanguageServer;
2728

28-
import java.io.File;
2929
import java.net.URI;
30-
import java.util.ArrayList;
3130
import java.util.Collections;
32-
import java.util.HashMap;
3331
import java.util.List;
3432
import java.util.Map;
3533
import java.util.Set;
3634
import java.util.concurrent.ConcurrentHashMap;
37-
import java.util.stream.Collectors;
3835

36+
import static java.util.function.Function.identity;
37+
import static java.util.stream.Collectors.toList;
38+
import static java.util.stream.Collectors.toMap;
3939
import static org.eclipse.che.api.languageserver.shared.ProjectLangugageKey.createProjectKey;
4040

4141
@Singleton
4242
public class LanguageServerRegistryImpl implements LanguageServerRegistry, ServerInitializerObserver {
43-
public final static String PROJECT_FOLDER_PATH = "/projects";
43+
public final static String PROJECT_FOLDER_PATH = "/projects";
4444
private final List<LanguageDescription> languages;
45-
private final Map<String, LanguageServerLauncher> launchers = new HashMap<>();
45+
private final Map<String, LanguageServerLauncher> launchers;
4646

4747
/**
4848
* Started {@link LanguageServer} by project.
4949
*/
50-
private final ConcurrentHashMap<ProjectLangugageKey, LanguageServer> projectToServer= new ConcurrentHashMap<>();
50+
private final ConcurrentHashMap<ProjectLangugageKey, LanguageServer> projectToServer = new ConcurrentHashMap<>();
5151

5252
private final Provider<ProjectManager> projectManagerProvider;
5353
private final ServerInitializer initializer;
5454

5555
@Inject
56-
public LanguageServerRegistryImpl(Set<LanguageServerLauncher> languageServerLaunchers, Set<LanguageDescription> languages,
57-
Provider<ProjectManager> projectManagerProvider, ServerInitializer initializer) {
58-
this.languages= new ArrayList<>(languages);
59-
this.launchers.putAll(languageServerLaunchers.stream()
60-
.collect(Collectors.toMap(LanguageServerLauncher::getLanguageId, launcher -> launcher)));
56+
public LanguageServerRegistryImpl(Set<LanguageServerLauncher> languageServerLaunchers,
57+
Set<LanguageDescription> languages,
58+
Provider<ProjectManager> projectManagerProvider,
59+
ServerInitializer initializer) {
60+
this.launchers = languageServerLaunchers.stream()
61+
.filter(LanguageServerLauncher::isAbleToLaunch)
62+
.collect(toMap(LanguageServerLauncher::getLanguageId, identity()));
63+
this.languages = languages.stream()
64+
.filter(language -> launchers.containsKey(language.getLanguageId()))
65+
.collect(toList());
6166
this.projectManagerProvider = projectManagerProvider;
6267
this.initializer = initializer;
6368
this.initializer.addObserver(this);
@@ -82,11 +87,11 @@ private LanguageDescription findLanguageId(String path) {
8287
}
8388

8489
private boolean matchesExtensions(LanguageDescription language, String path) {
85-
return language.getFileExtensions().stream().anyMatch(extension->path.endsWith(extension));
90+
return language.getFileExtensions().stream().anyMatch(extension -> path.endsWith(extension));
8691
}
8792

8893
private boolean matchesFilenames(LanguageDescription language, String path) {
89-
return language.getFileNames().stream().anyMatch(name->path.endsWith(name));
94+
return language.getFileNames().stream().anyMatch(name -> path.endsWith(name));
9095
}
9196

9297
@Nullable
@@ -120,7 +125,7 @@ public List<LanguageDescription> getSupportedLanguages() {
120125
@Override
121126
public Map<ProjectLangugageKey, LanguageServerDescription> getInitializedLanguages() {
122127
Map<LanguageServer, LanguageServerDescription> initializedServers = initializer.getInitializedServers();
123-
return projectToServer.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> initializedServers.get(e.getValue())));
128+
return projectToServer.entrySet().stream().collect(toMap(Map.Entry::getKey, e -> initializedServers.get(e.getValue())));
124129
}
125130

126131
protected String extractProjectPath(String filePath) throws LanguageServerException {

0 commit comments

Comments
 (0)