|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Reflection.Runtime.TypeInfos;
namespace System.Reflection.Runtime.BindingFlagSupport
{
//==========================================================================================================================
// Policies for fields.
//==========================================================================================================================
internal sealed class FieldPolicies : MemberPolicies<FieldInfo>
{
public static readonly FieldPolicies Instance = new FieldPolicies();
public FieldPolicies() : base(MemberTypeIndex.Field) { }
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2070:UnrecognizedReflectionPattern",
Justification = "Reflection implementation")]
public sealed override IEnumerable<FieldInfo> GetDeclaredMembers(Type type)
{
return type.GetFields(DeclaredOnlyLookup);
}
public sealed override IEnumerable<FieldInfo> CoreGetDeclaredMembers(RuntimeTypeInfo type, NameFilter? optionalNameFilter, RuntimeTypeInfo reflectedType)
{
return type.CoreGetDeclaredFields(optionalNameFilter, reflectedType);
}
public sealed override bool AlwaysTreatAsDeclaredOnly => false;
public sealed override void GetMemberAttributes(FieldInfo member, out MethodAttributes visibility, out bool isStatic, out bool isVirtual, out bool isNewSlot)
{
FieldAttributes fieldAttributes = member.Attributes;
visibility = (MethodAttributes)(fieldAttributes & FieldAttributes.FieldAccessMask);
isStatic = (0 != (fieldAttributes & FieldAttributes.Static));
isVirtual = false;
isNewSlot = false;
}
public sealed override bool ImplicitlyOverrides(FieldInfo baseMember, FieldInfo derivedMember) => false;
public sealed override bool IsSuppressedByMoreDerivedMember(FieldInfo member, FieldInfo[] priorMembers, int startIndex, int endIndex)
{
return false;
}
public sealed override bool OkToIgnoreAmbiguity(FieldInfo m1, FieldInfo m2)
{
return true; // Unlike most member types, Field ambiguities are tolerated as long as they're defined in different classes.
}
}
}
|