@@ -451,6 +451,7 @@ private void handleSwitch(JCTree tree,
451
451
return l ;
452
452
});
453
453
newCases .add (c .head );
454
+ appendBreakIfNeeded (tree , cases , c .head );
454
455
}
455
456
cases = processCases (tree , newCases .toList ());
456
457
ListBuffer <JCStatement > statements = new ListBuffer <>();
@@ -595,7 +596,6 @@ private void handleSwitch(JCTree tree,
595
596
previousCompletesNormally =
596
597
c .caseKind == CaseTree .CaseKind .STATEMENT &&
597
598
c .completesNormally ;
598
- appendBreakIfNeeded (tree , c );
599
599
}
600
600
601
601
if (tree .hasTag (Tag .SWITCH )) {
@@ -640,9 +640,11 @@ public void visitCase(JCCase c) {
640
640
}.scan (c .stats );
641
641
}
642
642
643
- private void appendBreakIfNeeded (JCTree switchTree , JCCase c ) {
644
- if (c .caseKind == CaseTree .CaseKind .RULE ) {
645
- JCBreak brk = make .at (TreeInfo .endPos (c .stats .last ())).Break (null );
643
+ void appendBreakIfNeeded (JCTree switchTree , List <JCCase > cases , JCCase c ) {
644
+ if (c .caseKind == CaseTree .CaseKind .RULE || (cases .last () == c && c .completesNormally )) {
645
+ JCTree pos = c .stats .nonEmpty () ? c .stats .last ()
646
+ : c ;
647
+ JCBreak brk = make .at (TreeInfo .endPos (pos )).Break (null );
646
648
brk .target = switchTree ;
647
649
c .stats = c .stats .append (brk );
648
650
}
@@ -745,7 +747,6 @@ public void resolve(VarSymbol commonBinding,
745
747
} else {
746
748
newLabel = List .of (make .PatternCaseLabel (binding , newGuard ));
747
749
}
748
- appendBreakIfNeeded (currentSwitch , accummulated );
749
750
nestedCases .add (make .Case (CaseKind .STATEMENT , newLabel , accummulated .stats , null ));
750
751
lastGuard = newGuard ;
751
752
}
1 commit comments
openjdk-notifier[bot] commentedon Mar 27, 2023
Review
Issues