Buggy code:
public class Assignment extends Expression { public Expression lhs ; public Expression expression ; public Assignment ( Expression lhs , Expression expression , int sourceEnd ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } void checkAssignment ( BlockScope scope , TypeBinding lhsType , TypeBinding rhsType ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } FieldBinding getLastField ( Expression someExpression ) { } public int nullStatus ( FlowInfo flowInfo ) { } public StringBuffer print ( int indent , StringBuffer output ) { } public StringBuffer printExpression ( int indent , StringBuffer output ) { } public StringBuffer printExpressionNoParenthesis ( int indent , StringBuffer output ) { } public StringBuffer printStatement ( int indent , StringBuffer output ) { } public TypeBinding resolveType ( BlockScope scope ) { this . constant = Constant . NotAConstant ; if ( ( ! ( ( this . lhs ) instanceof Reference ) ) || ( this . lhs . isThis ( ) ) ) { scope . problemReporter ( ) . expressionShouldBeAVariable ( this . lhs ) ; return null ; } TypeBinding lhsType = this . lhs . resolveType ( scope ) ; this . expression . setExpectedType ( lhsType ) ; if ( lhsType != null ) { this . resolvedType = lhsType . capture ( scope , this . sourceEnd ) ; } TypeBinding rhsType = this . expression . resolveType ( scope ) ; if ( ( lhsType == null ) || ( rhsType == null ) ) { return null ; } Binding left = Expression . getDirectBinding ( this . lhs ) ; if ( ( left != null ) && ( left == ( Expression . getDirectBinding ( this . expression ) ) ) ) { scope . problemReporter ( ) . assignmentHasNoEffect ( this , left . shortReadableName ( ) ) ; } if ( lhsType != rhsType ) { scope . compilationUnitScope ( ) . recordTypeConversion ( lhsType , rhsType ) ; } <START_BUG> if ( ( ( this . expression . isConstantValueOfTypeAssignableToType ( rhsType , lhsType ) ) || ( ( lhsType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( lhsType . id , rhsType . id ) ) ) ) || ( rhsType . isCompatibleWith ( lhsType ) ) ) { <END_BUG> this . expression . computeConversion ( scope , lhsType , rhsType ) ; checkAssignment ( scope , lhsType , rhsType ) ; if ( ( ( this . expression ) instanceof CastExpression ) && ( ( ( this . expression . bits ) & ( ASTNode . UnnecessaryCast ) ) == 0 ) ) { CastExpression . checkNeedForAssignedCast ( scope , lhsType , ( ( CastExpression ) ( this . expression ) ) ) ; } return this . resolvedType ; } else if ( ( scope . isBoxingCompatibleWith ( rhsType , lhsType ) ) || ( ( ( ( rhsType . isBaseType ( ) ) && ( ( scope . compilerOptions ( ) . sourceLevel ) >= ( ClassFileConstants . JDK1_5 ) ) ) && ( ! ( lhsType . isBaseType ( ) ) ) ) && ( this . expression . isConstantValueOfTypeAssignableToType ( rhsType , scope . environment ( ) . computeBoxingType ( lhsType ) ) ) ) ) { this . expression . computeConversion ( scope , lhsType , rhsType ) ; if ( ( ( this . expression ) instanceof CastExpression ) && ( ( ( this . expression . bits ) & ( ASTNode . UnnecessaryCast ) ) == 0 ) ) { CastExpression . checkNeedForAssignedCast ( scope , lhsType , ( ( CastExpression ) ( this . expression ) ) ) ; } return this . resolvedType ; } scope . problemReporter ( ) . typeMismatchError ( rhsType , lhsType , this . expression , this . lhs ) ; return lhsType ; } public TypeBinding resolveTypeExpecting ( BlockScope scope , TypeBinding expectedType ) { } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } public LocalVariableBinding localVariableBinding ( ) { } }

Fix:
if ( ( ( this . expression . isConstantValueOfTypeAssignableToType ( rhsType , lhsType ) ) || ( BaseTypeBinding . isWidening ( lhsType . id , rhsType . id ) ) ) || ( rhsType . isCompatibleWith ( lhsType ) ) ) {