private static TResult GetOrAddSyntaxBuilder<TResult, T1, T2>(this IBuilderSyntax bindingSyntax)
     where T1 : class
     where TResult : IBindingInfoSyntax<T2>
 {
     if (bindingSyntax is TResult)
         return (TResult)bindingSyntax;
     IBindingBuilder builder = bindingSyntax.Builder;
     object syntaxBuilder;
     if (!builder.TryGetData(SyntaxBuilderConstant, out syntaxBuilder) || !(syntaxBuilder is TResult))
     {
         syntaxBuilder = new SyntaxBuilder<T1, T2>(builder);
         builder.AddOrUpdate(SyntaxBuilderConstant, syntaxBuilder);
     }
     return (TResult)syntaxBuilder;
 }