Buggy code:
public final class SelectionEngine extends Engine implements ISearchRequestor { public static boolean DEBUG = false ; SelectionParser parser ; ISelectionRequestor requestor ; boolean acceptedAnswer ; private int actualSelectionStart ; private int actualSelectionEnd ; private char [ ] selectedIdentifier ; private char [ ] [ ] [ ] acceptedClasses ; private char [ ] [ ] [ ] acceptedInterfaces ; int acceptedClassesCount ; int acceptedInterfacesCount ; boolean noProposal = true ; IProblem problem = null ; private class CheckState { public CheckState ( int depth ) { } public int depth = 0 ; } public SelectionEngine ( SearchableEnvironment nameEnvironment , ISelectionRequestor requestor , Map settings ) { } public void acceptClass ( char [ ] packageName , char [ ] className , int modifiers , AccessRestriction accessRestriction ) { } public void acceptInterface ( char [ ] packageName , char [ ] interfaceName , int modifiers , AccessRestriction accessRestriction ) { } public void acceptPackage ( char [ ] packageName ) { } private void acceptQualifiedTypes ( ) { } private boolean checkSelection ( char [ ] source , int selectionStart , int selectionEnd ) { } private boolean checkTypeArgument ( Scanner scanner , SelectionEngine . CheckState state ) throws InvalidInputException { } private void completeLocalTypes ( Binding binding ) { <START_BUG> switch ( binding . bindingType ( ) ) { <END_BUG> case Binding . PARAMETERIZED_TYPE : case Binding . RAW_TYPE : ParameterizedTypeBinding parameterizedTypeBinding = ( ( ParameterizedTypeBinding ) ( binding ) ) ; this . completeLocalTypes ( parameterizedTypeBinding . type ) ; TypeBinding [ ] args = parameterizedTypeBinding . arguments ; int length = ( args == null ) ? 0 : args . length ; for ( int i = 0 ; i < length ; i ++ ) { this . completeLocalTypes ( args [ i ] ) ; } break ; case Binding . TYPE : case Binding . GENERIC_TYPE : if ( binding instanceof LocalTypeBinding ) { LocalTypeBinding localTypeBinding = ( ( LocalTypeBinding ) ( binding ) ) ; if ( ( localTypeBinding . constantPoolName ( ) ) == null ) { char [ ] constantPoolName = this . unitScope . computeConstantPoolName ( localTypeBinding ) ; localTypeBinding . setConstantPoolName ( constantPoolName ) ; } } TypeBinding typeBinding = ( ( TypeBinding ) ( binding ) ) ; ReferenceBinding enclosingType = typeBinding . enclosingType ( ) ; if ( enclosingType != null ) { this . completeLocalTypes ( enclosingType ) ; } break ; case Binding . ARRAY_TYPE : ArrayBinding arrayBinding = ( ( ArrayBinding ) ( binding ) ) ; this . completeLocalTypes ( arrayBinding . leafComponentType ) ; case Binding . WILDCARD_TYPE : case Binding . TYPE_PARAMETER : break ; case Binding . FIELD : FieldBinding fieldBinding = ( ( FieldBinding ) ( binding ) ) ; this . completeLocalTypes ( fieldBinding . declaringClass ) ; this . completeLocalTypes ( fieldBinding . type ) ; break ; case Binding . METHOD : MethodBinding methodBinding = ( ( MethodBinding ) ( binding ) ) ; this . completeLocalTypes ( methodBinding . returnType ) ; TypeBinding [ ] parameters = methodBinding . parameters ; for ( int i = 0 , max = ( parameters == null ) ? 0 : parameters . length ; i < max ; i ++ ) { this . completeLocalTypes ( parameters [ i ] ) ; } break ; } } public AssistParser getParser ( ) { } private boolean isLocal ( ReferenceBinding binding ) { } public void select ( ICompilationUnit sourceUnit , int selectionSourceStart , int selectionSourceEnd ) { } private void selectFrom ( Binding binding , CompilationUnitDeclaration parsedUnit , boolean isDeclaration ) { } private void selectLocalDeclaration ( ASTNode node ) { } public void selectType ( ISourceType sourceType , char [ ] typeName , SourceTypeElementInfo [ ] topLevelTypes , boolean searchInEnvironment ) { } private boolean selectDeclaration ( CompilationUnitDeclaration compilationUnit ) { } private boolean selectDeclaration ( TypeDeclaration typeDeclaration , char [ ] assistIdentifier , char [ ] packageName ) { } }

Fix:
switch ( binding . kind ( ) ) {