/// <summary> /// Checks whether current instance of <see cref="Argument"/> is assignable to given <paramref name="parameter"/>. /// A concrete subclass decides, how the assignability is defined. /// </summary> /// <param name="parameter">A parameter to which the assignability is being checked.</param> /// <returns>True, if current instance of <see cref="Argument"/> is assignable to given <paramref name="parameter"/>. Otherwise false.</returns> public abstract bool IsAssignableTo(Parameter parameter);
/// <summary> /// Determines whether this argument can be assigned to given <paramref name="parameter"/>. /// It can be assigned if their types are compatible or /// when argument value is null and parameter is null assignable. /// </summary> /// <param name="parameter">A parameter against which the assignability will be determined.</param> /// <returns>True if this argument can be assigned to given <paramref name="parameter"/>. Otherwise false.</returns> public override bool IsAssignableTo(Parameter parameter) => IsNull ? parameter.IsNullAssignable : parameter.Type.IsAssignableFrom(Type);
/// <summary> /// A constructor that takes the <see cref="Parameter"/> and <see cref="Arguments"/>. /// </summary> /// <param name="parameter">The <see cref="Parameter"/>.</param> /// <param name="arguments">Arguments that are assignable to the <see cref="Parameter"/>.</param> internal Parameter2ArgumentsRelation(Parameter parameter, IEnumerable<Argument> arguments) { Parameter = parameter; Arguments = arguments; }
/// <summary> /// A constructor that populates internal properties. /// </summary> /// <param name="parameter">The function parameter.</param> /// <param name="arguments">Arguments that can be assigned to the <paramref name="parameter"/>.</param> /// <param name="isAssignableFromMandatoryArgument">Indicates whether the mandatory argument is assignable to the <paramref name="parameter"/>.</param> internal Parameter2MandatoryArgumentsRelation(Parameter parameter, IEnumerable<Argument> arguments, bool isAssignableFromMandatoryArgument) : base(parameter, arguments) { IsAssignableFromMandatoryArgument = isAssignableFromMandatoryArgument; }
/// <summary> /// A constructor that takes the <see cref="Parameter"/> and <see cref="Arguments"/>. /// </summary> /// <param name="parameter">The <see cref="Parameter"/>.</param> /// <param name="arguments">Arguments that are assignable to the <see cref="Parameter"/>.</param> internal Parameter2InvocationsRelation(Parameter parameter, IEnumerable<IInvocation> arguments) { Parameter = parameter; Arguments = arguments; }
/// <summary> /// Determines whether this function's returned type is compatible with given <paramref name="parameter"/>. /// </summary> /// <param name="parameter">A parameter which assignability will be determined.</param> /// <returns>True if this function's returned type is compatible with given <paramref name="parameter"/>. Otherwise false.</returns> public override bool IsAssignableTo(Parameter parameter) => parameter.Type.IsAssignableFrom(Type);