Exemple #1
0
        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);
        }
Exemple #2
0
 /// <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));
 }