Example #1
0
        public override void VisitCaseSwitchLabel(CaseSwitchLabelSyntax node)
        {
            var lastWhen   = LastWhen as ApexWhenExpressionsClauseSyntax ?? new ApexWhenExpressionsClauseSyntax();
            var expression = ConvertExpression(node.Value);

            lastWhen.Expressions.Add(expression);
            LastWhen = lastWhen;
        }
Example #2
0
        public override void VisitCasePatternSwitchLabel(CasePatternSwitchLabelSyntax node)
        {
            var lastWhen    = new ApexWhenTypeClauseSyntax();
            var pattern     = node.Pattern as DeclarationPatternSyntax;
            var type        = pattern?.Type;
            var designation = pattern?.Designation as SingleVariableDesignationSyntax;

            if (pattern == null || type == null || designation == null)
            {
                throw new InvalidOperationException("Unsupported switch pattern format. " +
                                                    "Case type variable is expected.");
            }

            lastWhen.Type       = ConvertType(type);
            lastWhen.Identifier = designation.Identifier.ValueText;
            LastWhen            = lastWhen;
        }
Example #3
0
        public override void VisitSwitchSection(SwitchSectionSyntax node)
        {
            // switch label should initialize the LastWhen clause
            LastWhen = null;
            foreach (var label in node.Labels.EmptyIfNull())
            {
                label.Accept(this);
            }

            // no labels per swith section? looks like the source file is broken
            if (LastWhen == null)
            {
                throw new InvalidOperationException("Unsupported switch section format. " +
                                                    "Case expression, pattern or default label is expected.");
            }

            var lastWhen = LastWhen;

            lastWhen.LeadingComments = GetLeadingAndNoApexComments(node);
            lastWhen.Block           = new ApexBlockSyntax();

            foreach (var stmt in node.Statements.EmptyIfNull())
            {
                stmt.Accept(this);
                if (LastStatement != null)
                {
                    lastWhen.Block.Statements.Add(LastStatement);
                    LastStatement = null;
                }
            }

            // remove C#'s break statement from the block keeping its trailing comments
            if (lastWhen.Block.Statements.LastOrDefault() is ApexBreakStatementSyntax @break)
            {
                lastWhen.Block.Statements.Remove(@break);
                lastWhen.Block.TrailingComments = @break.TrailingComments;
            }

            LastWhen = lastWhen;
        }
Example #4
0
 public override void VisitDefaultSwitchLabel(DefaultSwitchLabelSyntax node)
 {
     LastWhen = new ApexWhenElseClauseSyntax();
 }