Jeroen Frijters writes: > Andrew Haley wrote: > > The current gnu.classpath.VMStackWalker interface is inefficient. > > > > Sun provide: > > > > sun.reflect.reflection.getCallerClass(int depth) > > > > and for the same function we would do > > > > VMStackWalker.getClassContext()[depth]; > > > > You see the difference: Classpath's VMStackWalker enumerates the whole > > stack, whereas Sun's only has to enumerate a few stack frames. > > Actually, Sun simply has a bad design. There is no need for arbitrary > depth caller class discovery (as our codebase demonstrates). How, exactly? I see horrors like /** * Get the class loader associated with the Class returned by * <code>getCallingClass()</code>, or <code>null</code> if no such class * exists or it is the boot loader. This method is an optimization for the * expression <code>VMStackWalker.getClassLoader(getClassContext()[1])</code> * and should return the same result. * * <p> * VM implementers are encouraged to provide a more efficient * version of this method. */ public static ClassLoader getCallingClassLoader() { Class[] ctx = getClassContext(); if (ctx.length < 3) return null; return getClassLoader(ctx[2]); } in several places. > However, now that we've got the reference j.u.c implementation it > makes sense to add a method to VMStackWalker that enables us to > more efficiently implement sun.reflect.reflection.getCallerClass. Right. Andrew.