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 { int [ ] constantPoolOffsets = reader . getConstantPoolOffsets ( ) ; int constantPoolCount = constantPoolOffsets . length ; for ( int i = 1 ; i < constantPoolCount ; i ++ ) { int tag = reader . u1At ( constantPoolOffsets [ i ] ) ; char [ ] name = null ; char [ ] type = null ; switch ( tag ) { case FieldRefTag : name = extractName ( constantPoolOffsets , reader , i ) ; addFieldReference ( name ) ; break ; case MethodRefTag : case InterfaceMethodRefTag : name = extractName ( constantPoolOffsets , reader , i ) ; type = extractType ( constantPoolOffsets , reader , i ) ; if ( CharOperation . equals ( BinaryIndexer . INIT , name ) ) { char [ ] className = replace ( '//' , '.' , extractClassName ( constantPoolOffsets , reader , i ) ) ; addConstructorReference ( className , extractArgCount ( type ) ) ; } else { addMethodReference ( name , extractArgCount ( type ) ) ; } break ; case ClassTag : <START_BUG> name = extractClassReference ( constantPoolOffsets , reader , i ) ; <END_BUG> addTypeReference ( name ) ; } } } private final char [ ] extractType ( int [ ] constantPoolOffsets , ClassFileReader reader , int index ) { } public String [ ] getFileTypes ( ) { } private void indexClassFile ( byte [ ] contents , char [ ] documentName ) throws IOException { } protected void indexFile ( IDocument document ) throws IOException { } private char [ ] [ ] replace ( char toBeReplaced , char newChar , char [ ] [ ] array ) { } private char [ ] replace ( char toBeReplaced , char newChar , char [ ] array ) { } public void setFileTypes ( String [ ] fileTypes ) { } }

Fix:
name = replace ( '//' , '.' , extractClassReference ( constantPoolOffsets , reader , i ) ) ;