public override void VisitComponentChildContent(ComponentChildContentIntermediateNode node)
            {
                // Check that each child content has a unique parameter name within its scope. This is important
                // because the parameter name can be implicit, and it doesn't work well when nested.
                if (node.IsParameterized)
                {
                    for (var i = 0; i < Ancestors.Count - 1; i++)
                    {
                        var ancestor = Ancestors[i] as ComponentChildContentIntermediateNode;
                        if (ancestor != null &&
                            ancestor.IsParameterized &&
                            string.Equals(node.ParameterName, ancestor.ParameterName, StringComparison.Ordinal))
                        {
                            // Duplicate name. We report an error because this will almost certainly also lead to an error
                            // from the C# compiler that's way less clear.
                            node.Diagnostics.Add(ComponentDiagnosticFactory.Create_ChildContentRepeatedParameterName(
                                                     node.Source,
                                                     node,
                                                     (ComponentIntermediateNode)Ancestors[0],       // Enclosing component
                                                     ancestor,                                      // conflicting child content node
                                                     (ComponentIntermediateNode)Ancestors[i + 1])); // Enclosing component of conflicting child content node
                        }
                    }
                }

                base.VisitDefault(node);
            }