Exemplo n.º 1
0
 FieldDeclaration ConvertField(IField field)
 {
     FieldDeclaration decl = new FieldDeclaration();
     if (ShowModifiers) {
         Modifiers m = GetMemberModifiers(field);
         if (field.IsConst) {
             m &= ~Modifiers.Static;
             m |= Modifiers.Const;
         } else if (field.IsReadOnly) {
             m |= Modifiers.Readonly;
         } else if (field.IsVolatile) {
             m |= Modifiers.Volatile;
         }
         decl.Modifiers = m;
     }
     if (ShowAttributes) {
         decl.Attributes.AddRange (field.Attributes.Select ((a) => new AttributeSection (ConvertAttribute (a))));
     }
     if (AddResolveResultAnnotations) {
         decl.AddAnnotation(new MemberResolveResult(null, field));
     }
     decl.ReturnType = ConvertType(field.ReturnType);
     Expression initializer = null;
     if (field.IsConst && this.ShowConstantValues)
         initializer = ConvertConstantValue(field.Type, field.ConstantValue);
     decl.Variables.Add(new VariableInitializer(field.Name, initializer));
     return decl;
 }
        void HandleStaticFieldInitializers(IEnumerable <AstNode> members)
        {
            // Convert static constructor into field initializers if the class is BeforeFieldInit
            var staticCtor = members.OfType <ConstructorDeclaration>().FirstOrDefault(c => (c.Modifiers & Modifiers.Static) == Modifiers.Static);

            if (staticCtor != null)
            {
                MethodDef ctorMethodDef = staticCtor.Annotation <MethodDef>();
                if (ctorMethodDef != null && ctorMethodDef.DeclaringType.IsBeforeFieldInit)
                {
                    var mm = staticCtor.Annotation <MemberMapping>() ?? staticCtor.Body.Annotation <MemberMapping>();
                    Debug.Assert(mm != null);
                    while (true)
                    {
                        ExpressionStatement es = staticCtor.Body.Statements.FirstOrDefault() as ExpressionStatement;
                        if (es == null)
                        {
                            break;
                        }
                        AssignmentExpression assignment = es.Expression as AssignmentExpression;
                        if (assignment == null || assignment.Operator != AssignmentOperatorType.Assign)
                        {
                            break;
                        }
                        FieldDef fieldDef = assignment.Left.Annotation <IField>().ResolveFieldWithinSameModule();
                        if (fieldDef == null || !fieldDef.IsStatic)
                        {
                            break;
                        }
                        FieldDeclaration fieldDecl = members.OfType <FieldDeclaration>().FirstOrDefault(f => f.Annotation <FieldDef>() == fieldDef);
                        if (fieldDecl == null)
                        {
                            break;
                        }
                        var ilRanges = assignment.GetAllRecursiveILRanges();
                        assignment.RemoveAllILRangesRecursive();
                        var varInit = fieldDecl.Variables.Single();
                        varInit.Initializer = assignment.Right.Detach();
                        var ctorIlRanges = new List <Tuple <MemberMapping, List <ILRange> > >(1);
                        if (mm != null)
                        {
                            ctorIlRanges.Add(Tuple.Create(mm, ilRanges));
                        }
                        fieldDecl.AddAnnotation(ctorIlRanges);
                        es.Remove();
                    }
                    if (context.Settings.RemoveEmptyDefaultConstructors && staticCtor.Body.Statements.Count == 0)
                    {
                        staticCtor.Remove();
                    }
                }
            }
        }
Exemplo n.º 3
0
		FieldDeclaration CreateField(FieldDefinition fieldDef)
		{
			FieldDeclaration astField = new FieldDeclaration();
			astField.AddAnnotation(fieldDef);
			VariableInitializer initializer = new VariableInitializer(CleanName(fieldDef.Name));
			astField.AddChild(initializer, FieldDeclaration.Roles.Variable);
			astField.ReturnType = ConvertType(fieldDef.FieldType, fieldDef);
			astField.Modifiers = ConvertModifiers(fieldDef);
			if (fieldDef.HasConstant) {
				if (fieldDef.Constant == null)
					initializer.Initializer = new NullReferenceExpression();
				else
					initializer.Initializer = new PrimitiveExpression(fieldDef.Constant);
			}
			ConvertAttributes(astField, fieldDef);
			return astField;
		}
Exemplo n.º 4
0
 FieldDeclaration ConvertField(IField field)
 {
     FieldDeclaration decl = new FieldDeclaration();
     if (ShowModifiers) {
         Modifiers m = GetMemberModifiers(field);
         if (field.IsConst) {
             m &= ~Modifiers.Static;
             m |= Modifiers.Const;
         } else if (field.IsReadOnly) {
             m |= Modifiers.Readonly;
         } else if (field.IsVolatile) {
             m |= Modifiers.Volatile;
         }
         decl.Modifiers = m;
     }
     if (ShowAttributes) {
         decl.Attributes.AddRange (field.Attributes.Select ((a) => new AttributeSection (ConvertAttribute (a))));
     }
     if (AddResolveResultAnnotations) {
         decl.AddAnnotation(new MemberResolveResult(null, field));
     }
     decl.ReturnType = ConvertType(field.ReturnType);
     Expression initializer = null;
     if (field.IsConst && this.ShowConstantValues)
         initializer = ConvertConstantValue(field.Type, field.ConstantValue);
     decl.Variables.Add(new VariableInitializer(field.Name, initializer));
     return decl;
 }
Exemplo n.º 5
0
		FieldDeclaration CreateField(FieldDefinition fieldDef)
		{
			FieldDeclaration astField = new FieldDeclaration();
			astField.AddAnnotation(fieldDef);
			VariableInitializer initializer = new VariableInitializer(CleanName(fieldDef.Name));
			astField.AddChild(initializer, FieldDeclaration.Roles.Variable);
			astField.ReturnType = ConvertType(fieldDef.FieldType, fieldDef);
			astField.Modifiers = ConvertModifiers(fieldDef);
			if (fieldDef.HasConstant) {
				if (fieldDef.Constant == null) {
					initializer.Initializer = new NullReferenceExpression();
				} else {
					TypeCode c = Type.GetTypeCode(fieldDef.Constant.GetType());
					if (c >= TypeCode.SByte && c <= TypeCode.UInt64 && !fieldDef.DeclaringType.IsEnum) {
						initializer.Initializer = MakePrimitive((long)CSharpPrimitiveCast.Cast(TypeCode.Int64, fieldDef.Constant, false), fieldDef.FieldType);
					} else {
						initializer.Initializer = new PrimitiveExpression(fieldDef.Constant);
					}
				}
			}
			ConvertAttributes(astField, fieldDef);
			return astField;
		}