Ejemplo n.º 1
0
    void ProcessField(TypeDefinition typeDefinition, FieldDefinition field)
    {
        var name = field.Name;

        if (!field.IsPublic || field.IsStatic || !char.IsUpper(name, 0))
        {
            return;
        }

        if (typeDefinition.HasGenericParameters)
        {
            var message =
                $"Skipped public field '{typeDefinition.Name}.{field.Name}' because generic types are not currently supported. You should make this a public property instead.";
            moduleWeaver.LogWarning(message);
            return;
        }

        field.Name      = $"<{name}>k__BackingField";
        field.IsPublic  = false;
        field.IsPrivate = true;
        var get = GetGet(field, name);

        typeDefinition.Methods.Add(get);

        var propertyDefinition = new PropertyDefinition(name, PropertyAttributes.None, field.FieldType)
        {
            GetMethod = get
        };
        var forwardedField = new ForwardedField
        {
            Get                = get,
            FieldType          = field.FieldType,
            DeclaringType      = field.DeclaringType,
            PropertyDefinition = propertyDefinition,
        };

        var isReadOnly = field.Attributes.HasFlag(FieldAttributes.InitOnly);

        if (!isReadOnly)
        {
            var set = GetSet(field, name);
            forwardedField.Set = set;
            typeDefinition.Methods.Add(set);
            propertyDefinition.SetMethod = set;
        }

        forwardedField.IsReadOnly = isReadOnly;
        foreach (var customAttribute in field.CustomAttributes)
        {
            propertyDefinition.CustomAttributes.Add(customAttribute);
        }

        field.CustomAttributes.Add(new CustomAttribute(referenceFinder.CompilerGeneratedReference));
        typeDefinition.Properties.Add(propertyDefinition);

        ForwardedFields.Add(field, forwardedField);
    }
Ejemplo n.º 2
0
    void ProcessField(TypeDefinition typeDefinition, FieldDefinition field)
    {
        var name = field.Name;
        if (!field.IsPublic || field.IsStatic || !char.IsUpper(name, 0))
        {
            return;
        }
        if (typeDefinition.HasGenericParameters)
        {
            var message =
                $"Skipped public field '{typeDefinition.Name}.{field.Name}' because generic types are not currently supported. You should make this a public property instead.";
            moduleWeaver.LogWarning(message);
            return;
        }

        field.Name = $"<{name}>k__BackingField";
        field.IsPublic = false;
        field.IsPrivate = true;
        var get = GetGet(field, name);
        typeDefinition.Methods.Add(get);

        var propertyDefinition = new PropertyDefinition(name, PropertyAttributes.None, field.FieldType)
            {
                GetMethod = get
            };
        var forwardedField = new ForwardedField
            {
                Get = get,
                FieldType = field.FieldType,
                DeclaringType = field.DeclaringType,
                PropertyDefinition = propertyDefinition,
            };

        var isReadOnly = field.Attributes.HasFlag(FieldAttributes.InitOnly);
        if (!isReadOnly)
        {
            var set = GetSet(field, name);
            forwardedField.Set = set;
            typeDefinition.Methods.Add(set);
            propertyDefinition.SetMethod = set;
        }
        forwardedField.IsReadOnly = isReadOnly;
        foreach (var customAttribute in field.CustomAttributes)
        {
            propertyDefinition.CustomAttributes.Add(customAttribute);
        }
        field.CustomAttributes.Add(new CustomAttribute(msCoreReferenceFinder.CompilerGeneratedReference));
        typeDefinition.Properties.Add(propertyDefinition);

        ForwardedFields.Add(field, forwardedField);
    }