public File getFile(String entry, boolean nativeCode) {
public synchronized File getFile(String entry, boolean nativeCode) {
	public File getFile(String entry, boolean nativeCode) {		if (!checkedOpen())			return null;		ZipEntry zipEntry = getZipEntry(entry);		if (zipEntry == null)			return null;		try {			File nested = getExtractFile(zipEntry.getName());			if (nested != null) {				if (nested.exists()) {					/* the entry is already cached */					if (Debug.DEBUG && Debug.DEBUG_GENERAL)						Debug.println("File already present: " + nested.getPath()); //$NON-NLS-1$				} else {					if (zipEntry.getName().endsWith("/")) { //$NON-NLS-1$						if (!nested.mkdirs()) {							if (Debug.DEBUG && Debug.DEBUG_GENERAL)								Debug.println("Unable to create directory: " + nested.getPath()); //$NON-NLS-1$							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, nested.getAbsolutePath()));						}						extractDirectory(zipEntry.getName());					} else {						InputStream in = zipFile.getInputStream(zipEntry);						if (in == null)							return null;						/* the entry has not been cached */						if (Debug.DEBUG && Debug.DEBUG_GENERAL)							Debug.println("Creating file: " + nested.getPath()); //$NON-NLS-1$						/* create the necessary directories */						File dir = new File(nested.getParent());						if (!dir.exists() && !dir.mkdirs()) {							if (Debug.DEBUG && Debug.DEBUG_GENERAL)								Debug.println("Unable to create directory: " + dir.getPath()); //$NON-NLS-1$							throw new IOException(NLS.bind(AdaptorMsg.ADAPTOR_DIRECTORY_CREATE_EXCEPTION, dir.getAbsolutePath()));						}						/* copy the entry to the cache */						AdaptorUtil.readFile(in, nested);						if (nativeCode)							setPermissions(nested);					}				}				return nested;			}		} catch (IOException e) {			if (Debug.DEBUG && Debug.DEBUG_GENERAL)				Debug.printStackTrace(e);		}		return null;	}