Buggy code:
public final class BinaryTypeBinding extends ReferenceBinding { private ReferenceBinding superclass ; private ReferenceBinding enclosingType ; private ReferenceBinding [ ] superInterfaces ; private FieldBinding [ ] fields ; private MethodBinding [ ] methods ; private ReferenceBinding [ ] memberTypes ; protected TypeVariableBinding [ ] typeVariables ; private LookupEnvironment environment ; private SimpleLookupTable storedAnnotations = null ; static Object convertMemberValue ( Object binaryValue , LookupEnvironment env ) { } static AnnotationBinding createAnnotation ( IBinaryAnnotation annotationInfo , LookupEnvironment env ) { IBinaryElementValuePair [ ] binaryPairs = annotationInfo . getElementValuePairs ( ) ; int length = ( binaryPairs == null ) ? 0 : binaryPairs . length ; ElementValuePair [ ] pairs = ( length == 0 ) ? Binding . NO_ELEMENT_VALUE_PAIRS : new ElementValuePair [ length ] ; for ( int i = 0 ; i < length ; i ++ ) pairs [ i ] = new ElementValuePair ( binaryPairs [ i ] . getName ( ) , BinaryTypeBinding . convertMemberValue ( binaryPairs [ i ] . getValue ( ) , env ) , null ) ; char [ ] typeName = annotationInfo . getTypeName ( ) ; ReferenceBinding annotationType = env . getTypeFromConstantPoolName ( typeName , 1 , ( ( typeName . length ) - 1 ) , false ) ; <START_BUG> return AnnotationBinding . createUnresolvedAnnotation ( annotationType , pairs , env ) ; <END_BUG> } public static AnnotationBinding [ ] createAnnotations ( IBinaryAnnotation [ ] annotationInfos , LookupEnvironment env ) { } public static ReferenceBinding resolveType ( ReferenceBinding type , LookupEnvironment environment , boolean convertGenericToRawType ) { } public static TypeBinding resolveType ( TypeBinding type , LookupEnvironment environment , ParameterizedTypeBinding parameterizedType , int rank ) { } public BinaryTypeBinding ( PackageBinding packageBinding , IBinaryType binaryType , LookupEnvironment environment ) { } public FieldBinding [ ] availableFields ( ) { } public MethodBinding [ ] availableMethods ( ) { } void cachePartsFrom ( IBinaryType binaryType , boolean needFieldsAndMethods ) { } private void createFields ( IBinaryField [ ] iFields , long sourceLevel ) { } private MethodBinding createMethod ( IBinaryMethod method , long sourceLevel ) { } private void createMethods ( IBinaryMethod [ ] iMethods , long sourceLevel ) { } private TypeVariableBinding [ ] createTypeVariables ( SignatureWrapper wrapper , Binding declaringElement ) { } public ReferenceBinding enclosingType ( ) { } public FieldBinding [ ] fields ( ) { } public char [ ] genericTypeSignature ( ) { } public MethodBinding getExactConstructor ( TypeBinding [ ] argumentTypes ) { } public MethodBinding getExactMethod ( char [ ] selector , TypeBinding [ ] argumentTypes , CompilationUnitScope refScope ) { } public FieldBinding getField ( char [ ] fieldName , boolean needResolve ) { } public ReferenceBinding getMemberType ( char [ ] typeName ) { } public MethodBinding [ ] getMethods ( char [ ] selector ) { } public boolean hasMemberTypes ( ) { } public TypeVariableBinding getTypeVariable ( char [ ] variableName ) { } private void initializeTypeVariable ( TypeVariableBinding variable , TypeVariableBinding [ ] existingVariables , SignatureWrapper wrapper ) { } public boolean isEquivalentTo ( TypeBinding otherType ) { } public boolean isGenericType ( ) { } public int kind ( ) { } public ReferenceBinding [ ] memberTypes ( ) { } public MethodBinding [ ] methods ( ) { } private FieldBinding resolveTypeFor ( FieldBinding field ) { } MethodBinding resolveTypesFor ( MethodBinding method ) { } AnnotationBinding [ ] retrieveAnnotations ( Binding binding ) { } SimpleLookupTable storedAnnotations ( boolean forceInitialize ) { } public ReferenceBinding superclass ( ) { } public ReferenceBinding [ ] superInterfaces ( ) { } public TypeVariableBinding [ ] typeVariables ( ) { } public String toString ( ) { } MethodBinding [ ] unResolvedMethods ( ) { } }

Fix:
return new UnresolvedAnnotationBinding ( annotationType , pairs , env ) ;