--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Fri Sep 28 14:57:31 2012 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Sat Sep 29 09:00:58 2012 -0700
@@ -2165,27 +2165,10 @@
while (true) {
int pos = token.pos;
switch (token.kind) {
- case CASE: {
- nextToken();
- JCExpression pat = parseExpression();
- accept(COLON);
- List<JCStatement> stats = blockStatements();
- JCCase c = F.at(pos).Case(pat, stats);
- if (stats.isEmpty())
- storeEnd(c, S.prevToken().endPos);
- cases.append(c);
+ case CASE:
+ case DEFAULT:
+ cases.append(switchBlockStatementGroup());
break;
- }
- case DEFAULT: {
- nextToken();
- accept(COLON);
- List<JCStatement> stats = blockStatements();
- JCCase c = F.at(pos).Case(null, stats);
- if (stats.isEmpty())
- storeEnd(c, S.prevToken().endPos);
- cases.append(c);
- break;
- }
case RBRACE: case EOF:
return cases.toList();
default:
@@ -2196,6 +2179,32 @@
}
}
+ protected JCCase switchBlockStatementGroup() {
+ int pos = token.pos;
+ List<JCStatement> stats;
+ JCCase c;
+ switch (token.kind) {
+ case CASE:
+ nextToken();
+ JCExpression pat = parseExpression();
+ accept(COLON);
+ stats = blockStatements();
+ c = F.at(pos).Case(pat, stats);
+ if (stats.isEmpty())
+ storeEnd(c, S.prevToken().endPos);
+ return c;
+ case DEFAULT:
+ nextToken();
+ accept(COLON);
+ stats = blockStatements();
+ c = F.at(pos).Case(null, stats);
+ if (stats.isEmpty())
+ storeEnd(c, S.prevToken().endPos);
+ return c;
+ }
+ throw new AssertionError("should not reach here");
+ }
+
/** MoreStatementExpressions = { COMMA StatementExpression }
*/
<T extends ListBuffer<? super JCExpressionStatement>> T moreStatementExpressions(int pos,