Buggy code:
public class FieldDeclaration extends AbstractVariableDeclaration { public FieldBinding binding ; boolean hasBeenResolved = false ; public int endPart1Position ; public int endPart2Position ; public FieldDeclaration ( ) { } public FieldDeclaration ( Expression initialization , char [ ] name , int sourceStart , int sourceEnd ) { } public FlowInfo analyseCode ( MethodScope initializationScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { } public TypeBinding getTypeBinding ( Scope scope ) { } public boolean isField ( ) { } public boolean isStatic ( ) { } public String name ( ) { } public void resolve ( MethodScope initializationScope ) { if ( ( ( ! ( this . hasBeenResolved ) ) && ( ( binding ) != null ) ) && ( this . binding . isValidBinding ( ) ) ) { this . hasBeenResolved = true ; if ( isTypeUseDeprecated ( this . binding . type , initializationScope ) ) initializationScope . problemReporter ( ) . deprecatedType ( this . binding . type , this . type ) ; this . type . resolvedType = this . binding . type ; if ( ( this . initialization ) == null ) { this . binding . constant = Constant . NotAConstant ; } else { int previous = initializationScope . fieldDeclarationIndex ; try { initializationScope . fieldDeclarationIndex = this . binding . id ; this . binding . constant = Constant . NotAConstant ; TypeBinding typeBinding = this . binding . type ; TypeBinding initializationTypeBinding ; if ( ( initialization ) instanceof ArrayInitializer ) { if ( ( initializationTypeBinding = this . initialization . resolveTypeExpecting ( initializationScope , typeBinding ) ) != null ) { ( ( ArrayInitializer ) ( this . initialization ) ) . binding = ( ( ArrayBinding ) ( initializationTypeBinding ) ) ; this . initialization . implicitWidening ( typeBinding , initializationTypeBinding ) ; } } else if ( ( initializationTypeBinding = initialization . resolveType ( initializationScope ) ) != null ) { if ( ( this . initialization . isConstantValueOfTypeAssignableToType ( initializationTypeBinding , typeBinding ) ) || ( ( typeBinding . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( typeBinding . id , initializationTypeBinding . id ) ) ) ) { this . initialization . implicitWidening ( typeBinding , initializationTypeBinding ) ; } else <START_BUG> if ( Scope . areTypesCompatible ( initializationTypeBinding , typeBinding ) ) { <END_BUG> this . initialization . implicitWidening ( typeBinding , initializationTypeBinding ) ; } else { initializationScope . problemReporter ( ) . typeMismatchError ( initializationTypeBinding , typeBinding , this ) ; } if ( this . binding . isFinal ( ) ) { this . binding . constant = this . initialization . constant . castTo ( ( ( ( this . binding . type . id ) << 4 ) + ( this . initialization . constant . typeID ( ) ) ) ) ; } } else { this . binding . constant = NotAConstant ; } } finally { initializationScope . fieldDeclarationIndex = previous ; if ( ( this . binding . constant ) == null ) this . binding . constant = Constant . NotAConstant ; } } } } public void traverse ( IAbstractSyntaxTreeVisitor visitor , MethodScope scope ) { } }

Fix:
if ( initializationTypeBinding . isCompatibleWith ( typeBinding ) ) {