diff --git a/json/src/com/intellij/json/JsonUtil.java b/json/src/com/intellij/json/JsonUtil.java index 6b8bc98ec809..eaa9685b8565 100644 --- a/json/src/com/intellij/json/JsonUtil.java +++ b/json/src/com/intellij/json/JsonUtil.java @@ -1,8 +1,15 @@ package com.intellij.json; +import com.intellij.json.psi.*; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + /** * @author Mikhail Golubev */ @@ -34,4 +41,28 @@ public class JsonUtil { } return null; } + + @Nullable + public static T getPropertyValueOfType(@NotNull final JsonObject object, @NotNull final String name, + @NotNull final Class clazz) { + final JsonProperty property = object.findProperty(name); + if (property == null) return null; + return ObjectUtils.tryCast(property.getValue(), clazz); + } + + @Nullable + public static List getChildAsStringList(@NotNull final JsonObject object, @NotNull final String name) { + final JsonArray array = getPropertyValueOfType(object, name, JsonArray.class); + if (array != null) return array.getValueList().stream().filter(value -> value instanceof JsonStringLiteral) + .map(value -> StringUtil.unquoteString(value.getText())).collect(Collectors.toList()); + return null; + } + + @Nullable + public static List getChildAsSingleStringOrList(@NotNull final JsonObject object, @NotNull final String name) { + final List list = getChildAsStringList(object, name); + if (list != null) return list; + final JsonStringLiteral literal = getPropertyValueOfType(object, name, JsonStringLiteral.class); + return literal == null ? null : Collections.singletonList(StringUtil.unquoteString(literal.getText())); + } }