diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2015-05-19 17:52:55 +0200 |
---|---|---|
committer | Mikael Peltier <mikaelpeltier@google.com> | 2015-05-21 11:43:04 +0000 |
commit | 6f8866b42820efb83640abaae45c5f9dacb943c7 (patch) | |
tree | fadc0232d0d5555a1efcbbf0affd17d0b1317edb /jack | |
parent | 2a9ba9420757bba501858d56eada436716fb0d41 (diff) | |
download | toolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.zip toolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.tar.gz toolchain_jack-6f8866b42820efb83640abaae45c5f9dacb943c7.tar.bz2 |
Do not remove type of 'null' expression otherwise type is lost
Bug: 19508222
Change-Id: I839ee69b454bf74dd93a6dffcb900c56fb68c3de
(cherry picked from commit 731bf4c954500229d95fdacf424f7ccad6e5bdcf)
Diffstat (limited to 'jack')
-rw-r--r-- | jack/src/com/android/jack/transformations/cast/UselessCastRemover.java | 14 | ||||
-rw-r--r-- | jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java | 2 |
2 files changed, 11 insertions, 5 deletions
diff --git a/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java b/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java index f50fc1f..42e9c4e 100644 --- a/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java +++ b/jack/src/com/android/jack/transformations/cast/UselessCastRemover.java @@ -19,7 +19,9 @@ package com.android.jack.transformations.cast; import com.android.jack.Options; import com.android.jack.ir.ast.JCastOperation; import com.android.jack.ir.ast.JDynamicCastOperation; +import com.android.jack.ir.ast.JExpression; import com.android.jack.ir.ast.JMethod; +import com.android.jack.ir.ast.JNullLiteral; import com.android.jack.ir.ast.JReferenceType; import com.android.jack.ir.ast.JType; import com.android.jack.ir.ast.JVisitor; @@ -57,10 +59,14 @@ public class UselessCastRemover implements RunnableSchedulable<JMethod> { @Override public void endVisit(@Nonnull JCastOperation cast) { JType destType = cast.getCastType(); - JType srcType = cast.getExpr().getType(); - if (srcType instanceof JReferenceType && destType instanceof JReferenceType) { - if (((JReferenceType) srcType).canBeSafelyUpcast((JReferenceType) destType)) { - request.append(new Replace(cast, cast.getExpr())); + JExpression castedExpr = cast.getExpr(); + JType srcType = castedExpr.getType(); + // Do not remove cast of 'null' expression otherwise type is lost + if (!(castedExpr instanceof JNullLiteral)) { + if (srcType instanceof JReferenceType && destType instanceof JReferenceType) { + if (((JReferenceType) srcType).canBeSafelyUpcast((JReferenceType) destType)) { + request.append(new Replace(cast, castedExpr)); + } } } super.endVisit(cast); diff --git a/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java b/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java index 62d9540..da5db0c 100644 --- a/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java +++ b/jack/tests/com/android/jack/transformations/cast/UselessCastRemoverTest.java @@ -85,7 +85,7 @@ public class UselessCastRemoverTest { public void castNullToString() throws Exception { final String methodSignature = "castNullToString()Ljava/lang/String;"; - buildMethodAndCheckUselessCastRemover(CAST, methodSignature, true); + buildMethodAndCheckUselessCastRemover(CAST, methodSignature, false); } @Test |