The first optimization consisted of adding an additional method to BundleFile with the following signature:
abstract public void getEntryPaths(String path, boolean recursive)
This allows the bundle file to return all descendants under the specified path rather than only its children. In turn, this
allowed for the removal of the loop in Storage.listEntryPaths that made multiple calls to the bundle file for the same data.
The second optimization was to replace List with a Set in BundleLoader.listResources and Storage.listEntryPaths to achieve
constant lookup time for contains(). A LinkedHashSet was used to maintain the original ordering.
As part of this work, a bundle file decorator class (BundleFileWrapper) was introduced in order to shield clients from future
changes to BundleFile. As a result of these changes, org.eclipse.equinox.transforms and org.eclipse.equinox.weaving in
rt.equinox.bundles required updates.
Fixed synthetic access compiler warning in BundleLoader.
Removed all @since 3.2 annotations from package org.eclipse.osgi.storage.bundlefile.
Refactored SignedBundleFile so that BundleFileWrapper did not need to accept a null bundle file in the constructor.
Fixed a failure in DiscardBundleTests caused by not being able to setLastModified on a file locked by the framework.