Exemple #1
0
                public override bool Apply <T>(TypeAnnotationConverter <T> converter, Stack <KeyValuePair <string, T> > stack)
                {
                    if (stack.Count < 2)
                    {
                        return(false);
                    }
                    var args = stack.Pop();

                    if (args.Key != null)
                    {
                        return(false);
                    }
                    var baseType = stack.Pop();

                    if (baseType.Key != null)
                    {
                        return(false);
                    }
                    var t = converter.MakeGeneric(baseType.Value, converter.GetUnionTypes(args.Value) ?? new[] { args.Value });

                    if (t == null)
                    {
                        return(false);
                    }
                    stack.Push(new KeyValuePair <string, T>(null, t));
                    return(true);
                }
Exemple #2
0
                public override bool Apply <T>(TypeAnnotationConverter <T> converter, Stack <KeyValuePair <string, T> > stack)
                {
                    var items = new List <T>();

                    if (!stack.Any())
                    {
                        return(false);
                    }
                    var t = stack.Pop();

                    if (t.Value == null)
                    {
                        return(false);
                    }
                    if (_multipleArgs)
                    {
                        while (t.Key != nameof(StartListOp))
                        {
                            items.Add(t.Value);
                            if (!stack.Any())
                            {
                                return(false);
                            }
                            t = stack.Pop();
                        }
                        items.Reverse();
                    }
                    else if (t.Key != nameof(StartListOp))
                    {
                        items.Add(t.Value);
                    }
                    var baseType = stack.Pop();

                    if (baseType.Key != null)
                    {
                        return(false);
                    }
                    t = new KeyValuePair <string, T>(null, converter.MakeGeneric(baseType.Value, items));
                    if (t.Value == null)
                    {
                        return(false);
                    }
                    stack.Push(t);
                    return(true);
                }