namespace OpenTap
{
///
/// for reverse caching of parameters. (source/member => parameter).f
///
interface IParameterizedMembersCache
{
void RegisterParameterizedMember(IMemberData mem, ParameterMemberData memberData);
void UnregisterParameterizedMember(IMemberData mem, ParameterMemberData memberData);
ParameterMemberData GetParameterFor(IMemberData mem);
}
///
/// For accessing IParameterizedMembersCaches.
///
static class ParameterizedMembersCache
{
public static (IParameterMemberData, ITestStepParent) GetParameterFor(ITestStepParent step, IMemberData member)
{
if (step is IParameterizedMembersCache cache && cache.GetParameterFor(member) is ParameterMemberData p) // implemented by TestStep.
return (p, p.Target as ITestStepParent);
var source = step;
while (source != null)
{
source = source.Parent;
if (member.GetParameter(source, step) is IParameterMemberData p2)
return (p2, source);
}
return (null, null);
}
}
}