コード例 #1
0
        public override SelectionRuleNode VisitFlowExpression(TmtParser.FlowExpressionContext context)
        {
            SelectionRuleNode result = null;

            var id = context.right?.Text?.Trim('\'');

            if (!string.IsNullOrWhiteSpace(id))
            {
                switch (context.op?.GetText())
                {
                case "is":
                    result = GetIdComparisonRuleNode(id, Scope.Object);
                    break;

                case "crosses":
                    var template = GetTrustBoundaryTemplate(id);
                    if (template != null)
                    {
                        result = new TrustBoundaryTemplateRuleNode(template);
                    }
                    else
                    {
                        if (_source.ElementTypes?.Any(x => x.IsGeneric &&
                                                      (x.ElementType == ElementType.BorderBoundary || x.ElementType == ElementType.LineBoundary) &&
                                                      string.CompareOrdinal(x.TypeId, id) == 0) ?? false)
                        {
                            result = new CrossTrustBoundaryRuleNode("Crosses Trust Boundary", true);
                        }
                    }
                    break;
                }

                if (Rule == null)
                {
                    Rule = result;
                }
            }

            return(result);
        }
コード例 #2
0
 /// <summary>
 /// Visit a parse tree produced by the <c>flowExpression</c>
 /// labeled alternative in <see cref="TmtParser.expression"/>.
 /// <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 VisitFlowExpression([NotNull] TmtParser.FlowExpressionContext context)
 {
     return(VisitChildren(context));
 }
コード例 #3
0
 /// <summary>
 /// Exit a parse tree produced by the <c>flowExpression</c>
 /// labeled alternative in <see cref="TmtParser.expression"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitFlowExpression([NotNull] TmtParser.FlowExpressionContext context)
 {
 }