private 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)); }
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); }
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); } }