| Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| index 5ce4099ee2c2f29109d571d22900f96183743212..b9d42c008333bb0c8deded7e094f603fb0637e08 100644
|
| --- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| +++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| @@ -1924,11 +1924,26 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
| DartExpression expression = node.getExpression();
|
| Type switchType = nonVoidTypeOf(expression);
|
| // check "case" expressions compatibility
|
| + Type sameCaseType = null;
|
| for (DartSwitchMember switchMember : node.getMembers()) {
|
| if (switchMember instanceof DartCase) {
|
| DartCase caseMember = (DartCase) switchMember;
|
| DartExpression caseExpr = caseMember.getExpr();
|
| Type caseType = nonVoidTypeOf(caseExpr);
|
| + // should be "int" or "String"
|
| + if (!Objects.equal(caseType, intType) && !Objects.equal(caseType, stringType)) {
|
| + onError(caseExpr, TypeErrorCode.CASE_EXPRESSION_SHOULD_BE_INT_STRING, caseType);
|
| + continue;
|
| + }
|
| + // all "case expressions" should be same type
|
| + if (sameCaseType == null) {
|
| + sameCaseType = caseType;
|
| + }
|
| + if (!Objects.equal(caseType, sameCaseType)) {
|
| + onError(caseExpr, TypeErrorCode.CASE_EXPRESSIONS_SHOULD_BE_SAME_TYPE, sameCaseType,
|
| + caseType);
|
| + }
|
| + // compatibility of "switch expression" and "case expression" types
|
| checkAssignable(caseExpr, switchType, caseType);
|
| }
|
| }
|
|
|