diff options
author | Stephan Herrmann | 2019-01-26 22:58:48 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-01-26 23:16:33 +0000 |
commit | 611d1a2bf2ab2bdbd4d1e773bc63025fa361e04b (patch) | |
tree | c8fb54ea0f51f039d774bb64d3577eaee2e69ba4 /org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java | |
parent | 8a0f495831cdc96befb8b9c17c94d3f4030e9b3b (diff) | |
download | eclipse.jdt.core-611d1a2bf2ab2bdbd4d1e773bc63025fa361e04b.tar.gz eclipse.jdt.core-611d1a2bf2ab2bdbd4d1e773bc63025fa361e04b.tar.xz eclipse.jdt.core-611d1a2bf2ab2bdbd4d1e773bc63025fa361e04b.zip |
resolve problems
- NPE fixed and made resolving more robust (less secondary errors)
- also added Iterable.java to converterJclMin9*
- enabled "12" in AbstractJavaModelTests
Change-Id: I0047683ab486b019da103d28d1ad4df0172136cf
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
Diffstat (limited to 'org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java')
-rw-r--r-- | org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java index b2e370e5da..a43facb6f9 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/SwitchExpression.java @@ -403,7 +403,8 @@ public class SwitchExpression extends SwitchStatement implements IPolyExpression boolean typeUniformAcrossAllArms = true; TypeBinding tmp = this.originalValueResultExpressionTypes[0]; for (int i = 1, l = this.originalValueResultExpressionTypes.length; i < l; ++i) { - if (TypeBinding.notEquals(tmp, this.originalValueResultExpressionTypes[i])) { + TypeBinding originalType = this.originalValueResultExpressionTypes[i]; + if (originalType != null && TypeBinding.notEquals(tmp, originalType)) { typeUniformAcrossAllArms = false; break; } @@ -412,15 +413,17 @@ public class SwitchExpression extends SwitchStatement implements IPolyExpression // then that is the type of the switch expression. if (typeUniformAcrossAllArms) { tmp = this.originalValueResultExpressionTypes[0]; - for (int i = 0; i < resultExpressionsCount; ++i) { - tmp = NullAnnotationMatching.moreDangerousType(tmp, this.originalValueResultExpressionTypes[i]); + for (int i = 1; i < resultExpressionsCount; ++i) { + if (this.originalValueResultExpressionTypes[i] != null) + tmp = NullAnnotationMatching.moreDangerousType(tmp, this.originalValueResultExpressionTypes[i]); } return this.resolvedType = tmp; } boolean typeBbolean = true; for (TypeBinding t : this.originalValueResultExpressionTypes) { - typeBbolean &= t.id == T_boolean || t.id == T_JavaLangBoolean; + if (t != null) + typeBbolean &= t.id == T_boolean || t.id == T_JavaLangBoolean; } LookupEnvironment env = this.scope.environment(); /* @@ -450,9 +453,9 @@ public class SwitchExpression extends SwitchStatement implements IPolyExpression * If any result expression is of a reference type, it is subjected to unboxing conversion (5.1.8). */ for (int i = 0; i < resultExpressionsCount; ++i) { - tmp = this.originalValueResultExpressionTypes[i].isNumericType() ? - this.originalValueResultExpressionTypes[i] : - env.computeBoxingType(this.originalValueResultExpressionTypes[i]); + TypeBinding originalType = this.originalValueResultExpressionTypes[i]; + if (originalType == null) continue; + tmp = originalType.isNumericType() ? originalType : env.computeBoxingType(originalType); if (!tmp.isNumericType()) { typeNumeric = false; break; @@ -501,12 +504,14 @@ public class SwitchExpression extends SwitchStatement implements IPolyExpression * to the least upper bound (4.10.4) of the types of the result expressions. */ for (int i = 0; i < resultExpressionsCount; ++i) { - if (this.finalValueResultExpressionTypes[i].isBaseType()) - this.finalValueResultExpressionTypes[i] = env.computeBoxingType(this.finalValueResultExpressionTypes[i]); + TypeBinding finalType = this.finalValueResultExpressionTypes[i]; + if (finalType != null && finalType.isBaseType()) + this.finalValueResultExpressionTypes[i] = env.computeBoxingType(finalType); } TypeBinding commonType = this.scope.lowerUpperBound(this.finalValueResultExpressionTypes); if (commonType != null) { for (int i = 0, l = this.resultExpressions.size(); i < l; ++i) { + if (this.originalValueResultExpressionTypes[i] == null) continue; this.resultExpressions.get(i).computeConversion(this.scope, commonType, this.originalValueResultExpressionTypes[i]); this.finalValueResultExpressionTypes[i] = commonType; } |