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