private TCecil GetMemberItemFromCache <TCecil, TReflector>(object item, Dictionary <TReflector, TCecil> cache, FindMatchingMember <TCecil, TReflector> finder) where TReflector : RC.IMemberReference
        {
            if (!(item is TReflector))
            {
                throw new ArgumentException(typeof(TReflector).Name);
            }

            TReflector memberdec = (TReflector)item;
            TCecil     result    = default(TCecil);

            if ((memberdec != null) && (!cache.ContainsKey(memberdec)))
            {
                ITypeDeclaration classdec = (ITypeDeclaration)memberdec.DeclaringType;
                TypeDefinition   typedef  = ReflectorHelper.FindMatchingType(AssemblyDefinition, classdec);

                if (typedef != null)
                {
                    result = finder(typedef, memberdec);
                    if (result != null)
                    {
                        // add result to cache
                        cache.Add(memberdec, result);
                    }
                }
            }
            else
            {
                // Definition is already cached
                result = cache[memberdec];
            }

            return(result);
        }
Ejemplo n.º 2
0
 public EventDefinition GetEventDefinition(IEventDeclaration item)
 {
     return(TryGetOrAdd(_eventcache, item, edef =>
     {
         var tdef = GetTypeDefinition(item.DeclaringType as ITypeDeclaration);
         return tdef == null ? null : ReflectorHelper.FindMatchingEvent(tdef, edef);
     }));
 }
Ejemplo n.º 3
0
 public PropertyDefinition GetPropertyDefinition(IPropertyDeclaration item)
 {
     return(TryGetOrAdd(_propertycache, item, pdef =>
     {
         var tdef = GetTypeDefinition(item.DeclaringType as ITypeDeclaration);
         return tdef == null ? null : ReflectorHelper.FindMatchingProperty(tdef, pdef);
     }));
 }
Ejemplo n.º 4
0
 public FieldDefinition GetFieldDefinition(IFieldDeclaration item)
 {
     return(TryGetOrAdd(_fieldcache, item, fdef =>
     {
         var tdef = GetTypeDefinition(item.DeclaringType as ITypeDeclaration);
         return tdef == null ? null : ReflectorHelper.FindMatchingField(tdef, fdef);
     }));
 }
Ejemplo n.º 5
0
 public MethodDefinition GetMethodDefinition(IMethodDeclaration item)
 {
     return(TryGetOrAdd(_methodcache, item, mdef =>
     {
         var tdef = GetTypeDefinition(item.DeclaringType as ITypeDeclaration);
         return tdef == null ? null : ReflectorHelper.FindMatchingMethod(tdef, mdef);
     }));
 }
Ejemplo n.º 6
0
        public Resource GetResource(IResource item)
        {
            // Fix for in-memory resource in embedded resource
            var parent = item.GetType().GetProperty("Parent", typeof(IEmbeddedResource));

            if (parent != null)
            {
                item = parent.GetValue(item, null) as IEmbeddedResource;
            }

            return(TryGetOrAdd(_resourcecache, item, res => ReflectorHelper.FindMatchingResource(AssemblyDefinition, res)));
        }
Ejemplo n.º 7
0
        public AssemblyNameReference GetAssemblyNameReference(IAssemblyReference item)
        {
            //fix: use toString() instead of object himself (getHashcode seems to be overriden)
            AssemblyNameReference result;

            var key = item.ToString();

            if (_assemblynamereferencecache.TryGetValue(key, out result))
            {
                return(result);
            }

            result = ReflectorHelper.FindMatchingAssemblyReference(AssemblyDefinition, item);
            if (result == null)
            {
                return(null);
            }

            _assemblynamereferencecache.Add(key, result);
            return(result);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Retrieve an Embedded Resource from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Embedded Resource</returns>
        public override EmbeddedResource GetEmbeddedResource(object item)
        {
            IResource res = item as IResource;

            return((EmbeddedResource)ReflectorHelper.ReflectorResourceToCecilResource(res));
        }
Ejemplo n.º 9
0
 public TypeDefinition GetTypeDefinition(ITypeDeclaration item)
 {
     return(TryGetOrAdd(_typecache, item, tdef => ReflectorHelper.FindMatchingType(AssemblyDefinition, tdef)));
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Retrieve a Linked Resource from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Linked Resource</returns>
        public override LinkedResource GetLinkedResource(object item)
        {
            var res = item as IResource;

            return((LinkedResource)ReflectorHelper.ReflectorResourceToCecilResource(res));
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Retrieve a Type Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Type Definition</returns>
        public override TypeDefinition GetTypeDefinition(object item)
        {
            ITypeDeclaration tdec = item as ITypeDeclaration;

            return(ReflectorHelper.ReflectorTypeToCecilType(tdec));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Retrieve a Field Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Field Definition</returns>
        public override FieldDefinition GetFieldDefinition(object item)
        {
            IFieldDeclaration fdec = item as IFieldDeclaration;

            return(ReflectorHelper.ReflectorFieldToCecilField(fdec));
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Retrieve an Event Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Event Definition</returns>
        public override EventDefinition GetEventDefinition(object item)
        {
            IEventDeclaration edec = item as IEventDeclaration;

            return(ReflectorHelper.ReflectorEventToCecilEvent(edec));
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Retrieve a Property Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Property Definition</returns>
        public override PropertyDefinition GetPropertyDefinition(object item)
        {
            IPropertyDeclaration pdec = (IPropertyDeclaration)item;

            return(ReflectorHelper.ReflectorPropertyToCecilProperty(pdec));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Retrieve an Assembly Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Assembly Definition</returns>
        public override AssemblyDefinition GetAssemblyDefinition(object item)
        {
            IAssemblyLocation aloc = item as IAssemblyLocation;

            return(ReflectorHelper.ReflectorAssemblyLocationToCecilAssemblyDefinition(aloc));
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Retrieve an Assembly Name Reference from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Assembly Name Reference</returns>
        public override AssemblyNameReference GetAssemblyNameReference(object item)
        {
            IAssemblyReference aref = item as IAssemblyReference;

            return(ReflectorHelper.ReflectorAssemblyReferenceToCecilAssemblyNameReference(aref));
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Retrieve a Method Definition from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching Method Definition</returns>
        public override MethodDefinition GetMethodDefinition(object item)
        {
            IMethodDeclaration mdec = (IMethodDeclaration)item;

            return(ReflectorHelper.ReflectorMethodToCecilMethod(mdec));
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Retrieve an Assembly Linked Resource from the object
        /// </summary>
        /// <param name="item">the object</param>
        /// <returns>The matching A.L. Resource</returns>
        public override AssemblyLinkedResource GetAssemblyLinkedResource(object item)
        {
            IResource res = item as IResource;

            return((AssemblyLinkedResource)ReflectorHelper.ReflectorResourceToCecilResource(res));
        }