Buggy code:
public class BinaryIndexer extends AbstractIndexer { public static final String [ ] FILE_TYPES = new String [ ] { "class" } ; private static final char [ ] BYTE = "byte" . toCharArray ( ) ; private static final char [ ] CHAR = "char" . toCharArray ( ) ; private static final char [ ] DOUBLE = "double" . toCharArray ( ) ; private static final char [ ] FLOAT = "float" . toCharArray ( ) ; private static final char [ ] INT = "int" . toCharArray ( ) ; private static final char [ ] LONG = "long" . toCharArray ( ) ; private static final char [ ] SHORT = "short" . toCharArray ( ) ; private static final char [ ] BOOLEAN = "boolean" . toCharArray ( ) ; private static final char [ ] VOID = "void" . toCharArray ( ) ; private static final char [ ] INIT = "<init>" . toCharArray ( ) ; private boolean needReferences ; public BinaryIndexer ( ) { } public BinaryIndexer ( boolean retrieveReferences ) { } private void convertToArrayType ( char [ ] [ ] parameterTypes , int counter , int arrayDim ) { } private char [ ] convertToArrayType ( char [ ] typeName , int arrayDim ) { } private char [ ] decodeFieldType ( char [ ] signature ) throws ClassFormatException { } private char [ ] [ ] decodeParameterTypes ( char [ ] signature ) throws ClassFormatException { } private char [ ] decodeReturnType ( char [ ] signature ) throws ClassFormatException { } private int extractArgCount ( char [ ] signature ) throws ClassFormatException { } private final char [ ] extractClassName ( int [ ] constantPoolOffsets , ClassFileReader reader , int index ) { } private final char [ ] extractName ( int [ ] constantPoolOffsets , ClassFileReader reader , int index ) { } private final char [ ] extractClassReference ( int [ ] constantPoolOffsets , ClassFileReader reader , int index ) { } private void extractReferenceFromConstantPool ( byte [ ] contents , ClassFileReader reader ) throws ClassFormatException { } private final char [ ] extractType ( int [ ] constantPoolOffsets , ClassFileReader reader , int index ) { } public String [ ] getFileTypes ( ) { } private void indexClassFile ( byte [ ] contents , char [ ] documentName ) throws IOException { try { ClassFileReader reader = new ClassFileReader ( contents , documentName ) ; char [ ] className = replace ( '//' , '.' , reader . getName ( ) ) ; int packageNameIndex = CharOperation . lastIndexOf ( '.' , className ) ; char [ ] packageName = null ; char [ ] name = null ; if ( packageNameIndex >= 0 ) { packageName = CharOperation . subarray ( className , 0 , packageNameIndex ) ; name = CharOperation . subarray ( className , ( packageNameIndex + 1 ) , className . length ) ; } else { name = className ; } char [ ] enclosingTypeName = null ; if ( reader . isNestedType ( ) ) { if ( reader . isAnonymous ( ) ) { <START_BUG> name = NO_CHAR ; <END_BUG> } else { name = reader . getInnerSourceName ( ) ; } if ( ( reader . isLocal ( ) ) || ( reader . isAnonymous ( ) ) ) { enclosingTypeName = IIndexConstants . ONE_ZERO ; } else { char [ ] fullEnclosingName = reader . getEnclosingTypeName ( ) ; int nameLength = ( ( fullEnclosingName . length ) - packageNameIndex ) - 1 ; if ( nameLength <= 0 ) { return ; } enclosingTypeName = new char [ nameLength ] ; System . arraycopy ( fullEnclosingName , ( packageNameIndex + 1 ) , enclosingTypeName , 0 , nameLength ) ; } } if ( name == null ) return ; char [ ] [ ] superinterfaces = replace ( '//' , '.' , reader . getInterfaceNames ( ) ) ; char [ ] [ ] enclosingTypeNames = ( enclosingTypeName == null ) ? null : new char [ ] [ ] { enclosingTypeName } ; if ( reader . isInterface ( ) ) { addInterfaceDeclaration ( reader . getModifiers ( ) , packageName , name , enclosingTypeNames , superinterfaces ) ; } else { char [ ] superclass = replace ( '//' , '.' , reader . getSuperclassName ( ) ) ; addClassDeclaration ( reader . getModifiers ( ) , packageName , name , enclosingTypeNames , superclass , superinterfaces ) ; } MethodInfo [ ] methods = ( ( MethodInfo [ ] ) ( reader . getMethods ( ) ) ) ; if ( methods != null ) { for ( int i = 0 , max = methods . length ; i < max ; i ++ ) { MethodInfo method = methods [ i ] ; char [ ] descriptor = method . getMethodDescriptor ( ) ; char [ ] [ ] parameterTypes = decodeParameterTypes ( descriptor ) ; char [ ] returnType = decodeReturnType ( descriptor ) ; char [ ] [ ] exceptionTypes = replace ( '//' , '.' , method . getExceptionTypeNames ( ) ) ; if ( method . isConstructor ( ) ) { addConstructorDeclaration ( className , parameterTypes , exceptionTypes ) ; } else { if ( ! ( method . isClinit ( ) ) ) { addMethodDeclaration ( method . getSelector ( ) , parameterTypes , returnType , exceptionTypes ) ; } } } } FieldInfo [ ] fields = ( ( FieldInfo [ ] ) ( reader . getFields ( ) ) ) ; if ( fields != null ) { for ( int i = 0 , max = fields . length ; i < max ; i ++ ) { FieldInfo field = fields [ i ] ; char [ ] fieldName = field . getName ( ) ;

Fix:
name = CharOperation . NO_CHAR ;