diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java b/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java index 5d2713d2a2d2..a5706fadd4ff 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonBySchemaObjectCompletionContributor.java @@ -152,20 +152,26 @@ class JsonBySchemaObjectCompletionContributor extends CompletionContributor { } else { final JsonSchemaType type = schema.getType(); - if (JsonSchemaType._boolean.equals(type)) { - addPossibleBooleanValue(type); - final List variants = schema.getTypeVariants(); - if (variants != null) { - for (JsonSchemaType variant : variants) { - addPossibleBooleanValue(variant); - } + if (type != null) { + suggestByType(schema, type); + } else if (schema.getTypeVariants() != null) { + for (JsonSchemaType schemaType : schema.getTypeVariants()) { + suggestByType(schema, schemaType); } - } else if (JsonSchemaType._string.equals(type)) { - addPossibleStringValue(schema); } } } + private void suggestByType(JsonSchemaObject schema, JsonSchemaType type) { + if (JsonSchemaType._boolean.equals(type)) { + addPossibleBooleanValue(type); + } else if (JsonSchemaType._string.equals(type)) { + addPossibleStringValue(schema); + } else if (JsonSchemaType._null.equals(type)) { + addValueVariant("null", null); + } + } + private void addPossibleStringValue(JsonSchemaObject schema) { Object defaultValue = schema.getDefault(); String defaultValueString = defaultValue == null ? null : defaultValue.toString(); diff --git a/json/src/com/jetbrains/jsonSchema/impl/ReadJsonSchemaFromPsi.java b/json/src/com/jetbrains/jsonSchema/impl/ReadJsonSchemaFromPsi.java index 426859406892..b77e41c64681 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/ReadJsonSchemaFromPsi.java +++ b/json/src/com/jetbrains/jsonSchema/impl/ReadJsonSchemaFromPsi.java @@ -185,6 +185,8 @@ public class ReadJsonSchemaFromPsi { } } else if (value instanceof JsonBooleanLiteral) { objects.add(((JsonBooleanLiteral)value).getValue()); + } else if (value instanceof JsonNullLiteral) { + objects.add("null"); } } object.setEnum(objects); diff --git a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java index c8f0721ab85e..6dfe74f7be8f 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java @@ -132,6 +132,40 @@ public class JsonBySchemaCompletionTest extends CompletionTestCase { "\"r1\"", "\"r2\""); } + public void testSimpleNullCompletion() throws Exception { + final String schema = "{\n" + + " \"properties\": {\n" + + " \"null\": {\n" + + " \"type\": \"null\"\n" + + " }\n" + + " }\n" + + "}"; + testImpl(schema, "{\"null\": }", "null"); + } + + public void testNullCompletionInEnum() throws Exception { + final String schema = "{\n" + + " \"properties\": {\n" + + " \"null\": {\n" + + " \"type\": [\"null\", \"integer\"],\n" + + " \"enum\": [null, 1, 2]\n" + + " }\n" + + " }\n" + + "}"; + testImpl(schema, "{\"null\": }", "1", "2", "null"); + } + + public void testNullCompletionInTypeVariants() throws Exception { + final String schema = "{\n" + + " \"properties\": {\n" + + " \"null\": {\n" + + " \"type\": [\"null\", \"boolean\"]\n" + + " }\n" + + " }\n" + + "}"; + testImpl(schema, "{\"null\": }", "false", "null", "true"); + } + @NotNull private static String parcelShopSchema() { return "{\n" +