protected override void Analyze(IObjectPropertyInitializer element, ElementProblemAnalyzerData data, IHighlightingConsumer consumer)
        {
            if (element.DeclaredName == "includePlatforms" || element.DeclaredName == "excludePlatforms" ||
                element.DeclaredName == "references")
            {
                if (!(element.Value is IArrayLiteral arrayLiteral))
                {
                    return;
                }

                var elements = arrayLiteral.ArrayElements;
                if (elements.Count <= 1)
                {
                    return;
                }

                var items = new OneToCompactListMap <string, IJavaScriptLiteralExpression>();
                foreach (var expressionOrSpread in elements)
                {
                    if (expressionOrSpread is IJavaScriptLiteralExpression literalExpression)
                    {
                        var value = literalExpression.GetStringValue();
                        if (value != null)
                        {
                            items.Add(value, literalExpression);
                        }
                    }
                }

                foreach (var item in items)
                {
                    var expressions = item.Value;
                    if (expressions.Count > 1)
                    {
                        foreach (var expression in expressions)
                        {
                            // We can cheat. We know that `includePlatforms` and `excludePlatforms` are enums
                            // and get a quick fix to change it to another value
                            var fixableKind = element.DeclaredName == "references"
                                ? FixableIssueKind.None
                                : FixableIssueKind.NonEnumValue;

                            var result = new AssertionResult(false, AsmDefDuplicateItemDescription, expression,
                                                             fixableIssueKind: fixableKind);
                            var warning = new JsonValidationFailedWarning(result.Node, result.Description, result);
                            consumer.AddHighlighting(warning);
                        }
                    }
                }
            }
        }
 public AsmDefRemoveInvalidArrayItemQuickFix(JsonValidationFailedWarning warning)
 {
     myLiteral = warning.Brace as IJavaScriptLiteralExpression;
     myIsValid = warning.AssertionResult.Description ==
                 AsmDefDuplicateItemsProblemAnalyzer.AsmDefDuplicateItemDescription;
 }