Buggy code:
public class ClassFile extends Openable implements IClassFile { protected BinaryType fBinaryType = null ; protected ClassFile ( IPackageFragment parent , String name ) { } public void codeComplete ( int offset , ICompletionRequestor requestor ) throws JavaModelException { } public IJavaElement [ ] codeSelect ( int offset , int length ) throws JavaModelException { } protected OpenableElementInfo createElementInfo ( ) { } protected IJavaElement findElement ( IJavaElement elt , int position , SourceMapper mapper ) { } protected boolean generateInfos ( OpenableElementInfo info , IProgressMonitor pm , Map newElements , IResource underlyingResource , IProblemRequestor problemRequestor ) throws JavaModelException { } private IBinaryType getBinaryTypeInfo ( IFile file ) throws JavaModelException { JavaElement le = ( ( JavaElement ) ( getParent ( ) ) ) ; if ( le instanceof JarPackageFragment ) { try { JarPackageFragmentRoot root = ( ( JarPackageFragmentRoot ) ( le . getParent ( ) ) ) ; IBinaryType info = null ; ZipFile zip = null ; try { zip = root . getJar ( ) ; String entryName = getParent ( ) . getElementName ( ) ; entryName = entryName . replace ( '.' , '//' ) ; if ( entryName . equals ( "" ) ) { entryName += getElementName ( ) ; } else { entryName += '//' + ( getElementName ( ) ) ; } <START_BUG> info = ClassFileReader . read ( zip , entryName ) ; <END_BUG> } finally { if ( ( zip != null ) && ( ( JavaModelManager . getJavaModelManager ( ) . zipFiles ) == null ) ) { try { zip . close ( ) ; } catch ( IOException e ) { } } } if ( info == null ) { throw newNotPresentException ( ) ; } return info ; } catch ( ClassFormatException cfe ) { return null ; } catch ( IOException ioe ) { throw new JavaModelException ( ioe , IJavaModelStatusConstants . IO_EXCEPTION ) ; } catch ( CoreException e ) { throw new JavaModelException ( e ) ; } } else { byte [ ] contents = Util . getResourceContentsAsByteArray ( file ) ; try { return new ClassFileReader ( contents , getElementName ( ) . toCharArray ( ) ) ; } catch ( ClassFormatException cfe ) { return null ; } } } public IBuffer getBuffer ( ) throws JavaModelException { } public IClassFile getClassFile ( ) { } public IResource getCorrespondingResource ( ) throws JavaModelException { } public IJavaElement getElementAt ( int position ) throws JavaModelException { } protected char getHandleMementoDelimiter ( ) { } public String getSource ( ) throws JavaModelException { } public ISourceRange getSourceRange ( ) throws JavaModelException { } public IType getType ( ) throws JavaModelException { } public IJavaElement getWorkingCopy ( IProgressMonitor monitor , IBufferFactory factory ) throws JavaModelException { } protected boolean hasBuffer ( ) { } public boolean hasChildren ( ) throws JavaModelException { } public boolean isClass ( ) throws JavaModelException { } public boolean isInterface ( ) throws JavaModelException { } public boolean isReadOnly ( ) { } protected IBuffer openBuffer ( IProgressMonitor pm ) throws JavaModelException { } public IJavaElement rootedAt ( IJavaProject project ) { } static char [ ] simpleName ( char [ ] className ) { } public static char [ ] translatedName ( char [ ] name ) { } static char [ ] [ ] translatedNames ( char [ ] [ ] names ) { } static char [ ] unqualifiedName ( char [ ] className ) { } public void codeComplete ( int offset , final ICodeCompletionRequestor requestor ) throws JavaModelException { } }

Fix:
info = ClassFileReader . read ( zip , entryName , true ) ;