classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Use of VMSecurityManager.getClassContext()


From: David Holmes
Subject: Use of VMSecurityManager.getClassContext()
Date: Thu, 18 Mar 2004 10:46:20 +1000

I filed a documentation bug against this method because it implied that it
was only called by SecurityManager.getClassContext() when in fact it is also
calld by Class and ClassLoader directly. This makes it awkward for
VMSecurityManager.getClassContext() to know how many stack frames it needs
to pop to return the "true" caller.

But looking at how Class and ClassLoader use this method we have code of the
form:

        Class c = VMSecurityManager.getClassContext()[1];
        ClassLoader cl = c.getClassLoader();

getClassContext() is only being used to find the class of the immediate
caller. This is horrendously inefficient in terms of time and space. Might I
suggest that a method be added to Class/VMClass or VMClassLoader or
VMSecurityManager to simply return a single Class from the current calling
context:

   /**
    * Return the Class of the method at the given position on the call
stack. This is
    * logically equivalent to
<tt>VMSecurityManager.getClassContext()[pos]</tt> but does
    * not need to traverse the whole call stack nor construct an array.
    * @param pos the position in the callstack: 0 is the caller of this
method, 1 the
    * caller of that method, etc.
    * @return the Class of the method at the given position in the callstack
    * @throws IllegalArgumentException if <tt>pos</tt> is negative or
greater than the
    * depth of the call stack.
    */
   static native Class getClassFromContext(int pos);

That also simplifies VMSecurityManager.getClassContext() because it now
knows that its caller is always SecurityManager.getClassContext().

Cheers,
David Holmes






reply via email to

[Prev in Thread] Current Thread [Next in Thread]