@@ -553,6 +553,53 @@ public class KotlinTokenizer: SwiftTokenizer {
553
553
return tokenize ( expression. postfixExpression) + expression. newToken ( . symbol, " !! " )
554
554
}
555
555
556
+ open override func tokenize( _ expression: TernaryConditionalOperatorExpression ) -> [ Token ] {
557
+ return [
558
+ [ expression. newToken ( . keyword, " if " ) ] ,
559
+ tokenize ( expression. conditionExpression)
560
+ . prefix ( with: expression. newToken ( . startOfScope, " ( " ) )
561
+ . suffix ( with: expression. newToken ( . endOfScope, " ) " ) ) ,
562
+ tokenize ( expression. trueExpression) ,
563
+ [ expression. newToken ( . keyword, " else " ) ] ,
564
+ tokenize ( expression. falseExpression) ,
565
+ ] . joined ( token: expression. newToken ( . space, " " ) )
566
+ }
567
+
568
+
569
+ open override func tokenize( _ expression: SequenceExpression ) -> [ Token ] {
570
+ var elementTokens = expression. elements. map ( { tokenize ( $0, node: expression) } )
571
+
572
+ //If there is a ternary, then prefix with if
573
+ if let ternaryOperatorIndex = expression. elements. index ( where: { $0. isTernaryConditionalOperator } ) ,
574
+ ternaryOperatorIndex > 0 {
575
+ let assignmentIndex = expression. elements. index ( where: { $0. isAssignmentOperator } ) ?? - 1
576
+ let prefixTokens = [
577
+ expression. newToken ( . keyword, " if " ) ,
578
+ expression. newToken ( . space, " " ) ,
579
+ expression. newToken ( . startOfScope, " ( " ) ,
580
+ ]
581
+ elementTokens [ assignmentIndex + 1 ] =
582
+ prefixTokens +
583
+ elementTokens[ assignmentIndex + 1 ]
584
+ elementTokens [ ternaryOperatorIndex - 1 ] = elementTokens [ ternaryOperatorIndex - 1 ]
585
+ . suffix ( with: expression. newToken ( . endOfScope, " ) " ) )
586
+ }
587
+ return elementTokens. joined ( token: expression. newToken ( . space, " " ) )
588
+ }
589
+
590
+ open override func tokenize( _ element: SequenceExpression . Element , node: ASTNode ) -> [ Token ] {
591
+ switch element {
592
+ case . ternaryConditionalOperator( let expr) :
593
+ return [
594
+ tokenize ( expr) ,
595
+ [ node. newToken ( . keyword, " else " ) ] ,
596
+ ] . joined ( token: node. newToken ( . space, " " ) )
597
+ default :
598
+ return super. tokenize ( element, node: node)
599
+ }
600
+ }
601
+
602
+
556
603
// MARK: - Types
557
604
open override func tokenize( _ type: ArrayType , node: ASTNode ) -> [ Token ] {
558
605
return
0 commit comments