示例#1
0
        private static bool MatchParameters(GenericContext <ParameterDefinition> baseParameterType, GenericContext <ParameterDefinition> parameterType)
        {
            var baseParam = baseParameterType.ResolveWithContext(baseParameterType.Item.ParameterType);
            var param     = parameterType.ResolveWithContext(parameterType.Item.ParameterType);

            return(IsSameType(baseParam, param));
        }
示例#2
0
        static bool MatchParameters(GenericContext <ParameterDefinition> baseParameterType, GenericContext <ParameterDefinition> parameterType)
        {
            if (baseParameterType.Item.IsIn != parameterType.Item.IsIn ||
                baseParameterType.Item.IsOut != parameterType.Item.IsOut)
            {
                return(false);
            }
            var baseParam = baseParameterType.ResolveWithContext(baseParameterType.Item.ParameterType);
            var param     = parameterType.ResolveWithContext(parameterType.Item.ParameterType);

            return(IsSameType(baseParam, param));
        }
示例#3
0
        private static bool MatchMethod(GenericContext <MethodDefinition> candidate, GenericContext <MethodDefinition> method)
        {
            var mCandidate = candidate.Item;
            var mMethod    = method.Item;

            if (mCandidate.Name != mMethod.Name)
            {
                return(false);
            }

            if (mCandidate.HasOverrides)
            {
                return(false);
            }

            if (!IsSameType(candidate.ResolveWithContext(mCandidate.ReturnType), method.ResolveWithContext(mMethod.ReturnType)))
            {
                return(false);
            }

            if (mCandidate.HasGenericParameters || mMethod.HasGenericParameters)
            {
                if (!mCandidate.HasGenericParameters || !mMethod.HasGenericParameters || mCandidate.GenericParameters.Count != mMethod.GenericParameters.Count)
                {
                    return(false);
                }
            }

            if (mCandidate.HasParameters || mMethod.HasParameters)
            {
                if (!mCandidate.HasParameters || !mMethod.HasParameters || mCandidate.Parameters.Count != mMethod.Parameters.Count)
                {
                    return(false);
                }

                for (int index = 0; index < mCandidate.Parameters.Count; index++)
                {
                    if (!MatchParameters(candidate.ApplyTo(mCandidate.Parameters[index]), method.ApplyTo(mMethod.Parameters[index])))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
示例#4
0
        private static bool MatchEvent(GenericContext <EventDefinition> candidate, GenericContext <EventDefinition> ev)
        {
            var mCandidate = candidate.Item;
            var mEvent     = ev.Item;

            if (mCandidate.Name != mEvent.Name)
            {
                return(false);
            }

            if ((mCandidate.AddMethod ?? mCandidate.RemoveMethod).HasOverrides)
            {
                return(false);
            }

            if (!IsSameType(candidate.ResolveWithContext(mCandidate.EventType), ev.ResolveWithContext(mEvent.EventType)))
            {
                return(false);
            }

            return(true);
        }
示例#5
0
        private static bool MatchProperty(GenericContext <PropertyDefinition> candidate, GenericContext <PropertyDefinition> property)
        {
            var mCandidate = candidate.Item;
            var mProperty  = property.Item;

            if (mCandidate.Name != mProperty.Name)
            {
                return(false);
            }

            if ((mCandidate.GetMethod ?? mCandidate.SetMethod).HasOverrides)
            {
                return(false);
            }

            if (!IsSameType(candidate.ResolveWithContext(mCandidate.PropertyType), property.ResolveWithContext(mProperty.PropertyType)))
            {
                return(false);
            }

            if (mCandidate.HasParameters || mProperty.HasParameters)
            {
                if (!mCandidate.HasParameters || !mProperty.HasParameters || mCandidate.Parameters.Count != mProperty.Parameters.Count)
                {
                    return(false);
                }

                for (int index = 0; index < mCandidate.Parameters.Count; index++)
                {
                    if (!MatchParameters(candidate.ApplyTo(mCandidate.Parameters[index]), property.ApplyTo(mProperty.Parameters[index])))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
示例#6
0
 private static IEnumerable <GenericContext <TypeDefinition> > BaseTypes(GenericContext <TypeDefinition> type)
 {
     while (type.Item.BaseType != null)
     {
         var baseType        = type.Item.BaseType;
         var genericBaseType = baseType as GenericInstanceType;
         if (genericBaseType != null)
         {
             type = new GenericContext <TypeDefinition>(genericBaseType.ResolveOrThrow(),
                                                        genericBaseType.GenericArguments.Select(t => type.ResolveWithContext(t)));
         }
         else
         {
             type = new GenericContext <TypeDefinition>(baseType.ResolveOrThrow());
         }
         yield return(type);
     }
 }
示例#7
0
        static IEnumerable <GenericContext <TypeDefinition> > BaseTypes(GenericContext <TypeDefinition> type)
        {
            while (type.Item.BaseType != null)
            {
                var baseType        = type.Item.BaseType;
                var genericBaseType = baseType as GenericInstanceType;
                if (genericBaseType != null)
                {
#pragma warning disable 618
                    type = new GenericContext <TypeDefinition>(genericBaseType.ResolveOrThrow(),
#pragma warning restore 618
                                                               genericBaseType.GenericArguments.Select(t => type.ResolveWithContext(t)));
                }
                else
#pragma warning disable 618
                {
                    type = new GenericContext <TypeDefinition>(baseType.ResolveOrThrow());
                }
#pragma warning restore 618
                yield return(type);
            }
        }