HEAD - Release patch for 107783
diff --git a/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java b/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
index ed7106a..b09b86b 100644
--- a/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
+++ b/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
@@ -2171,87 +2171,219 @@
}
}
public void generateBoxingConversion(int unboxedTypeID) {
- switch (unboxedTypeID) {
- case T_byte :
- // invokestatic: Byte.valueOf(byte)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangByteConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.byteByteSignature);
- break;
- case T_short :
- // invokestatic: Short.valueOf(short)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangShortConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.shortShortSignature);
- break;
- case T_char :
- // invokestatic: Character.valueOf(char)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangCharacterConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.charCharacterSignature);
- break;
- case T_int :
- // invokestatic: Integer.valueOf(int)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangIntegerConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.IntIntegerSignature);
- break;
- case T_long :
- // invokestatic: Long.valueOf(long)
- this.invoke(
- OPC_invokestatic,
- 2, // argCount
- 1, // return type size
- ConstantPool.JavaLangLongConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.longLongSignature);
- break;
- case T_float :
- // invokestatic: Float.valueOf(float)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangFloatConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.floatFloatSignature);
- break;
- case T_double :
- // invokestatic: Double.valueOf(double)
- this.invoke(
- OPC_invokestatic,
- 2, // argCount
- 1, // return type size
- ConstantPool.JavaLangDoubleConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.doubleDoubleSignature);
- break;
- case T_boolean :
- // invokestatic: Boolean.valueOf(boolean)
- this.invoke(
- OPC_invokestatic,
- 1, // argCount
- 1, // return type size
- ConstantPool.JavaLangBooleanConstantPoolName,
- ConstantPool.ValueOf,
- ConstantPool.booleanBooleanSignature);
- }
+ switch (unboxedTypeID) {
+ case T_byte :
+ if (this.targetLevel >= ClassFileConstants.JDK1_5) {
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Byte.valueOf(byte)"); //$NON-NLS-1$
+ // invokestatic: Byte.valueOf(byte)
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangByteConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.byteByteSignature);
+ } else {
+ // new Byte( byte )
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Byte(byte)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangByteConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.ByteConstrSignature);
+ }
+ break;
+ case T_short :
+ if ( this.targetLevel >= ClassFileConstants.JDK1_5 ) {
+ // invokestatic: Short.valueOf(short)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Short.valueOf(short)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangShortConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.shortShortSignature);
+ } else {
+ // new Short(short)
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Short(short)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangShortConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.ShortConstrSignature);
+ }
+ break;
+ case T_char :
+ if ( this.targetLevel >= ClassFileConstants.JDK1_5 ) {
+ // invokestatic: Character.valueOf(char)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Character.valueOf(char)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangCharacterConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.charCharacterSignature);
+ } else {
+ // new Char( char )
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Character(char)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangCharacterConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.CharConstrSignature);
+ }
+ break;
+ case T_int :
+ if (this.targetLevel >= ClassFileConstants.JDK1_5) {
+ // invokestatic: Integer.valueOf(int)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Integer.valueOf(int)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangIntegerConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.IntIntegerSignature);
+ } else {
+ // new Integer(int)
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Integer(int)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangIntegerConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.IntConstrSignature);
+ }
+ break;
+ case T_long :
+ if (this.targetLevel >= ClassFileConstants.JDK1_5) {
+ // invokestatic: Long.valueOf(long)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Long.valueOf(long)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 2, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangLongConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.longLongSignature);
+ } else {
+ // new Long( long )
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Long(long)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x2();
+ dup_x2();
+ pop();
+ this.invoke(
+ OPC_invokespecial,
+ 2, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangLongConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.LongConstrSignature);
+ }
+ break;
+ case T_float :
+ if ( this.targetLevel >= ClassFileConstants.JDK1_5 ) {
+ // invokestatic: Float.valueOf(float)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Float.valueOf(float)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangFloatConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.floatFloatSignature);
+ } else {
+ // new Float(float)
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Float(float)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangFloatConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.FloatConstrSignature);
+ }
+ break;
+ case T_double :
+ if ( this.targetLevel >= ClassFileConstants.JDK1_5 ) {
+ // invokestatic: Double.valueOf(double)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Double.valueOf(double)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 2, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangDoubleConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.doubleDoubleSignature);
+ } else {
+ // new Double( double )
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Double(double)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x2();
+ dup_x2();
+ pop();
+
+ this.invoke(
+ OPC_invokespecial,
+ 2, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangDoubleConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.DoubleConstrSignature);
+ }
+
+ break;
+ case T_boolean :
+ if ( this.targetLevel >= ClassFileConstants.JDK1_5 ) {
+ // invokestatic: Boolean.valueOf(boolean)
+ if (DEBUG) System.out.println(position + "\t\tinvokestatic java.lang.Boolean.valueOf(boolean)"); //$NON-NLS-1$
+ this.invoke(
+ OPC_invokestatic,
+ 1, // argCount
+ 1, // return type size
+ ConstantPool.JavaLangBooleanConstantPoolName,
+ ConstantPool.ValueOf,
+ ConstantPool.booleanBooleanSignature);
+ } else {
+ // new Boolean(boolean)
+ if (DEBUG) System.out.println(position + "\t\tinvokespecial java.lang.Boolean(boolean)"); //$NON-NLS-1$
+ newWrapperFor(unboxedTypeID);
+ dup_x1();
+ swap();
+ this.invoke(
+ OPC_invokespecial,
+ 1, // argCount
+ 0, // return type size
+ ConstantPool.JavaLangBooleanConstantPoolName,
+ ConstantPool.Init,
+ ConstantPool.BooleanConstrSignature);
+ }
+ }
}
public void generateUnboxingConversion(int unboxedTypeID) {
switch (unboxedTypeID) {