Buggy code:
public class LocalDeclaration extends AbstractVariableDeclaration { public LocalVariableBinding binding ; public LocalDeclaration ( char [ ] name , int sourceStart , int sourceEnd ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void checkModifiers ( ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { } public int getKind ( ) { } public void resolve ( BlockScope scope ) { TypeBinding variableType = this . type . resolveType ( scope , true ) ; checkModifiers ( ) ; if ( variableType != null ) { if ( variableType == ( TypeBinding . VOID ) ) { scope . problemReporter ( ) . variableTypeCannotBeVoid ( this ) ; return ; } if ( ( variableType . isArrayType ( ) ) && ( ( ( ( ArrayBinding ) ( variableType ) ) . leafComponentType ) == ( TypeBinding . VOID ) ) ) { scope . problemReporter ( ) . variableTypeCannotBeVoidArray ( this ) ; return ; } } Binding existingVariable = scope . getBinding ( this . name , Binding . VARIABLE , this , false ) ; if ( ( existingVariable != null ) && ( existingVariable . isValidBinding ( ) ) ) { if ( ( existingVariable instanceof LocalVariableBinding ) && ( ( this . hiddenVariableDepth ) == 0 ) ) { scope . problemReporter ( ) . redefineLocal ( this ) ; } else { scope . problemReporter ( ) . localVariableHiding ( this , existingVariable , false ) ; } } if ( ( ( ( this . modifiers ) & ( ClassFileConstants . AccFinal ) ) != 0 ) && ( ( this . initialization ) == null ) ) { this . modifiers |= ExtraCompilerModifiers . AccBlankFinal ; } this . binding = new LocalVariableBinding ( this , variableType , this . modifiers , false ) ; scope . addLocalVariable ( this . binding ) ; this . binding . setConstant ( Constant . NotAConstant ) ; if ( variableType == null ) { if ( ( this . initialization ) != null ) this . initialization . resolveType ( scope ) ; return ; } if ( ( this . initialization ) != null ) { if ( ( this . initialization ) instanceof ArrayInitializer ) { TypeBinding initializationType = this . initialization . resolveTypeExpecting ( scope , variableType ) ; if ( initializationType != null ) { ( ( ArrayInitializer ) ( this . initialization ) ) . binding = ( ( ArrayBinding ) ( initializationType ) ) ; this . initialization . computeConversion ( scope , variableType , initializationType ) ; } } else { this . initialization . setExpectedType ( variableType ) ; TypeBinding initializationType = this . initialization . resolveType ( scope ) ; if ( initializationType != null ) { if ( variableType != initializationType ) scope . compilationUnitScope ( ) . recordTypeConversion ( variableType , initializationType ) ; <START_BUG> if ( ( ( this . initialization . isConstantValueOfTypeAssignableToType ( initializationType , variableType ) ) || ( ( variableType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( variableType . id , initializationType . id ) ) ) ) || ( initializationType . isCompatibleWith ( variableType ) ) ) { <END_BUG> this . initialization . computeConversion ( scope , variableType , initializationType ) ; if ( initializationType . needsUncheckedConversion ( variableType ) ) { scope . problemReporter ( ) . unsafeTypeConversion ( this . initialization , initializationType , variableType ) ; } if ( ( ( this . initialization ) instanceof CastExpression ) && ( ( ( this . initialization . bits ) & ( ASTNode . UnnecessaryCast ) ) == 0 ) ) { CastExpression . checkNeedForAssignedCast ( scope , variableType , ( ( CastExpression ) ( this . initialization ) ) ) ; } } else if ( ( scope . isBoxingCompatibleWith ( initializationType , variableType ) ) || ( ( ( ( initializationType . isBaseType ( ) ) && ( ( scope . compilerOptions ( ) . sourceLevel ) >= ( ClassFileConstants . JDK1_5 ) ) ) && ( ! ( variableType . isBaseType ( ) ) ) ) && ( this . initialization . isConstantValueOfTypeAssignableToType ( initializationType , scope . environment ( ) . computeBoxingType ( variableType ) ) ) ) ) { this . initialization . computeConversion ( scope , variableType , initializationType ) ; if ( ( ( this . initialization ) instanceof CastExpression ) && ( ( ( this . initialization . bits ) & ( ASTNode . UnnecessaryCast ) ) == 0 ) ) { CastExpression . checkNeedForAssignedCast ( scope , variableType , ( ( CastExpression ) ( this . initialization ) ) ) ; } } else { if ( ( ( variableType . tagBits ) & ( TagBits . HasMissingType ) ) == 0 ) { scope . problemReporter ( ) . typeMismatchError ( initializationType , variableType , this . initialization , null ) ; } } } } if ( ( this . binding ) == ( Expression . getDirectBinding ( this . initialization ) ) ) { scope . problemReporter ( ) . assignmentHasNoEffect ( this , this . name ) ; } this . binding . setConstant ( ( this . binding . isFinal ( ) ? this . initialization . constant . castTo ( ( ( ( variableType . id ) << 4 ) + ( this . initialization . constant . typeID ( ) ) ) ) : Constant . NotAConstant ) ) ; } ASTNode . resolveAnnotations ( scope , this . annotations , this . binding ) ; } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
if ( ( ( this . initialization . isConstantValueOfTypeAssignableToType ( initializationType , variableType ) ) || ( BaseTypeBinding . isWidening ( variableType . id , initializationType . id ) ) ) || ( initializationType . isCompatibleWith ( variableType ) ) ) {