From 5d44fb1e50522589001d3f73da2a477bd5e26c35 Mon Sep 17 00:00:00 2001 From: Anton Lobov Date: Thu, 31 Jan 2019 10:31:38 +0100 Subject: [PATCH] RUBY-23497: yaml by json schema - treat empty value as 'null' - properly handle in arrays --- .../yaml/schema/YamlArrayAdapter.java | 6 +++++- .../yaml/schema/YamlPropertyAdapter.java | 16 ++++++++++++---- .../YamlByJsonSchemaHighlightingTest.java | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/plugins/yaml/src/org/jetbrains/yaml/schema/YamlArrayAdapter.java b/plugins/yaml/src/org/jetbrains/yaml/schema/YamlArrayAdapter.java index d5269e83531b..139dffa0d05a 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/schema/YamlArrayAdapter.java +++ b/plugins/yaml/src/org/jetbrains/yaml/schema/YamlArrayAdapter.java @@ -89,7 +89,11 @@ public class YamlArrayAdapter implements JsonArrayValueAdapter { List adapters = ContainerUtil.newArrayListWithCapacity(items.size()); for (YAMLSequenceItem item: items) { YAMLValue value = item.getValue(); - if (value == null) continue; + if (value == null) { + JsonValueAdapter emptyAdapter = YamlPropertyAdapter.createEmptyValueAdapter(item.getFirstChild(), true); + if (emptyAdapter != null) adapters.add(emptyAdapter); + continue; + } adapters.add(YamlPropertyAdapter.createValueAdapterByType(value)); } return adapters; diff --git a/plugins/yaml/src/org/jetbrains/yaml/schema/YamlPropertyAdapter.java b/plugins/yaml/src/org/jetbrains/yaml/schema/YamlPropertyAdapter.java index 02e1fe287fc2..37cff82c2f01 100644 --- a/plugins/yaml/src/org/jetbrains/yaml/schema/YamlPropertyAdapter.java +++ b/plugins/yaml/src/org/jetbrains/yaml/schema/YamlPropertyAdapter.java @@ -38,10 +38,9 @@ public class YamlPropertyAdapter implements JsonPropertyAdapter { @Override public Collection getValues() { YAMLValue value = myProperty.getValue(); - if (value != null) return Collections.singletonList(createValueAdapterByType(value)); - PsiElement nextSibling = myProperty.getNextSibling(); - PsiElement nodeToHighlight = PsiUtilCore.getElementType(nextSibling) == TokenType.WHITE_SPACE ? nextSibling : myProperty.getLastChild(); - return nodeToHighlight == null ? ContainerUtil.emptyList() : Collections.singletonList(new YamlEmptyValueAdapter(nodeToHighlight)); + return value != null + ? Collections.singletonList(createValueAdapterByType(value)) + : ContainerUtil.createMaybeSingletonList(createEmptyValueAdapter(myProperty, false)); } @NotNull @@ -69,4 +68,13 @@ public class YamlPropertyAdapter implements JsonPropertyAdapter { if (value instanceof YAMLSequence) return new YamlArrayAdapter((YAMLSequence) value); return new YamlGenericValueAdapter(value); } + + @Nullable + public static JsonValueAdapter createEmptyValueAdapter(@NotNull PsiElement context, boolean pinSelf) { + PsiElement nextSibling = context.getNextSibling(); + PsiElement nodeToHighlight = PsiUtilCore.getElementType(nextSibling) == TokenType.WHITE_SPACE + ? nextSibling + : (pinSelf ? context : context.getLastChild()); + return nodeToHighlight == null ? null : new YamlEmptyValueAdapter(nodeToHighlight); + } } diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/schema/YamlByJsonSchemaHighlightingTest.java b/plugins/yaml/testSrc/org/jetbrains/yaml/schema/YamlByJsonSchemaHighlightingTest.java index 78cd2a5a634b..a2d719c676de 100644 --- a/plugins/yaml/testSrc/org/jetbrains/yaml/schema/YamlByJsonSchemaHighlightingTest.java +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/schema/YamlByJsonSchemaHighlightingTest.java @@ -826,4 +826,22 @@ public class YamlByJsonSchemaHighlightingTest extends JsonSchemaHighlightingTest " }\n" + "}", "x: "); } + + public void testEmptyValueInArray() throws Exception { + doTest("{\n" + + " \"type\": \"object\",\n" + + "\n" + + " \"properties\": {\n" + + " \"versionAsStringArray\": {\n" + + " \"type\": \"array\",\n" + + " \"items\": {\n" + + " \"type\": \"string\"\n" + + " }\n" + + " }\n" + + " }\n" + + "}", "versionAsStringArray:\n" + + " - \n" + + " -\n" + + " - a"); + } }