public override void VisitTagHelperProperty(TagHelperPropertyIntermediateNode node) { // Each 'tag helper property' belongs to a specific tag helper. We want to handle // the cases for components, but leave others alone. This allows our other passes // to handle those cases. if (!node.TagHelper.IsComponentTagHelper()) { _children.Add(node); return; } // Another special case here - this might be a type argument. These don't represent 'real' parameters // that get passed to the component, it needs special code generation support. if (node.TagHelper.IsGenericTypedComponent() && node.BoundAttribute.IsTypeParameterProperty()) { _children.Add(new ComponentTypeArgumentIntermediateNode(node)); return; } // Another special case here -- this might be a 'Context' parameter, which specifies the name // for lambda parameter for parameterized child content if (node.BoundAttribute.IsChildContentParameterNameProperty()) { // Check for each child content with a parameter name, that the parameter name is specified // with literal text. For instance, the following is not allowed and should generate a diagnostic. // // <MyComponent Context="@Foo()">...</MyComponent> if (TryGetAttributeStringContent(node, out var parameterName)) { _component.ChildContentParameterName = parameterName; return; } // The parameter name is invalid. _component.Diagnostics.Add(ComponentDiagnosticFactory.Create_ChildContentHasInvalidParameterOnComponent(node.Source, node.AttributeName, _component.TagName)); return; } _children.Add(new ComponentAttributeIntermediateNode(node)); }