Andrew Dinn wrote:
On 01/05/2010 07:42 PM, Bill Burke wrote:
> public List<Closeable> recursiveMount(VirtualFile file) throws
> IOException
> {
> ArrayList<Closeable> mounts = new ArrayList<Closeable>();
>
> if (!file.isDirectory()&&
> file.getName().matches("^.*\\.([EeWwJj][Aa][Rr]|[Zz][Ii][Pp])$"))
> mounts.add(VFS.mountZip(file, file, provider));
>
> /****** Doubled speedup when this was commented out!!!!!!!!!!!!
> if (file.isDirectory())
> for (VirtualFile child : file.getChildren())
> mounts.addAll(recursiveMount(child));
> */
>
>
> return mounts;
> }
Irrespective of the answer to any general issues over caching it is
clear in this case that the 2 calls to file.isDirectory() can quite
legitimately be replaced with a single call and a local variable to
stash/test the result (it's a shame the compiler cannot figure this out
but so it goes). Since this code actually turned up in the profiling as
a major source of overhead then the obvious thing to do in response is
patch it and see what turns up next then keep going until easy to fix
things like this stop turning up. Saves us wasting time in protracted
arguments as well ;-)
In addition you don't want to do regex matching like that. However, code
like this is not actually going to be in the AS, it was just a quick and
dirty routine for a test case. So that bit was blown out of proportion.
--
Jason T. Greene
JBoss, a division of Red Hat