diff --git a/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogConfigurable.java b/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogConfigurable.java
index eac8ac0f863c..d956b7826c58 100644
--- a/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogConfigurable.java
+++ b/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogConfigurable.java
@@ -23,11 +23,13 @@ public class JsonSchemaCatalogConfigurable implements Configurable {
@NotNull private final Project myProject;
private final JBCheckBox myCatalogCheckBox;
private final JBCheckBox myRemoteCheckBox;
+ private final JBCheckBox myPreferRemoteCheckBox;
public JsonSchemaCatalogConfigurable(@NotNull final Project project) {
myProject = project;
myCatalogCheckBox = new JBCheckBox("Use schemastore.org JSON Schema catalog");
myRemoteCheckBox = new JBCheckBox("Allow downloading JSON Schemas from remote sources");
+ myPreferRemoteCheckBox = new JBCheckBox("Always download the most recent version of schemas");
}
@Nullable
@@ -40,16 +42,23 @@ public class JsonSchemaCatalogConfigurable implements Configurable {
myRemoteCheckBox.addChangeListener(c -> {
boolean selected = myRemoteCheckBox.isSelected();
myCatalogCheckBox.setEnabled(selected);
+ myPreferRemoteCheckBox.setEnabled(selected);
if (!selected) {
myCatalogCheckBox.setSelected(false);
+ myPreferRemoteCheckBox.setSelected(false);
}
});
- builder.addComponent(myCatalogCheckBox);
- builder.addComponent(
- createComment("Schemas will be downloaded and assigned using the SchemaStore API"));
+ addWithComment(builder, myCatalogCheckBox,
+ "Schemas will be downloaded and assigned using the SchemaStore API");
+ addWithComment(builder, myPreferRemoteCheckBox,
+ "Schemas will always be downloaded from the SchemaStore, even if some of them are bundled with the IDE");
return wrap(builder.getPanel());
}
+ private static void addWithComment(FormBuilder builder, JBCheckBox box, String s) {
+ builder.addComponent(new ComponentPanelBuilder(box).withComment(s).createPanel());
+ }
+
@SuppressWarnings("SameParameterValue")
@NotNull
private static JLabel createComment(@NotNull String comment) {
@@ -72,9 +81,12 @@ public class JsonSchemaCatalogConfigurable implements Configurable {
@Override
public void reset() {
JsonSchemaCatalogProjectConfiguration.MyState state = JsonSchemaCatalogProjectConfiguration.getInstance(myProject).getState();
- myRemoteCheckBox.setSelected(state == null || state.myIsRemoteActivityEnabled);
- myCatalogCheckBox.setEnabled(state == null || state.myIsRemoteActivityEnabled);
+ final boolean remoteEnabled = state == null || state.myIsRemoteActivityEnabled;
+ myRemoteCheckBox.setSelected(remoteEnabled);
+ myCatalogCheckBox.setEnabled(remoteEnabled);
+ myPreferRemoteCheckBox.setEnabled(remoteEnabled);
myCatalogCheckBox.setSelected(state == null || state.myIsCatalogEnabled);
+ myPreferRemoteCheckBox.setSelected(state == null || state.myIsPreferRemoteSchemas);
}
@Override
@@ -82,13 +94,15 @@ public class JsonSchemaCatalogConfigurable implements Configurable {
JsonSchemaCatalogProjectConfiguration.MyState state = JsonSchemaCatalogProjectConfiguration.getInstance(myProject).getState();
return state == null
|| state.myIsCatalogEnabled != myCatalogCheckBox.isSelected()
+ || state.myIsPreferRemoteSchemas != myPreferRemoteCheckBox.isSelected()
|| state.myIsRemoteActivityEnabled != myRemoteCheckBox.isSelected();
}
@Override
public void apply() throws ConfigurationException {
JsonSchemaCatalogProjectConfiguration.getInstance(myProject).setState(myCatalogCheckBox.isSelected(),
- myRemoteCheckBox.isSelected());
+ myRemoteCheckBox.isSelected(),
+ myPreferRemoteCheckBox.isSelected());
}
@Nls(capitalization = Nls.Capitalization.Title)
diff --git a/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogProjectConfiguration.java b/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogProjectConfiguration.java
index ab61ccb1c613..2a2c3abf028a 100644
--- a/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogProjectConfiguration.java
+++ b/json/src/com/jetbrains/jsonSchema/JsonSchemaCatalogProjectConfiguration.java
@@ -22,6 +22,11 @@ public class JsonSchemaCatalogProjectConfiguration implements PersistentStateCom
return state != null && state.myIsCatalogEnabled;
}
+ public boolean isPreferRemoteSchemas() {
+ MyState state = getState();
+ return state != null && state.myIsPreferRemoteSchemas;
+ }
+
public void addChangeHandler(Runnable runnable) {
myChangeHandlers.add(runnable);
}
@@ -33,8 +38,8 @@ public class JsonSchemaCatalogProjectConfiguration implements PersistentStateCom
public JsonSchemaCatalogProjectConfiguration() {
}
- public void setState(boolean isEnabled, boolean isRemoteActivityEnabled) {
- myState = new MyState(isEnabled, isRemoteActivityEnabled);
+ public void setState(boolean isEnabled, boolean isRemoteActivityEnabled, boolean isPreferRemoteSchemas) {
+ myState = new MyState(isEnabled, isRemoteActivityEnabled, isPreferRemoteSchemas);
for (Runnable handler : myChangeHandlers) {
handler.run();
}
@@ -66,12 +71,16 @@ public class JsonSchemaCatalogProjectConfiguration implements PersistentStateCom
@Tag("remoteActivityEnabled")
public boolean myIsRemoteActivityEnabled = true;
+ @Tag("preferRemoteSchemas")
+ public boolean myIsPreferRemoteSchemas = false;
+
MyState() {
}
- MyState(boolean isCatalogEnabled, boolean isRemoteActivityEnabled) {
+ MyState(boolean isCatalogEnabled, boolean isRemoteActivityEnabled, boolean isPreferRemoteSchemas) {
myIsCatalogEnabled = isCatalogEnabled;
myIsRemoteActivityEnabled = isRemoteActivityEnabled;
+ myIsPreferRemoteSchemas = isPreferRemoteSchemas;
}
}
}
diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java
index 624bdad8abe1..d85175e3af66 100644
--- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java
+++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaServiceImpl.java
@@ -9,10 +9,12 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.openapi.vfs.impl.http.HttpVirtualFile;
import com.intellij.util.containers.ConcurrentList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBusConnection;
+import com.jetbrains.jsonSchema.JsonSchemaCatalogProjectConfiguration;
import com.jetbrains.jsonSchema.JsonSchemaVfsListener;
import com.jetbrains.jsonSchema.extension.*;
import com.jetbrains.jsonSchema.ide.JsonSchemaService;
@@ -38,7 +40,7 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
public JsonSchemaServiceImpl(@NotNull Project project) {
myProject = project;
- myState = new MyState(() -> getProvidersFromFactories());
+ myState = new MyState(() -> getProvidersFromFactories(), myProject);
myBuiltInSchemaIds = new ClearableLazyValue>() {
@NotNull
@Override
@@ -234,7 +236,8 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
// this hack is needed to handle user-defined mappings via urls
// we cannot perform that inside corresponding provider, because it leads to recursive component dependency
// this way we're preventing http files when a built-in schema exists
- if (schemaFile instanceof HttpVirtualFile) {
+ if (!JsonSchemaCatalogProjectConfiguration.getInstance(myProject).isPreferRemoteSchemas()
+ && schemaFile instanceof HttpVirtualFile) {
String url = schemaFile.getUrl();
VirtualFile first1 = getLocalSchemaByUrl(url);
return first1 != null ? first1 : schemaFile;
@@ -379,15 +382,17 @@ public class JsonSchemaServiceImpl implements JsonSchemaService {
private static class MyState {
@NotNull private final Factory> myFactory;
+ @NotNull private final Project myProject;
@NotNull private final AtomicClearableLazyValue