1469
1470 private void handleSwitch(JCTree switchTree,
1471 JCExpression selector,
1472 List<JCCase> cases,
1473 BiConsumer<JCCase, Env<AttrContext>> attribCase) {
1474 Type seltype = attribExpr(selector, env);
1475
1476 Env<AttrContext> switchEnv =
1477 env.dup(switchTree, env.info.dup(env.info.scope.dup()));
1478
1479 try {
1480 boolean enumSwitch = (seltype.tsym.flags() & Flags.ENUM) != 0;
1481 boolean stringSwitch = types.isSameType(seltype, syms.stringType);
1482 if (!enumSwitch && !stringSwitch)
1483 seltype = chk.checkType(selector.pos(), seltype, syms.intType);
1484
1485 // Attribute all cases and
1486 // check that there are no duplicate case labels or default clauses.
1487 Set<Object> labels = new HashSet<>(); // The set of case labels.
1488 boolean hasDefault = false; // Is there a default label?
1489 @SuppressWarnings("preview")
1490 CaseTree.CaseKind caseKind = null;
1491 boolean wasError = false;
1492 for (List<JCCase> l = cases; l.nonEmpty(); l = l.tail) {
1493 JCCase c = l.head;
1494 if (caseKind == null) {
1495 caseKind = c.caseKind;
1496 } else if (caseKind != c.caseKind && !wasError) {
1497 log.error(c.pos(),
1498 Errors.SwitchMixingCaseTypes);
1499 wasError = true;
1500 }
1501 if (c.getExpressions().nonEmpty()) {
1502 for (JCExpression pat : c.getExpressions()) {
1503 if (TreeInfo.isNull(pat)) {
1504 log.error(pat.pos(),
1505 Errors.SwitchNullNotAllowed);
1506 } else if (enumSwitch) {
1507 Symbol sym = enumConstant(pat, seltype);
1508 if (sym == null) {
1509 log.error(pat.pos(), Errors.EnumLabelMustBeUnqualifiedEnum);
|
1469
1470 private void handleSwitch(JCTree switchTree,
1471 JCExpression selector,
1472 List<JCCase> cases,
1473 BiConsumer<JCCase, Env<AttrContext>> attribCase) {
1474 Type seltype = attribExpr(selector, env);
1475
1476 Env<AttrContext> switchEnv =
1477 env.dup(switchTree, env.info.dup(env.info.scope.dup()));
1478
1479 try {
1480 boolean enumSwitch = (seltype.tsym.flags() & Flags.ENUM) != 0;
1481 boolean stringSwitch = types.isSameType(seltype, syms.stringType);
1482 if (!enumSwitch && !stringSwitch)
1483 seltype = chk.checkType(selector.pos(), seltype, syms.intType);
1484
1485 // Attribute all cases and
1486 // check that there are no duplicate case labels or default clauses.
1487 Set<Object> labels = new HashSet<>(); // The set of case labels.
1488 boolean hasDefault = false; // Is there a default label?
1489 CaseTree.CaseKind caseKind = null;
1490 boolean wasError = false;
1491 for (List<JCCase> l = cases; l.nonEmpty(); l = l.tail) {
1492 JCCase c = l.head;
1493 if (caseKind == null) {
1494 caseKind = c.caseKind;
1495 } else if (caseKind != c.caseKind && !wasError) {
1496 log.error(c.pos(),
1497 Errors.SwitchMixingCaseTypes);
1498 wasError = true;
1499 }
1500 if (c.getExpressions().nonEmpty()) {
1501 for (JCExpression pat : c.getExpressions()) {
1502 if (TreeInfo.isNull(pat)) {
1503 log.error(pat.pos(),
1504 Errors.SwitchNullNotAllowed);
1505 } else if (enumSwitch) {
1506 Symbol sym = enumConstant(pat, seltype);
1507 if (sym == null) {
1508 log.error(pat.pos(), Errors.EnumLabelMustBeUnqualifiedEnum);
|