Buggy code:
public class MemberValuePair extends ASTNode { public char [ ] name ; public Expression value ; public MethodBinding binding ; public ElementValuePair compilerElementPair = null ; public MemberValuePair ( char [ ] token , int sourceStart , int sourceEnd , Expression value ) { } public StringBuffer print ( int indent , StringBuffer output ) { } public void resolveTypeExpecting ( BlockScope scope , TypeBinding requiredType ) { if ( ( this . value ) == null ) { this . compilerElementPair = new ElementValuePair ( this . name , this . value , this . binding ) ; return ; } if ( requiredType == null ) { if ( ( this . value ) instanceof ArrayInitializer ) { this . value . resolveTypeExpecting ( scope , null ) ; } else { this . value . resolveType ( scope ) ; } this . compilerElementPair = new ElementValuePair ( this . name , this . value , this . binding ) ; return ; } this . value . setExpectedType ( requiredType ) ; TypeBinding valueType ; if ( ( this . value ) instanceof ArrayInitializer ) { ArrayInitializer initializer = ( ( ArrayInitializer ) ( this . value ) ) ; valueType = initializer . resolveTypeExpecting ( scope , this . binding . returnType ) ; } else if ( ( this . value ) instanceof ArrayAllocationExpression ) { scope . problemReporter ( ) . annotationValueMustBeArrayInitializer ( this . binding . declaringClass , this . name , this . value ) ; this . value . resolveType ( scope ) ; valueType = null ; } else { valueType = this . value . resolveType ( scope ) ; } this . compilerElementPair = new ElementValuePair ( this . name , this . value , this . binding ) ; if ( valueType == null ) return ; TypeBinding leafType = requiredType . leafComponentType ( ) ; if ( ! ( ( ( this . value . isConstantValueOfTypeAssignableToType ( valueType , requiredType ) ) || ( ( requiredType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( requiredType . id , valueType . id ) ) ) ) || ( valueType . isCompatibleWith ( requiredType ) ) ) ) { if ( ! ( ( ( ( requiredType . isArrayType ( ) ) && ( ( requiredType . dimensions ( ) ) == 1 ) ) && ( ( this . value . isConstantValueOfTypeAssignableToType ( valueType , leafType ) ) || ( ( leafType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( leafType . id , valueType . id ) ) ) ) ) || ( valueType . isCompatibleWith ( leafType ) ) ) ) { if ( ( leafType . isAnnotationType ( ) ) && ( ! ( valueType . isAnnotationType ( ) ) ) ) { scope . problemReporter ( ) . annotationValueMustBeAnnotation ( this . binding . declaringClass , this . name , this . value , leafType ) ; } else { <START_BUG> scope . problemReporter ( ) . typeMismatchError ( valueType , requiredType , this . value ) ; <END_BUG> } return ; } } else { scope . compilationUnitScope ( ) . recordTypeConversion ( requiredType . leafComponentType ( ) , valueType . leafComponentType ( ) ) ; this . value . computeConversion ( scope , requiredType , valueType ) ; } checkAnnotationMethodType : { switch ( leafType . erasure ( ) . id ) { case TypeIds . T_byte : case TypeIds . T_short : case TypeIds . T_char : case TypeIds . T_int : case TypeIds . T_long : case TypeIds . T_float : case TypeIds . T_double : case TypeIds . T_boolean : case TypeIds . T_JavaLangString : if ( ( this . value ) instanceof ArrayInitializer ) { ArrayInitializer initializer = ( ( ArrayInitializer ) ( this . value ) ) ; final Expression [ ] expressions = initializer . expressions ; if ( expressions != null ) { for ( int i = 0 , max = expressions . length ; i < max ; i ++ ) { Expression expression = expressions [ i ] ; if ( ( expression . resolvedType ) == null ) continue ; if ( ( expression . constant ) == ( Constant . NotAConstant ) ) { scope . problemReporter ( ) . annotationValueMustBeConstant ( this . binding . declaringClass , this . name , expressions [ i ] , false ) ; } } } } else if ( ( this . value . constant ) == ( Constant . NotAConstant ) ) { if ( valueType . isArrayType ( ) ) { scope . problemReporter ( ) . annotationValueMustBeArrayInitializer ( this . binding . declaringClass , this . name , this . value ) ; } else { scope . problemReporter ( ) . annotationValueMustBeConstant ( this . binding . declaringClass , this . name , this . value , false ) ; } } break checkAnnotationMethodType ; case TypeIds . T_JavaLangClass : if ( ( this . value ) instanceof ArrayInitializer ) { ArrayInitializer initializer = ( ( ArrayInitializer ) ( this . value ) ) ; final Expression [ ] expressions = initializer . expressions ; if ( expressions != null ) { for ( int i = 0 , max = expressions . length ; i < max ; i ++ ) { Expression currentExpression = expressions [ i ] ; if ( ! ( currentExpression instanceof ClassLiteralAccess ) ) { scope . problemReporter ( ) . annotationValueMustBeClassLiteral ( this . binding . declaringClass , this . name , currentExpression ) ; } } } } else if ( ! ( ( this . value ) instanceof ClassLiteralAccess ) ) { scope . problemReporter ( ) . annotationValueMustBeClassLiteral ( this . binding . declaringClass , this . name , this . value ) ; } break checkAnnotationMethodType ; }

Fix:
scope . problemReporter ( ) . typeMismatchError ( valueType , requiredType , this . value , null ) ;