### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java,v retrieving revision 1.83 diff -u -r1.83 QualifiedAllocationExpression.java --- compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java 26 Apr 2007 21:03:26 -0000 1.83 +++ compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedAllocationExpression.java 2 May 2007 14:31:32 -0000 @@ -110,7 +110,8 @@ int pc = codeStream.position; ReferenceBinding allocatedType = this.codegenBinding.declaringClass; codeStream.new_(allocatedType); - if (valueRequired) { + boolean isUnboxing = (this.implicitConversion & TypeIds.UNBOXING) != 0; + if (valueRequired || isUnboxing) { codeStream.dup(); } // better highlight for allocation: display the type individually @@ -152,7 +153,20 @@ } codeStream.invokespecial(this.syntheticAccessor); } - codeStream.generateImplicitConversion(this.implicitConversion); + if (valueRequired) { + codeStream.generateImplicitConversion(implicitConversion); + } else if (isUnboxing) { + // conversion only generated if unboxing + codeStream.generateImplicitConversion(implicitConversion); + switch (postConversionType(currentScope).id) { + case T_long : + case T_double : + codeStream.pop2(); + break; + default : + codeStream.pop(); + } + } codeStream.recordPositionsFrom(pc, this.sourceStart); if (this.anonymousType != null) { Index: compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java,v retrieving revision 1.68 diff -u -r1.68 AllocationExpression.java --- compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java 26 Apr 2007 21:03:26 -0000 1.68 +++ compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java 2 May 2007 14:31:32 -0000 @@ -84,7 +84,8 @@ ReferenceBinding allocatedType = this.codegenBinding.declaringClass; codeStream.new_(allocatedType); - if (valueRequired) { + boolean isUnboxing = (this.implicitConversion & TypeIds.UNBOXING) != 0; + if (valueRequired || isUnboxing) { codeStream.dup(); } // better highlight for allocation: display the type individually @@ -126,7 +127,20 @@ } codeStream.invokespecial(syntheticAccessor); } - codeStream.generateImplicitConversion(this.implicitConversion); + if (valueRequired) { + codeStream.generateImplicitConversion(this.implicitConversion); + } else if (isUnboxing) { + // conversion only generated if unboxing + codeStream.generateImplicitConversion(this.implicitConversion); + switch (postConversionType(currentScope).id) { + case T_long : + case T_double : + codeStream.pop2(); + break; + default : + codeStream.pop(); + } + } codeStream.recordPositionsFrom(pc, this.sourceStart); }