Buggy code:
public class BindingKey { public class Scanner { public static final int START = - 1 ; public static final int PACKAGE = 0 ; public static final int TYPE = 1 ; public static final int FIELD = 2 ; public static final int METHOD = 3 ; public static final int ARRAY = 4 ; public static final int LOCAL_VAR = 5 ; public static final int END = 6 ; int index = 0 ; int start ; public char [ ] source ; public int token = BindingKey . Scanner . START ; Scanner ( char [ ] source ) { } char [ ] getTokenSource ( ) { } boolean isAtFieldOrMethodStart ( ) { } boolean isAtLocalVariableStart ( ) { } boolean isAtMemberTypeStart ( ) { } boolean isAtParametersStart ( ) { } boolean isAtTypeParameterStart ( ) { } boolean isAtTypeVariableStart ( ) { } boolean isAtTypeStart ( ) { } boolean isAtWildCardStart ( ) { } int nextToken ( ) { } void skipMethodSignature ( ) { } void skipParametersEnd ( ) { } public String toString ( ) { } } char [ ] [ ] compoundName ; int dimension ; public BindingKey . Scanner scanner ; Compiler compiler ; LookupEnvironment environment ; public BindingKey ( String key ) { } public BindingKey ( String key , Compiler compiler , LookupEnvironment environment ) { } public char [ ] [ ] compoundName ( ) { } TypeBinding getArrayBinding ( int dim , TypeBinding binding ) { } TypeBinding getBaseTypeBinding ( char [ ] signature ) { } TypeBinding getBinaryBinding ( ) { } public CompilationUnitDeclaration getCompilationUnitDeclaration ( ) { } public Binding getCompilerBinding ( CompilationUnitDeclaration parsedUnit ) { } public Binding getCompilerBinding ( ) { } FieldBinding getFieldBinding ( FieldBinding [ ] fields ) { } SourceTypeBinding getGenericTypeBinding ( SourceTypeBinding typeBinding ) { } public String getKey ( ) { } LocalVariableBinding getLocalVariableBinding ( BlockScope scope ) { } MethodBinding getMethodBinding ( MethodBinding [ ] methods ) { } ParameterizedGenericMethodBinding getParameterizedGenericMethodBinding ( MethodBinding methodBinding ) { } ParameterizedTypeBinding getParameterizedTypeBinding ( ReferenceBinding genericType , ReferenceBinding enclosingType ) { } TypeBinding getTypeBinding ( CompilationUnitDeclaration parsedUnit , TypeDeclaration [ ] types , char [ ] typeName ) { } TypeVariableBinding getTypeVariableBinding ( SourceTypeBinding typeBinding ) { } TypeBinding getWildCardBinding ( ReferenceBinding genericType , int rank ) { if ( ( this . scanner . nextToken ( ) ) != ( BindingKey . Scanner . TYPE ) ) return null ; char [ ] source = this . scanner . getTokenSource ( ) ; if ( ( source . length ) == 0 ) return null ; int kind = - 1 ; TypeBinding bound = null ; switch ( source [ 0 ] ) { case '*' : kind = Wildcard . UNBOUND ; break ; case '+' : reset ( ) ; kind = Wildcard . EXTENDS ; bound = ( ( TypeBinding ) ( getCompilerBinding ( ) ) ) ; break ; case '-' : reset ( ) ; kind = Wildcard . SUPER ; bound = ( ( TypeBinding ) ( getCompilerBinding ( ) ) ) ; break ; } if ( kind == ( - 1 ) ) return null ; if ( ( kind != ( Wildcard . UNBOUND ) ) && ( bound == null ) ) return null ; <START_BUG> return this . environment . createWildcard ( genericType , rank , bound , kind ) ; <END_BUG> } void reset ( ) { } public String toString ( ) { } }

Fix:
return this . environment . createWildcard ( genericType , rank , bound , null , kind ) ;