예제 #1
0
        protected override IDom CreateItemFrom(SyntaxNode syntaxNode, IDom parent, SemanticModel model)
        {
            var syntax  = syntaxNode as ParameterSyntax;
            var newItem = new RDomParameter(syntaxNode, parent, model);

            CreateFromWorker.StandardInitialize(newItem, syntaxNode, parent, model, OutputContext);

            newItem.Name = newItem.TypedSymbol.Name;

            // TODO: Determine if null types for anonymous methods are a fact of life, or a temporary bug
            if (syntax.Type != null)
            {
                var type = OutputContext.Corporation
                           .Create(syntax.Type, newItem, model)
                           .FirstOrDefault()
                           as IReferencedType;
                newItem.Type = type;
            }

            newItem.IsOut        = newItem.TypedSymbol.RefKind == RefKind.Out;
            newItem.IsRef        = newItem.TypedSymbol.RefKind == RefKind.Ref;
            newItem.IsParamArray = newItem.TypedSymbol.IsParams;
            newItem.IsOptional   = newItem.TypedSymbol.IsOptional;
            if (syntax.Default != null)
            {
                var tuple = CreateFromWorker.GetArgumentValue(newItem, model, syntax.Default.Value);
                newItem.DefaultValue = tuple.Item1;
                newItem.DefaultConstantIdentifier = tuple.Item2;
                newItem.DefaultValueType          = tuple.Item3;
            }
            newItem.Ordinal = newItem.TypedSymbol.Ordinal;
            MemberWhitespace(newItem, syntax);

            return(newItem);
        }
        private Tuple <object, string, LiteralKind> GetAttributeValueValue(
            SyntaxNode argNode, IDom newItem, SemanticModel model)
        {
            var arg = argNode as AttributeArgumentSyntax;

            Guardian.Assert.IsNotNull(arg, nameof(arg));

            // TODO: Manage multiple values because of AllowMultiples, param array, or missing symbol
            var expr = arg.Expression;

            return(CreateFromWorker.GetArgumentValue(newItem, model, expr));
        }