1313import com .google .inject .Inject ;
1414import com .google .inject .Provider ;
1515import com .google .inject .Singleton ;
16+
1617import org .eclipse .che .api .core .ServerException ;
1718import org .eclipse .che .api .languageserver .exception .LanguageServerException ;
1819import org .eclipse .che .api .languageserver .launcher .LanguageServerLauncher ;
2526import org .eclipse .lsp4j .ServerCapabilities ;
2627import org .eclipse .lsp4j .services .LanguageServer ;
2728
28- import java .io .File ;
2929import java .net .URI ;
30- import java .util .ArrayList ;
3130import java .util .Collections ;
32- import java .util .HashMap ;
3331import java .util .List ;
3432import java .util .Map ;
3533import java .util .Set ;
3634import 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 ;
3939import static org .eclipse .che .api .languageserver .shared .ProjectLangugageKey .createProjectKey ;
4040
4141@ Singleton
4242public 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