Buggy code:
public class BindingKeyResolver extends BindingKeyParser { Compiler compiler ; Binding compilerBinding ; char [ ] [ ] compoundName ; int dimension ; LookupEnvironment environment ; ReferenceBinding genericType ; MethodBinding methodBinding ; CompilationUnitDeclaration parsedUnit ; BlockScope scope ; TypeBinding typeBinding ; TypeDeclaration typeDeclaration ; ArrayList types = new ArrayList ( ) ; boolean isCapture ; int wildcardKind = - 1 ; private BindingKeyResolver ( BindingKeyParser parser , Compiler compiler , LookupEnvironment environment ) { } public BindingKeyResolver ( String key ) { } public BindingKeyResolver ( String key , Compiler compiler , LookupEnvironment environment ) { } public char [ ] [ ] compoundName ( ) { } public void consumeArrayDimension ( char [ ] brakets ) { } public void consumeCapture ( ) { } public void consumeField ( char [ ] fieldName ) { } public void consumeParameterizedMethod ( ) { } public void consumeLocalType ( char [ ] uniqueKey ) { } public void consumeLocalVar ( char [ ] varName ) { } public void consumeMethod ( char [ ] selector , char [ ] signature ) { } public void consumeMemberType ( char [ ] simpleTypeName ) { } public void consumePackage ( char [ ] pkgName ) { } public void consumeParameterizedType ( char [ ] simpleTypeName , boolean isRaw ) { } public void consumeParser ( BindingKeyParser parser ) { } public void consumeScope ( int scopeNumber ) { } public void consumeRawType ( ) { } public void consumeSecondaryType ( char [ ] simpleTypeName ) { } public void consumeFullyQualifiedName ( char [ ] fullyQualifiedName ) { } public void consumeTopLevelType ( ) { } public void consumeType ( ) { } public void consumeTypeVariable ( char [ ] typeVariableName ) { } public void consumeWildCard ( int kind ) { } private TypeBinding getArrayBinding ( int dim , TypeBinding binding ) { } private TypeBinding getBaseTypeBinding ( char [ ] signature ) { } private TypeBinding getBinaryBinding ( ) { } public CompilationUnitDeclaration getCompilationUnitDeclaration ( ) { } public Binding getCompilerBinding ( ) { } private TypeBinding getTypeBinding ( char [ ] simpleTypeName ) { } private TypeBinding [ ] getTypeBindingArguments ( ) { int size = this . types . size ( ) ; TypeBinding [ ] arguments = new TypeBinding [ size ] ; int rank = 0 ; for ( int i = 0 ; i < size ; i ++ ) { BindingKeyResolver resolver = ( ( BindingKeyResolver ) ( this . types . get ( i ) ) ) ; TypeBinding binding ; int kind = resolver . wildcardKind ; switch ( kind ) { case Wildcard . EXTENDS : case Wildcard . SUPER : binding = this . environment . createWildcard ( ( ( ReferenceBinding ) ( this . typeBinding ) ) , ( rank ++ ) , ( ( TypeBinding ) ( resolver . compilerBinding ) ) , null , kind ) ; break ; case Wildcard . UNBOUND : binding = this . environment . createWildcard ( ( ( ReferenceBinding ) ( this . typeBinding ) ) , ( rank ++ ) , null , null , kind ) ; break ; default : binding = ( ( TypeBinding ) ( resolver . compilerBinding ) ) ; } if ( resolver . isCapture ) <START_BUG> binding = new CaptureBinding ( ( ( WildcardBinding ) ( binding ) ) ) ; <END_BUG> arguments [ i ] = binding ; } this . types = new ArrayList ( ) ; return arguments ; } public void malformedKey ( ) { } public BindingKeyParser newParser ( ) { } public String toString ( ) { } }

Fix:
binding = new CaptureBinding ( ( ( WildcardBinding ) ( binding ) ) , null , 0 ) ;