public override void VisitCaseSwitchLabel(CaseSwitchLabelSyntax node) { var lastWhen = LastWhen as ApexWhenExpressionsClauseSyntax ?? new ApexWhenExpressionsClauseSyntax(); var expression = ConvertExpression(node.Value); lastWhen.Expressions.Add(expression); LastWhen = lastWhen; }
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; }
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; }
public override void VisitDefaultSwitchLabel(DefaultSwitchLabelSyntax node) { LastWhen = new ApexWhenElseClauseSyntax(); }