コード例 #1
0
        public static DomAttribute ReadAttribute(BinaryReader reader, INameDecoder nameTable)
        {
            DomAttribute attr = new DomAttribute();

            attr.Name            = ReadString(reader, nameTable);
            attr.Region          = ReadRegion(reader, nameTable);
            attr.AttributeTarget = (AttributeTarget)reader.ReadInt32();
            attr.AttributeType   = ReadReturnType(reader, nameTable);

            // Named argument count
            uint num = ReadUInt(reader, 500);

            string[] names = new string[num];
            for (int n = 0; n < num; n++)
            {
                names [n] = ReadString(reader, nameTable);
            }

            CodeExpression[] exps = ReadExpressionArray(reader, nameTable);

            int i;

            for (i = 0; i < num; i++)
            {
                attr.AddNamedArgument(names[i], exps [i]);
            }

            for (; i < exps.Length; i++)
            {
                attr.AddPositionalArgument(exps [i]);
            }

            return(attr);
        }
コード例 #2
0
			static void AddAttributes (AbstractMember member, IEnumerable<ICSharpCode.NRefactory.Ast.AttributeSection> attributes)
			{
				CodeDomVisitor domVisitor = new CodeDomVisitor ();
				foreach (ICSharpCode.NRefactory.Ast.AttributeSection attributeSection in attributes) {
					foreach (ICSharpCode.NRefactory.Ast.Attribute attribute in attributeSection.Attributes) {
						DomAttribute domAttribute = new DomAttribute ();
						domAttribute.Name = attribute.Name;
						domAttribute.Region = ConvertRegion (attribute.StartLocation, attribute.EndLocation);
						domAttribute.AttributeType = new DomReturnType (attribute.Name);
						member.Add (domAttribute);
						foreach (ICSharpCode.NRefactory.Ast.Expression exp in attribute.PositionalArguments)
							domAttribute.AddPositionalArgument ((CodeExpression)exp.AcceptVisitor (domVisitor, null));
						foreach (ICSharpCode.NRefactory.Ast.NamedArgumentExpression nexp in attribute.NamedArguments)
							domAttribute.AddNamedArgument (nexp.Name, (CodeExpression)nexp.Expression.AcceptVisitor (domVisitor, null));
					}
				}
			}
コード例 #3
0
			IEnumerable<IAttribute> ConvertAttributes (Attributes optAttributes, IMemberContext mc)
			{
				List<IAttribute> atts = new List<IAttribute> ();
				
				if (optAttributes == null || optAttributes.Attrs == null)
					return atts;
				ResolveContext ctx = new ResolveContext (mc);
				foreach (var section in optAttributes.Sections) {
				
					foreach (var attr in section) {
						DomAttribute domAttribute = new DomAttribute ();
						domAttribute.Name = ConvertQuoted (attr.Name);
						domAttribute.Region = ConvertRegion (attr.Location, attr.Location);
						domAttribute.AttributeType = ConvertReturnType (attr.TypeNameExpression);
						if (attr.PosArguments != null) {
							for (int i = 0; i < attr.PosArguments.Count; i++) {
								CodeExpression domExp;
								var exp = attr.PosArguments [i].Expr;
								
								if (exp is TypeOf) {
									TypeOf tof = (TypeOf)exp;
									IReturnType rt = ConvertReturnType (tof.TypeExpression);
									domExp = new CodeTypeOfExpression (rt.FullName);
								} else if (exp is Binary) {
									// Currently unsupported in the old dom (will be in the new dom)
									continue;
								} else if (exp is Constant) {
									try {
										var res = exp.Resolve (ctx);
										var val = res as Constant;
										if (val == null)
											continue;
										domExp = new CodePrimitiveExpression (val.GetValue ());
									} catch {
										continue;
									}
								} else {
									try {
										domExp = ResolveMemberAccessExpression (exp);
									} catch {
										continue;
									}
								}
								if (domExp != null)
									domAttribute.AddPositionalArgument (domExp);
							}
						}
						if (attr.NamedArguments != null) {
							for (int i = 0; i < attr.NamedArguments.Count; i++) {
								var val = attr.NamedArguments [i].Expr as Constant;
								if (val == null)
									continue;
								domAttribute.AddNamedArgument (((NamedArgument)attr.NamedArguments [i]).Name, new CodePrimitiveExpression (val.GetValue ()));
							}
						}
						
						atts.Add (domAttribute);
					}
				}
				return atts;
			}
コード例 #4
0
ファイル: McsParser.cs プロジェクト: Tak/monodevelop-novell
			public void AddAttributes (MonoDevelop.Projects.Dom.AbstractMember member, Attributes optAttributes)
			{
				if (optAttributes == null || optAttributes.Attrs == null)
					return;
				foreach (var attr in optAttributes.Attrs) {
					DomAttribute domAttribute = new DomAttribute ();
					domAttribute.Name = attr.Name;
					domAttribute.Region = ConvertRegion (attr.Location, attr.Location);
					domAttribute.AttributeType = new DomReturnType (attr.Name);
					if (attr.PosArguments != null) {
						for (int i = 0; i < attr.PosArguments.Count; i++) {
							var val = attr.PosArguments[i].Expr as Constant;
							if (val == null) {
								continue;
							}
							domAttribute.AddPositionalArgument (new CodePrimitiveExpression (val.GetValue ()));
						}
					}
					if (attr.NamedArguments != null) {
						for (int i = 0; i < attr.NamedArguments.Count; i++) {
							var val = attr.NamedArguments[i].Expr as Constant;
							if (val == null)
								continue;
							domAttribute.AddNamedArgument (((NamedArgument)attr.NamedArguments[i]).Name, new CodePrimitiveExpression (val.GetValue ()));
						}
					}
					
					member.Add (domAttribute);
				}
			}
コード例 #5
0
			static void AddAttributes (AbstractMember member, IEnumerable<ICSharpCode.NRefactory.Ast.AttributeSection> attributes)
			{
				CodeDomVisitor domVisitor = new CodeDomVisitor ();
				foreach (ICSharpCode.NRefactory.Ast.AttributeSection attributeSection in attributes) {
					foreach (ICSharpCode.NRefactory.Ast.Attribute attribute in attributeSection.Attributes) {
						DomAttribute domAttribute = new DomAttribute ();
						domAttribute.Name = attribute.Name;
						domAttribute.Region = ConvertRegion (attribute.StartLocation, attribute.EndLocation);
						domAttribute.AttributeType = new DomReturnType (attribute.Name);
						member.Add (domAttribute);
						foreach (ICSharpCode.NRefactory.Ast.Expression exp in attribute.PositionalArguments)
							domAttribute.AddPositionalArgument ((CodeExpression)exp.AcceptVisitor (domVisitor, null));
						foreach (ICSharpCode.NRefactory.Ast.NamedArgumentExpression nexp in attribute.NamedArguments)
							domAttribute.AddNamedArgument (nexp.Name, (CodeExpression)nexp.Expression.AcceptVisitor (domVisitor, null));
					}
				}
			}
コード例 #6
0
		public static DomAttribute ReadAttribute (BinaryReader reader, INameDecoder nameTable, IDomObjectTable objectTable)
		{
			DomAttribute attr = new DomAttribute ();
			attr.Name = ReadString (reader, nameTable);
			attr.Region = ReadRegion (reader, nameTable);
			attr.AttributeTarget = (AttributeTarget)reader.ReadInt32 ();
			attr.AttributeType = ReadReturnType (reader, nameTable, objectTable);
			
			// Named argument count
			uint num = ReadUInt (reader, 500);
			string[] names = new string[num];
			for (int n=0; n<num; n++)
				names [n] = ReadString (reader, nameTable);
			
			CodeExpression[] exps = ReadExpressionArray (reader, nameTable);
			
			int i;
			for (i=0; i<num; i++)
				attr.AddNamedArgument (names [i], exps [i]);
			
			for (; i<exps.Length; i++)
				attr.AddPositionalArgument (exps [i]);

			return attr;
		}