Buggy code:
public abstract class Annotation extends Expression { public TypeReference type ; public int declarationSourceEnd ; public StringBuffer printExpression ( int indent , StringBuffer output ) { } TypeBinding internalResolveType ( TypeBinding annotationType , Scope scope ) { } public static void checkAnnotationValue ( TypeBinding requiredType , TypeBinding annotationType , char [ ] memberName , Expression memberValue , Scope scope ) { } void checkMemberValues ( MemberValuePair [ ] valuePairs , Scope scope ) { ReferenceBinding annotationType = ( ( ReferenceBinding ) ( this . resolvedType ) ) ; MethodBinding [ ] methods = annotationType . methods ( ) ; TypeBinding expectedValueType = null ; MemberValuePair [ ] usedValuePairs ; int pairsLength = valuePairs . length ; System . arraycopy ( valuePairs , 0 , ( usedValuePairs = new MemberValuePair [ pairsLength ] ) , 0 , pairsLength ) ; nextMember : for ( int i = 0 , requiredLength = methods . length ; i < requiredLength ; i ++ ) { MethodBinding method = methods [ i ] ; char [ ] selector = method . selector ; boolean foundValue = false ; nextPair : for ( int j = 0 ; j < pairsLength ; j ++ ) { MemberValuePair valuePair = usedValuePairs [ j ] ; if ( valuePair == null ) continue nextPair ; char [ ] memberName = valuePair . name ; if ( CharOperation . equals ( memberName , selector ) ) { usedValuePairs [ j ] = null ; foundValue = true ; boolean foundDuplicate = false ; for ( int k = j + 1 ; k < pairsLength ; k ++ ) { if ( CharOperation . equals ( usedValuePairs [ k ] . name , selector ) ) { foundDuplicate = true ; scope . problemReporter ( ) . duplicateAnnotationValue ( annotationType , usedValuePairs [ k ] ) ; usedValuePairs [ k ] = null ; } } if ( foundDuplicate ) { scope . problemReporter ( ) . duplicateAnnotationValue ( annotationType , valuePair ) ; continue nextMember ; } Expression memberValue = valuePair . value ; expectedValueType = method . returnType ; memberValue . setExpectedType ( expectedValueType ) ; TypeBinding valueType = ( scope instanceof ClassScope ) ? memberValue . resolveType ( ( ( ClassScope ) ( scope ) ) ) : memberValue . resolveType ( ( ( BlockScope ) ( scope ) ) ) ; if ( ( expectedValueType == null ) || ( valueType == null ) ) continue nextPair ; Annotation . checkAnnotationValue ( expectedValueType , method . declaringClass , method . selector , memberValue , scope ) ; if ( ( ( memberValue . isConstantValueOfTypeAssignableToType ( valueType , expectedValueType ) ) || ( ( expectedValueType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( expectedValueType . id , valueType . id ) ) ) ) || ( valueType . isCompatibleWith ( expectedValueType ) ) ) { memberValue . computeConversion ( scope , expectedValueType , valueType ) ; continue nextMember ; } scope . problemReporter ( ) . typeMismatchError ( valueType , expectedValueType , memberValue ) ; continue nextMember ; } } <START_BUG> if ( ( ! foundValue ) && ( ( ( method . modifiers ) & ( AccAnnotationMethodWithDefault ) ) == 0 ) ) { <END_BUG> scope . problemReporter ( ) . missingValueForAnnotationMember ( this , method . selector ) ; } } for ( int i = 0 ; i < pairsLength ; i ++ ) { if ( ( usedValuePairs [ i ] ) != null ) { scope . problemReporter ( ) . undefinedAnnotationValue ( annotationType , usedValuePairs [ i ] ) ; } } } public TypeBinding resolveType ( BlockScope blockScope ) { } public TypeBinding resolveType ( ClassScope classScope ) { } public abstract void traverse ( ASTVisitor visitor , BlockScope scope ) { } public abstract void traverse ( ASTVisitor visitor , ClassScope scope ) { } public abstract void traverse ( ASTVisitor visitor , CompilationUnitScope scope ) { } }

Fix:
if ( ( ! foundValue ) && ( ( ( method . modifiers ) & ( AccAnnotationDefault ) ) == 0 ) ) {