[json] fail-safe schema provider collection

This commit is contained in:
Roman Shevchenko
2017-10-17 10:50:02 +02:00
parent 23a2033c0f
commit fbf0d68c04
@@ -1,6 +1,6 @@
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.jsonSchema.impl;
import com.intellij.json.JsonLanguage;
import com.intellij.json.psi.JsonFile;
import com.intellij.json.psi.JsonObject;
@@ -8,6 +8,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx;
@@ -36,7 +37,6 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.stream.Collectors;
public class JsonSchemaServiceImpl implements JsonSchemaService {
@@ -50,7 +50,7 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
public JsonSchemaServiceImpl(@NotNull Project project) {
myProject = project;
myState = new MyState(() -> getProvidersFromFactories(factory -> factory.getProviders(myProject)));
myState = new MyState(() -> getProvidersFromFactories());
myModificationTracker = () -> myModificationCount.get();
myAnySchemaChangeTracker = () -> myAnyChangeCount.get();
project.getMessageBus().connect().subscribe(JsonSchemaVfsListener.JSON_SCHEMA_CHANGED, myAnyChangeCount::incrementAndGet);
@@ -62,12 +62,17 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
return myAnySchemaChangeTracker;
}
private List<JsonSchemaFileProvider> getProvidersFromFactories(
@NotNull final Function<JsonSchemaProviderFactory, List<JsonSchemaFileProvider>> function) {
return Arrays.stream(getProviderFactories())
.map(function)
.flatMap(List::stream)
.collect(Collectors.toList());
private List<JsonSchemaFileProvider> getProvidersFromFactories() {
List<JsonSchemaFileProvider> providers = new ArrayList<>();
for (JsonSchemaProviderFactory factory : getProviderFactories()) {
try {
providers.addAll(factory.getProviders(myProject));
}
catch (Exception e) {
Logger.getInstance(JsonSchemaService.class).error(e);
}
}
return providers;
}
@NotNull