db9e6cd
### Eclipse Workspace Patch 1.0
db9e6cd
#P org.eclipse.jdt.core
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java,v
db9e6cd
retrieving revision 1.64
db9e6cd
diff -u -r1.64 LocalDeclaration.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java	27 May 2008 22:21:13 -0000	1.64
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -198,11 +198,7 @@
db9e6cd
 								&& (this.initialization.bits & ASTNode.UnnecessaryCast) == 0) {
db9e6cd
 							CastExpression.checkNeedForAssignedCast(scope, variableType, (CastExpression) this.initialization);
db9e6cd
 						}	
db9e6cd
-					} else if (scope.isBoxingCompatibleWith(initializationType, variableType) 
db9e6cd
-										|| (initializationType.isBaseType()  // narrowing then boxing ?
db9e6cd
-												&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-												&& !variableType.isBaseType()
db9e6cd
-												&& initialization.isConstantValueOfTypeAssignableToType(initializationType, scope.environment().computeBoxingType(variableType)))) {
db9e6cd
+					} else if (isBoxingCompatible(initializationType, variableType, this.initialization, scope)) {
db9e6cd
 						this.initialization.computeConversion(scope, variableType, initializationType);
db9e6cd
 						if (this.initialization instanceof CastExpression 
db9e6cd
 								&& (this.initialization.bits & ASTNode.UnnecessaryCast) == 0) {
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java,v
db9e6cd
retrieving revision 1.41
db9e6cd
diff -u -r1.41 Statement.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java	28 Mar 2006 20:29:57 -0000	1.41
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/Statement.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -104,7 +104,18 @@
db9e6cd
 	}
db9e6cd
 
db9e6cd
 	public abstract void generateCode(BlockScope currentScope, CodeStream codeStream);
db9e6cd
-	
db9e6cd
+
db9e6cd
+	protected boolean isBoxingCompatible(TypeBinding expressionType, TypeBinding targetType, Expression expression, Scope scope) {
db9e6cd
+		if (scope.isBoxingCompatibleWith(expressionType, targetType))
db9e6cd
+			return true;
db9e6cd
+
db9e6cd
+		return expressionType.isBaseType() // narrowing then boxing ?
db9e6cd
+				&& !targetType.isBaseType()
db9e6cd
+				&& !targetType.isTypeVariable()
db9e6cd
+				&& scope.compilerOptions().sourceLevel >= org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
+				&& expression.isConstantValueOfTypeAssignableToType(expressionType, scope.environment().computeBoxingType( targetType));
db9e6cd
+	}
db9e6cd
+
db9e6cd
 	public boolean isEmptyBlock() {
db9e6cd
 		return false;
db9e6cd
 	}
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java,v
db9e6cd
retrieving revision 1.88
db9e6cd
diff -u -r1.88 FieldDeclaration.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java	27 May 2008 22:21:13 -0000	1.88
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/FieldDeclaration.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -230,11 +230,7 @@
db9e6cd
 							&& (this.initialization.bits & ASTNode.UnnecessaryCast) == 0) {
db9e6cd
 						CastExpression.checkNeedForAssignedCast(initializationScope, fieldType, (CastExpression) this.initialization);
db9e6cd
 					}								
db9e6cd
-				} else if (initializationScope.isBoxingCompatibleWith(initializationType, fieldType) 
db9e6cd
-									|| (initializationType.isBaseType()  // narrowing then boxing ?
db9e6cd
-											&& initializationScope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-											&& !fieldType.isBaseType()
db9e6cd
-											&& initialization.isConstantValueOfTypeAssignableToType(initializationType, initializationScope.environment().computeBoxingType(fieldType)))) {
db9e6cd
+				} else if (isBoxingCompatible(initializationType, fieldType, this.initialization, initializationScope)) {
db9e6cd
 					this.initialization.computeConversion(initializationScope, fieldType, initializationType);
db9e6cd
 					if (this.initialization instanceof CastExpression 
db9e6cd
 							&& (this.initialization.bits & ASTNode.UnnecessaryCast) == 0) {
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java,v
db9e6cd
retrieving revision 1.30
db9e6cd
diff -u -r1.30 CaseStatement.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java	27 May 2008 22:21:13 -0000	1.30
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/CaseStatement.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -127,11 +127,7 @@
db9e6cd
 		} else {
db9e6cd
 			return this.constantExpression.constant;
db9e6cd
 		}
db9e6cd
-	} else if (scope.isBoxingCompatibleWith(caseType, switchExpressionType)
db9e6cd
-					|| (caseType.isBaseType()  // narrowing then boxing ?
db9e6cd
-							&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-							&& !switchExpressionType.isBaseType()
db9e6cd
-							&& this.constantExpression.isConstantValueOfTypeAssignableToType(caseType, scope.environment().computeBoxingType(switchExpressionType)))) {
db9e6cd
+	} else if (isBoxingCompatible(caseType, switchExpressionType, this.constantExpression, scope)) {
db9e6cd
 		// constantExpression.computeConversion(scope, caseType, switchExpressionType); - do not report boxing/unboxing conversion
db9e6cd
 		return this.constantExpression.constant;
db9e6cd
 	}
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java,v
db9e6cd
retrieving revision 1.62
db9e6cd
diff -u -r1.62 ReturnStatement.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java	27 May 2008 22:21:13 -0000	1.62
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -11,7 +11,6 @@
db9e6cd
 package org.eclipse.jdt.internal.compiler.ast;
db9e6cd
 
db9e6cd
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
db9e6cd
-import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
db9e6cd
 import org.eclipse.jdt.internal.compiler.codegen.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.flow.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.impl.Constant;
db9e6cd
@@ -239,11 +238,7 @@
db9e6cd
 			CastExpression.checkNeedForAssignedCast(scope, methodType, (CastExpression) this.expression);
db9e6cd
 		}			
db9e6cd
 		return;
db9e6cd
-	} else if (scope.isBoxingCompatibleWith(expressionType, methodType)
db9e6cd
-						|| (expressionType.isBaseType()  // narrowing then boxing ?
db9e6cd
-								&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-								&& !methodType.isBaseType()
db9e6cd
-								&& this.expression.isConstantValueOfTypeAssignableToType(expressionType, scope.environment().computeBoxingType(methodType)))) {
db9e6cd
+	} else if (isBoxingCompatible(expressionType, methodType, this.expression, scope)) {
db9e6cd
 		this.expression.computeConversion(scope, methodType, expressionType);
db9e6cd
 		if (this.expression instanceof CastExpression 
db9e6cd
 				&& (this.expression.bits & (ASTNode.UnnecessaryCast|ASTNode.DisableUnnecessaryCastCheck)) == 0) {
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java,v
db9e6cd
retrieving revision 1.82
db9e6cd
diff -u -r1.82 Assignment.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java	27 May 2008 22:21:13 -0000	1.82
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -12,7 +12,6 @@
db9e6cd
 package org.eclipse.jdt.internal.compiler.ast;
db9e6cd
 
db9e6cd
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
db9e6cd
-import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
db9e6cd
 import org.eclipse.jdt.internal.compiler.codegen.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.flow.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.impl.Constant;
db9e6cd
@@ -214,11 +213,7 @@
db9e6cd
 			CastExpression.checkNeedForAssignedCast(scope, lhsType, (CastExpression) this.expression);
db9e6cd
 		}			
db9e6cd
 		return this.resolvedType;
db9e6cd
-	} else if (scope.isBoxingCompatibleWith(rhsType, lhsType) 
db9e6cd
-						|| (rhsType.isBaseType()  // narrowing then boxing ?
db9e6cd
-								&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-								&& !lhsType.isBaseType()
db9e6cd
-								&& this.expression.isConstantValueOfTypeAssignableToType(rhsType, scope.environment().computeBoxingType(lhsType)))) {
db9e6cd
+	} else if (isBoxingCompatible(rhsType, lhsType, this.expression, scope)) {
db9e6cd
 		this.expression.computeConversion(scope, lhsType, rhsType);
db9e6cd
 		if (this.expression instanceof CastExpression 
db9e6cd
 				&& (this.expression.bits & ASTNode.UnnecessaryCast) == 0) {
db9e6cd
Index: compiler/org/eclipse/jdt/internal/compiler/ast/ArrayInitializer.java
db9e6cd
===================================================================
db9e6cd
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ArrayInitializer.java,v
db9e6cd
retrieving revision 1.50
db9e6cd
diff -u -r1.50 ArrayInitializer.java
db9e6cd
--- compiler/org/eclipse/jdt/internal/compiler/ast/ArrayInitializer.java	27 May 2008 22:21:13 -0000	1.50
db9e6cd
+++ compiler/org/eclipse/jdt/internal/compiler/ast/ArrayInitializer.java	17 Feb 2009 19:32:06 -0000
db9e6cd
@@ -11,7 +11,6 @@
db9e6cd
 package org.eclipse.jdt.internal.compiler.ast;
db9e6cd
 
db9e6cd
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
db9e6cd
-import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
db9e6cd
 import org.eclipse.jdt.internal.compiler.codegen.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.flow.*;
db9e6cd
 import org.eclipse.jdt.internal.compiler.impl.Constant;
db9e6cd
@@ -169,11 +168,7 @@
db9e6cd
 						|| (elementType.isBaseType() && BaseTypeBinding.isWidening(elementType.id, expressionType.id)))
db9e6cd
 						|| expressionType.isCompatibleWith(elementType)) {
db9e6cd
 					expression.computeConversion(scope, elementType, expressionType);
db9e6cd
-				} else if (scope.isBoxingCompatibleWith(expressionType, elementType) 
db9e6cd
-									|| (expressionType.isBaseType()  // narrowing then boxing ?
db9e6cd
-											&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing
db9e6cd
-											&& !elementType.isBaseType()
db9e6cd
-											&& expression.isConstantValueOfTypeAssignableToType(expressionType, scope.environment().computeBoxingType(elementType)))) {
db9e6cd
+				} else if (isBoxingCompatible(expressionType, elementType, expression, scope)) {
db9e6cd
 					expression.computeConversion(scope, elementType, expressionType);
db9e6cd
 				} else {
db9e6cd
 					scope.problemReporter().typeMismatchError(expressionType, elementType, expression, null);
db9e6cd