1450
1451 private void handleSwitch(JCTree switchTree,
1452 JCExpression selector,
1453 List<JCCase> cases,
1454 BiConsumer<JCCase, Env<AttrContext>> attribCase) {
1455 Type seltype = attribExpr(selector, env);
1456
1457 Env<AttrContext> switchEnv =
1458 env.dup(switchTree, env.info.dup(env.info.scope.dup()));
1459
1460 try {
1461 boolean enumSwitch = (seltype.tsym.flags() & Flags.ENUM) != 0;
1462 boolean stringSwitch = types.isSameType(seltype, syms.stringType);
1463 if (!enumSwitch && !stringSwitch)
1464 seltype = chk.checkType(selector.pos(), seltype, syms.intType);
1465
1466 // Attribute all cases and
1467 // check that there are no duplicate case labels or default clauses.
1468 Set<Object> labels = new HashSet<>(); // The set of case labels.
1469 boolean hasDefault = false; // Is there a default label?
1470 @SuppressWarnings("preview")
1471 CaseTree.CaseKind caseKind = null;
1472 boolean wasError = false;
1473 for (List<JCCase> l = cases; l.nonEmpty(); l = l.tail) {
1474 JCCase c = l.head;
1475 if (caseKind == null) {
1476 caseKind = c.caseKind;
1477 } else if (caseKind != c.caseKind && !wasError) {
1478 log.error(c.pos(),
1479 Errors.SwitchMixingCaseTypes);
1480 wasError = true;
1481 }
1482 if (c.getExpressions().nonEmpty()) {
1483 for (JCExpression pat : c.getExpressions()) {
1484 if (TreeInfo.isNull(pat)) {
1485 log.error(pat.pos(),
1486 Errors.SwitchNullNotAllowed);
1487 } else if (enumSwitch) {
1488 Symbol sym = enumConstant(pat, seltype);
1489 if (sym == null) {
1490 log.error(pat.pos(), Errors.EnumLabelMustBeUnqualifiedEnum);
|
1450
1451 private void handleSwitch(JCTree switchTree,
1452 JCExpression selector,
1453 List<JCCase> cases,
1454 BiConsumer<JCCase, Env<AttrContext>> attribCase) {
1455 Type seltype = attribExpr(selector, env);
1456
1457 Env<AttrContext> switchEnv =
1458 env.dup(switchTree, env.info.dup(env.info.scope.dup()));
1459
1460 try {
1461 boolean enumSwitch = (seltype.tsym.flags() & Flags.ENUM) != 0;
1462 boolean stringSwitch = types.isSameType(seltype, syms.stringType);
1463 if (!enumSwitch && !stringSwitch)
1464 seltype = chk.checkType(selector.pos(), seltype, syms.intType);
1465
1466 // Attribute all cases and
1467 // check that there are no duplicate case labels or default clauses.
1468 Set<Object> labels = new HashSet<>(); // The set of case labels.
1469 boolean hasDefault = false; // Is there a default label?
1470 CaseTree.CaseKind caseKind = null;
1471 boolean wasError = false;
1472 for (List<JCCase> l = cases; l.nonEmpty(); l = l.tail) {
1473 JCCase c = l.head;
1474 if (caseKind == null) {
1475 caseKind = c.caseKind;
1476 } else if (caseKind != c.caseKind && !wasError) {
1477 log.error(c.pos(),
1478 Errors.SwitchMixingCaseTypes);
1479 wasError = true;
1480 }
1481 if (c.getExpressions().nonEmpty()) {
1482 for (JCExpression pat : c.getExpressions()) {
1483 if (TreeInfo.isNull(pat)) {
1484 log.error(pat.pos(),
1485 Errors.SwitchNullNotAllowed);
1486 } else if (enumSwitch) {
1487 Symbol sym = enumConstant(pat, seltype);
1488 if (sym == null) {
1489 log.error(pat.pos(), Errors.EnumLabelMustBeUnqualifiedEnum);
|