コード例 #1
0
		CSharpAttribute ConvertAttribute(CSharp.Attribute attr)
		{
			DomRegion region = MakeRegion(attr);
			ITypeReference type = ConvertAttributeType(attr.Type);
			List<IConstantValue> positionalArguments = null;
			List<KeyValuePair<string, IConstantValue>> namedCtorArguments = null;
			List<KeyValuePair<string, IConstantValue>> namedArguments = null;
			foreach (Expression expr in attr.Arguments) {
				NamedArgumentExpression nae = expr as NamedArgumentExpression;
				if (nae != null) {
					if (namedCtorArguments == null)
						namedCtorArguments = new List<KeyValuePair<string, IConstantValue>>();
					namedCtorArguments.Add(new KeyValuePair<string, IConstantValue>(nae.Identifier, ConvertAttributeArgument(nae.Expression)));
				} else {
					NamedExpression namedExpression = expr as NamedExpression;
					if (namedExpression != null) {
						string name = namedExpression.Identifier;
						if (namedArguments == null)
							namedArguments = new List<KeyValuePair<string, IConstantValue>>();
						namedArguments.Add(new KeyValuePair<string, IConstantValue>(name, ConvertAttributeArgument(namedExpression.Expression)));
					} else {
						if (positionalArguments == null)
							positionalArguments = new List<IConstantValue>();
						positionalArguments.Add(ConvertAttributeArgument(expr));
					}
				}
			}
			return new CSharpAttribute(type, region, positionalArguments, namedCtorArguments, namedArguments);
		}
コード例 #2
0
        IAttribute ConvertAttribute(CSharp.Attribute attr)
        {
            DomRegion      region = MakeRegion(attr);
            ITypeReference type   = ConvertType(attr.Type);

            if (!attr.Type.GetChildByRole(AstNode.Roles.Identifier).IsVerbatim)
            {
                // Try to add "Attribute" suffix, but only if the identifier
                // (=last identifier in fully qualified name) isn't a verbatim identifier.
                SimpleTypeOrNamespaceReference st = type as SimpleTypeOrNamespaceReference;
                MemberTypeOrNamespaceReference mt = type as MemberTypeOrNamespaceReference;
                if (st != null)
                {
                    type = new AttributeTypeReference(st, st.AddSuffix("Attribute"));
                }
                else if (mt != null)
                {
                    type = new AttributeTypeReference(mt, mt.AddSuffix("Attribute"));
                }
            }
            List <IConstantValue> positionalArguments = null;
            List <KeyValuePair <string, IConstantValue> > namedCtorArguments = null;
            List <KeyValuePair <string, IConstantValue> > namedArguments     = null;

            foreach (Expression expr in attr.Arguments)
            {
                NamedArgumentExpression nae = expr as NamedArgumentExpression;
                if (nae != null)
                {
                    if (namedCtorArguments == null)
                    {
                        namedCtorArguments = new List <KeyValuePair <string, IConstantValue> >();
                    }
                    namedCtorArguments.Add(new KeyValuePair <string, IConstantValue>(nae.Identifier, ConvertAttributeArgument(nae.Expression)));
                }
                else
                {
                    AssignmentExpression ae = expr as AssignmentExpression;
                    if (ae != null && ae.Left is IdentifierExpression && ae.Operator == AssignmentOperatorType.Assign)
                    {
                        string name = ((IdentifierExpression)ae.Left).Identifier;
                        if (namedArguments == null)
                        {
                            namedArguments = new List <KeyValuePair <string, IConstantValue> >();
                        }
                        namedArguments.Add(new KeyValuePair <string, IConstantValue>(name, ConvertAttributeArgument(nae.Expression)));
                    }
                    else
                    {
                        if (positionalArguments == null)
                        {
                            positionalArguments = new List <IConstantValue>();
                        }
                        positionalArguments.Add(ConvertAttributeArgument(nae.Expression));
                    }
                }
            }
            return(new CSharpAttribute(type, region, positionalArguments, namedCtorArguments, namedArguments));
        }