Buggy code:
public class SourceMapper extends ReferenceInfoAdapter implements ISourceElementRequestor { protected BinaryType fType ; protected IPath fZipPath ; protected String fRootPath ; protected JavaModel fJavaModel ; protected static String [ ] fgEmptyStringArray = new String [ 0 ] ; protected HashMap fParameterNames ; protected HashMap fSourceRanges ; protected static SourceRange fgUnknownRange = new SourceRange ( ( - 1 ) , 0 ) ; protected int [ ] fMemberDeclarationStart ; protected SourceRange [ ] fMemberNameRange ; protected String [ ] fMemberName ; protected char [ ] [ ] [ ] fMethodParameterNames ; protected char [ ] [ ] [ ] fMethodParameterTypes ; protected IJavaElement searchedElement ; private HashMap importsTable ; private HashMap importsCounterTable ; IType [ ] types ; int [ ] typeDeclarationStarts ; SourceRange [ ] typeNameRanges ; int typeDepth ; int anonymousCounter ; int anonymousClassName ; String encoding ; public SourceMapper ( IPath zipPath , String rootPath , JavaModel model ) { } public void acceptImport ( int declarationStart , int declarationEnd , char [ ] name , boolean onDemand ) { } public void acceptLineSeparatorPositions ( int [ ] positions ) { } public void acceptPackage ( int declarationStart , int declarationEnd , char [ ] name ) { } public void acceptProblem ( IProblem problem ) { } public void close ( ) throws JavaModelException { } private String [ ] convertTypeNamesToSigs ( char [ ] [ ] typeNames ) { } public void enterClass ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] superclass , char [ ] [ ] superinterfaces ) { } public void enterCompilationUnit ( ) { } public void enterConstructor ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] parameterTypes , char [ ] [ ] parameterNames , char [ ] [ ] exceptionTypes ) { } public void enterField ( int declarationStart , int modifiers , char [ ] type , char [ ] name , int nameSourceStart , int nameSourceEnd ) { } public void enterInitializer ( int declarationSourceStart , int modifiers ) { } public void enterInterface ( int declarationStart , int modifiers , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] superinterfaces ) { } public void enterMethod ( int declarationStart , int modifiers , char [ ] returnType , char [ ] name , int nameSourceStart , int nameSourceEnd , char [ ] [ ] parameterTypes , char [ ] [ ] parameterNames , char [ ] [ ] exceptionTypes ) { } public void exitClass ( int declarationEnd ) { } public void exitCompilationUnit ( int declarationEnd ) { } public void exitConstructor ( int declarationEnd ) { } public void exitField ( int declarationEnd ) { } public void exitInitializer ( int declarationEnd ) { } public void exitInterface ( int declarationEnd ) { } public void exitMethod ( int declarationEnd ) { } public char [ ] findSource ( IType type ) { } public char [ ] findSource ( IType type , IBinaryType info ) { char [ ] sourceFileName = info . sourceFileName ( ) ; if ( sourceFileName == null ) return null ; String name = new String ( sourceFileName ) ; IPackageFragment pkgFrag = type . getPackageFragment ( ) ; if ( ! ( pkgFrag . isDefaultPackage ( ) ) ) { String pkg = type . getPackageFragment ( ) . getElementName ( ) . replace ( '.' , '//' ) ; name = ( pkg + '//' ) + name ; } ZipEntry entry = null ; ZipFile zip = null ; char [ ] source = null ; try { String fullName ; if ( ! ( fRootPath . equals ( IPackageFragmentRoot . DEFAULT_PACKAGEROOT_PATH ) ) ) { fullName = ( ( fRootPath ) + '//' ) + name ; } else { fullName = name ; } zip = getZip ( ) ; entry = zip . getEntry ( fullName ) ; if ( entry != null ) { byte [ ] bytes = null ; try { bytes = Util . getZipEntryByteContent ( entry , zip ) ; } catch ( IOException e ) { } if ( bytes != null ) { try { source = Util . bytesToChar ( bytes , this . encoding ) ; } catch ( IOException e ) { source = null ; } } } } catch ( CoreException e ) { return null ; } finally { <START_BUG> if ( zip != null ) { <END_BUG> try { zip . close ( ) ; } catch ( IOException e ) { } } } return source ; } public SourceRange getNameRange ( IJavaElement element ) { } public char [ ] [ ] getMethodParameterNames ( IMethod method ) { } public SourceRange getSourceRange ( IJavaElement element ) { } protected IType getType ( String typeName ) { } protected IJavaElement getUnqualifiedMethodHandle ( IMethod method ) { } public ZipFile getZip ( ) throws CoreException { } public void mapSource ( IType type , char [ ] contents ) { } public ISourceRange mapSource ( IType type , char [ ] contents , IJavaElement searchedElement ) { } protected void setMethodParameterNames ( IMethod method , char [ ] [ ] parameterNames ) { } protected void setSourceRange ( IJavaElement element , SourceRange sourceRange , SourceRange nameRange ) { } public char [ ] [ ] getImports ( BinaryType type ) { } private boolean hasToRetrieveSourceRangesForLocalClass ( char [ ] eltName ) { } }

Fix:
if ( ( zip != null ) && ( ( JavaModelManager . getJavaModelManager ( ) . zipFiles ) == null ) ) {