Buggy code:
private static final IMethod [ ] NO_METHODS = new IMethod [ 0 ] ; private static final IType [ ] NO_TYPES = new IType [ 0 ] ; private static final IInitializer [ ] NO_INITIALIZERS = new IInitializer [ 0 ] ; private static final String [ ] NO_STRINGS = new String [ 0 ] ; protected BinaryType ( JavaElement parent , String name ) { } protected void closing ( Object info ) throws JavaModelException { } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , ICompletionRequestor requestor ) throws JavaModelException { } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , ICompletionRequestor requestor , WorkingCopyOwner owner ) throws JavaModelException { } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor ) throws JavaModelException { } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor , WorkingCopyOwner owner ) throws JavaModelException { } public IField createField ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { } public IInitializer createInitializer ( String contents , IJavaElement sibling , IProgressMonitor monitor ) throws JavaModelException { } public IMethod createMethod ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { } public IType createType ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { } public boolean equals ( Object o ) { } public IMethod [ ] findMethods ( IMethod method ) { } public IJavaElement [ ] getChildren ( ) throws JavaModelException { } protected ClassFileInfo getClassFileInfo ( ) throws JavaModelException { } public IType getDeclaringType ( ) { } public int getElementType ( ) { } public IField getField ( String fieldName ) { } public IField [ ] getFields ( ) throws JavaModelException { } public int getFlags ( ) throws JavaModelException { } public String getFullyQualifiedName ( ) { } public String getFullyQualifiedName ( char enclosingTypeSeparator ) { } public String getFullyQualifiedParameterizedName ( ) throws JavaModelException { } public IJavaElement getHandleFromMemento ( String token , MementoTokenizer memento , WorkingCopyOwner workingCopyOwner ) { } public IInitializer getInitializer ( int count ) { } public IInitializer [ ] getInitializers ( ) { } public IMethod getMethod ( String selector , String [ ] parameterTypeSignatures ) { } public IMethod [ ] getMethods ( ) throws JavaModelException { } public IPackageFragment getPackageFragment ( ) { } public String getSuperclassTypeSignature ( ) throws JavaModelException { } public String getSuperclassName ( ) throws JavaModelException { } public String [ ] getSuperInterfaceNames ( ) throws JavaModelException { } public String [ ] getSuperInterfaceTypeSignatures ( ) throws JavaModelException { IBinaryType info = ( ( IBinaryType ) ( getElementInfo ( ) ) ) ; char [ ] genericSignature = info . getGenericSignature ( ) ; if ( genericSignature != null ) { ArrayList interfaces = new ArrayList ( ) ; int signatureLength = genericSignature . length ; int index = 0 ; if ( ( genericSignature [ 0 ] ) == '<' ) { int count = 1 ; while ( ( count > 0 ) && ( ( ++ index ) < signatureLength ) ) { switch ( genericSignature [ index ] ) { case '<' : count ++ ; break ; case '>' : count -- ; break ; } } index ++ ; } index = ( org . eclipse . jdt . internal . core . util . Util . scanClassTypeSignature ( genericSignature , index ) ) + 1 ; while ( index < signatureLength ) { int start = index ; index = ( org . eclipse . jdt . internal . core . util . Util . scanClassTypeSignature ( genericSignature , start ) ) + 1 ; char [ ] interfaceSig = CharOperation . subarray ( genericSignature , start , index ) ; <START_BUG> interfaces . add ( new String ( interfaceSig ) ) ; <END_BUG> } int size = interfaces . size ( ) ; String [ ] result = new String [ size ] ; interfaces . toArray ( result ) ; return result ; } else { char [ ] [ ] names = info . getInterfaceNames ( ) ; int length ; if ( ( names == null ) || ( ( length = names . length ) == 0 ) ) { return BinaryType . NO_STRINGS ; } names = ClassFile . translatedNames ( names ) ; String [ ] strings = new String [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { strings [ i ] = new String ( Signature . createTypeSignature ( names [ i ] , true ) ) ; } return strings ; } } public ITypeParameter [ ] getTypeParameters ( ) throws JavaModelException { } public char [ ] [ ] getTypeParameterNames ( ) throws JavaModelException { } public String [ ] getTypeParameterSignatures ( ) throws JavaModelException { } public IType getType ( String typeName ) { } public ITypeParameter getTypeParameter ( String typeParameterName ) { } public String getTypeQualifiedName ( ) { } public String getTypeQualifiedName ( char enclosingTypeSeparator ) { } public IType [ ] getTypes ( ) throws JavaModelException { }

Fix:
interfaces . add ( new String ( ClassFile . translatedName ( interfaceSig ) ) ) ;