--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Mon Aug 30 18:03:35 2010 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Sep 01 03:19:16 2010 -0700
@@ -2889,8 +2889,17 @@
/** Unbox an object to a primitive value. */
JCExpression unbox(JCExpression tree, Type primitive) {
Type unboxedType = types.unboxedType(tree.type);
- // note: the "primitive" parameter is not used. There muse be
- // a conversion from unboxedType to primitive.
+ if (unboxedType.tag == NONE) {
+ unboxedType = primitive;
+ if (!unboxedType.isPrimitive())
+ throw new AssertionError(unboxedType);
+ make_at(tree.pos());
+ tree = make.TypeCast(types.boxedClass(unboxedType).type, tree);
+ } else {
+ // There must be a conversion from unboxedType to primitive.
+ if (!types.isSubtype(unboxedType, primitive))
+ throw new AssertionError(tree);
+ }
make_at(tree.pos());
Symbol valueSym = lookupMethod(tree.pos(),
unboxedType.tsym.name.append(names.Value), // x.intValue()