Buggy code:
public void recordSuppressWarnings ( Scope scope , int startSuppresss , int endSuppress , boolean isSuppressingWarnings ) { } public TypeBinding resolveType ( BlockScope scope ) { if ( ( this . compilerAnnotation ) != null ) return this . resolvedType ; this . constant = Constant . NotAConstant ; TypeBinding typeBinding = this . type . resolveType ( scope ) ; if ( typeBinding == null ) { return null ; } this . resolvedType = typeBinding ; if ( ! ( typeBinding . isAnnotationType ( ) ) ) { scope . problemReporter ( ) . typeMismatchError ( typeBinding , scope . getJavaLangAnnotationAnnotation ( ) , this . type ) ; return null ; } ReferenceBinding annotationType = ( ( ReferenceBinding ) ( this . resolvedType ) ) ; MethodBinding [ ] methods = annotationType . methods ( ) ; MemberValuePair [ ] originalValuePairs = memberValuePairs ( ) ; MemberValuePair valueAttribute = null ; MemberValuePair [ ] pairs ; int pairsLength = originalValuePairs . length ; if ( pairsLength > 0 ) { System . arraycopy ( originalValuePairs , 0 , ( pairs = new MemberValuePair [ pairsLength ] ) , 0 , pairsLength ) ; } else { pairs = originalValuePairs ; } 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 pair = pairs [ j ] ; if ( pair == null ) continue nextPair ; char [ ] name = pair . name ; if ( CharOperation . equals ( name , selector ) ) { if ( ( valueAttribute == null ) && ( CharOperation . equals ( name , TypeConstants . VALUE ) ) ) { valueAttribute = pair ; } pair . binding = method ; pair . resolveTypeExpecting ( scope , method . returnType ) ; pairs [ j ] = null ; foundValue = true ; boolean foundDuplicate = false ; for ( int k = j + 1 ; k < pairsLength ; k ++ ) { MemberValuePair otherPair = pairs [ k ] ; if ( otherPair == null ) continue ; if ( CharOperation . equals ( otherPair . name , selector ) ) { foundDuplicate = true ; scope . problemReporter ( ) . duplicateAnnotationValue ( annotationType , otherPair ) ; otherPair . binding = method ; otherPair . resolveTypeExpecting ( scope , method . returnType ) ; pairs [ k ] = null ; } } if ( foundDuplicate ) { scope . problemReporter ( ) . duplicateAnnotationValue ( annotationType , pair ) ; continue nextMember ; } } } if ( ( ! foundValue ) && ( ( ( method . modifiers ) & ( ClassFileConstants . AccAnnotationDefault ) ) == 0 ) ) { scope . problemReporter ( ) . missingValueForAnnotationMember ( this , selector ) ; } } for ( int i = 0 ; i < pairsLength ; i ++ ) { if ( ( pairs [ i ] ) != null ) { scope . problemReporter ( ) . undefinedAnnotationValue ( annotationType , pairs [ i ] ) ; pairs [ i ] . resolveTypeExpecting ( scope , null ) ; } } <START_BUG> this . compilerAnnotation = new AnnotationBinding ( this ) ; <END_BUG> long tagBits = detectStandardAnnotation ( scope , annotationType , valueAttribute ) ; scope . referenceCompilationUnit ( ) . compilationResult . recordSuppressWarnings ( CompilerOptions . NonExternalizedString , this . sourceStart , this . declarationSourceEnd ) ; if ( ( this . recipient ) != null ) { if ( tagBits != 0 ) { switch ( this . recipient . kind ( ) ) { case Binding . PACKAGE : ( ( PackageBinding ) ( this . recipient ) ) . tagBits |= tagBits ; break ; case Binding . TYPE : case Binding . GENERIC_TYPE : SourceTypeBinding sourceType = ( ( SourceTypeBinding ) ( this . recipient ) ) ; sourceType . tagBits |= tagBits ; if ( ( tagBits & ( TagBits . AnnotationSuppressWarnings ) ) != 0 ) { TypeDeclaration typeDeclaration = sourceType . scope . referenceContext ; int start ; if ( ( scope . referenceCompilationUnit ( ) . types [ 0 ] ) == typeDeclaration ) { start = 0 ; } else { start = typeDeclaration . declarationSourceStart ; } recordSuppressWarnings ( scope , start , typeDeclaration . declarationSourceEnd , scope . compilerOptions ( ) . suppressWarnings ) ; } break ; case Binding . METHOD : MethodBinding sourceMethod = ( ( MethodBinding ) ( this . recipient ) ) ; sourceMethod . tagBits |= tagBits ; if ( ( tagBits & ( TagBits . AnnotationSuppressWarnings ) ) != 0 ) { sourceType = ( ( SourceTypeBinding ) ( sourceMethod . declaringClass ) ) ; AbstractMethodDeclaration methodDeclaration = sourceType . scope . referenceContext . declarationOf ( sourceMethod ) ; recordSuppressWarnings ( scope , methodDeclaration . declarationSourceStart , methodDeclaration . declarationSourceEnd , scope . compilerOptions ( ) . suppressWarnings ) ; } break ; case Binding . FIELD : FieldBinding sourceField = ( ( FieldBinding ) ( this . recipient ) ) ; sourceField . tagBits |= tagBits ; if ( ( tagBits & ( TagBits . AnnotationSuppressWarnings ) ) != 0 ) { sourceType = ( ( SourceTypeBinding ) ( sourceField . declaringClass ) ) ; FieldDeclaration fieldDeclaration = sourceType . scope . referenceContext . declarationOf ( sourceField ) ; recordSuppressWarnings ( scope , fieldDeclaration . declarationSourceStart , fieldDeclaration . declarationSourceEnd , scope . compilerOptions ( ) . suppressWarnings ) ; } break ; case Binding . LOCAL : LocalVariableBinding variable = ( ( LocalVariableBinding ) ( this . recipient ) ) ; variable . tagBits |= tagBits ;

Fix:
this . compilerAnnotation = scope . environment ( ) . createAnnotation ( ( ( ReferenceBinding ) ( this . resolvedType ) ) , this . computeElementValuePairs ( ) ) ;