IKVM.Internal.CompiledAccessStubFieldWrapper.TryGet C# (CSharp) Method

TryGet() static private method

static private TryGet ( TypeWrapper wrapper, PropertyInfo property, FieldWrapper &accessStub ) : bool
wrapper TypeWrapper
property PropertyInfo
accessStub FieldWrapper
return bool
        internal static bool TryGet(TypeWrapper wrapper, PropertyInfo property, out FieldWrapper accessStub)
        {
            NameSigAttribute nameSig = AttributeHelper.GetNameSig(property);
            bool hideFromReflection = AttributeHelper.IsHideFromReflection(property);

            if (nameSig != null || hideFromReflection)
            {
                TypeWrapper type;
                string name;
                string sig;
                if (nameSig == null)
                {
                    type = ClassLoaderWrapper.GetWrapperFromType(property.PropertyType);
                    name = property.Name;
                    sig = type.SigName;
                }
                else
                {
                    type = wrapper.GetClassLoader().FieldTypeWrapperFromSigNoThrow(nameSig.Sig);
                    name = nameSig.Name;
                    sig = nameSig.Sig;
                }
                Modifiers modifiers;
                MemberFlags flags = MemberFlags.AccessStub;
                if (hideFromReflection)
                {
                    // it's a Type 1 access stub (to make inherited fields visible)
                    flags |= MemberFlags.HideFromReflection;
                    modifiers = GetModifiers(property);
                }
                else
                {
                    // it's a Type 2 access stub (to make fields that have a non-public field type visible)
                    ModifiersAttribute attr = AttributeHelper.GetModifiersAttribute(property);
                    modifiers = attr.Modifiers;
                    if (attr.IsInternal)
                    {
                        flags |= MemberFlags.InternalAccess;
                    }
                }
                accessStub = new CompiledAccessStubFieldWrapper(wrapper, property, type, name, sig, modifiers, flags);
                return true;
            }
            else
            {
                accessStub = null;
                return false;
            }
        }