public override AttributeDefinition VisitAttribute_name_part(V1QueryParser.Attribute_name_partContext context) { var attributeName = context.NAME().GetText(); var downcast = context.downcast()?.asset_type_token().GetText(); var filter = context.attribute_filter(); AttributeDefinition result; if (!_metaModel.TryGetAttributeDefinition(_rootAssetType, attributeName, out result)) { throw new InvalidOperationException($"Cannot find attribute definition {_rootAssetType.Token}.{attributeName}"); } if (!string.IsNullOrEmpty(downcast)) { var downcastAssetType = _metaModel.GetAssetType(downcast); result = result.CreateDowncastAttributeDefinition(downcastAssetType); } if (filter != null) { var subVisitor = new FilterVisitor(result.RelatedAssetType, _metaModel); var subFilter = subVisitor.Visit(filter); result = result.CreateFilteredAttributeDefinition(subFilter); } return(result); }
/// <summary> /// Exit a parse tree produced by <see cref="V1QueryParser.attribute_name_part"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitAttribute_name_part([NotNull] V1QueryParser.Attribute_name_partContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="V1QueryParser.attribute_name_part"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitAttribute_name_part([NotNull] V1QueryParser.Attribute_name_partContext context) { return(VisitChildren(context)); }