langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Fri Jan 09 15:50:22 2015 +0000
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java Fri Jan 09 15:51:20 2015 +0000
@@ -755,7 +755,15 @@
tree.clazz = translate(tree.clazz, null);
Type originalTarget = tree.type;
tree.type = erasure(tree.type);
- tree.expr = translate(tree.expr, erasure(tree.expr.type));
+ JCExpression newExpression = translate(tree.expr, erasure(tree.expr.type));
+ if (newExpression != tree.expr) {
+ JCTypeCast typeCast = newExpression.hasTag(Tag.TYPECAST)
+ ? (JCTypeCast) newExpression
+ : null;
+ tree.expr = typeCast != null && types.isSameType(typeCast.type, originalTarget, true)
+ ? typeCast.expr
+ : newExpression;
+ }
if (originalTarget.isCompound()) {
Type.IntersectionClassType ict = (Type.IntersectionClassType)originalTarget;
for (Type c : ict.getExplicitComponents()) {