Esempio n. 1
0
        public MethodInfo GetMethod(StableMethodMetadataToken stableMethodMetadataToken)
        {
            ArgumentUtility.CheckNotNull("stableMethodMetadataToken", stableMethodMetadataToken);
            MethodInfo correspondingMethod;

            _map.TryGetValue(stableMethodMetadataToken, out correspondingMethod);
            return(correspondingMethod);
        }
 public bool Equals(StableMethodMetadataToken other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     return(other._token == _token);
 }
Esempio n. 3
0
        private Dictionary <StableMetadataToken, PropertyInfo> BuildSpecialMethodsToPropertyMap(Type startType)
        {
            const BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public;

            var specialMethodsToPropertiesMap = new Dictionary <StableMetadataToken, PropertyInfo> ();

            var declaredOnlyProperties = _firstKnownBaseType.CreateSequence(t => t.BaseType).SelectMany(t => t.GetProperties(bindingFlags));

            foreach (var property in declaredOnlyProperties)
            {
                foreach (var getterSetter in property.GetAccessors(true))
                {
                    var stableMethodMetadataToken = new StableMethodMetadataToken(getterSetter);
                    // Only store first (= nearest to proxiedType) property.
                    if (!specialMethodsToPropertiesMap.ContainsKey(stableMethodMetadataToken))
                    {
                        specialMethodsToPropertiesMap[stableMethodMetadataToken] = property;
                    }
                }
            }

            return(specialMethodsToPropertiesMap);
        }