chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
namespace OpenTap
{
    /// <summary>
    ///  for reverse caching of parameters. (source/member => parameter).f
    /// </summary>
    interface IParameterizedMembersCache
    {
        void RegisterParameterizedMember(IMemberData mem, ParameterMemberData memberData);
        void UnregisterParameterizedMember(IMemberData mem, ParameterMemberData memberData);
        ParameterMemberData GetParameterFor(IMemberData mem);
    }
 
    /// <summary>
    /// For accessing IParameterizedMembersCaches.
    /// </summary>
    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);
        }
    }
    
}