Here is a list I have compiled of all the calls we need to the VM, and of
all the calls they should need to make back to us.

--------------------------------------------
Callouts from us to VM (stuff they provide):
--------------------------------------------

Helpers not tied to a specific method:
        Class getPrimitiveClass(String primName) # used in java.lang.<Wrapper
Class>.TYPE initializer
        Properties getDefaultProperties()        # used in java.lang.System
initialization to get VM-specific system properties; the essential ones the
VM should support will be defined in the JavaDoc for this method
        Class[] getClassesOnStack()              # used in
java.lang.SecurityManager for checks
        Method[] getMethodsOnStack()             # used in
java.lang.SecurityManager for checks

By class (if we go the gnu.vm.* route, these will still be the essential
methods):
java.lang.Class:
        Class[] getInterfaces()
        ClassLoader getClassLoader()
        Class forName(String name)
        int getModifiers()
        Class[] getClasses()
        Class[] getDeclaredClasses()
        Constructor getConstructor(Class[] args)
        Constructor getDeclaredConstructor(Class[] args)
        Constructor[] getConstructors()
        Constructor[] getDeclaredConstructors()
        Method getMethod(String name,Class[] args)
        Method getDeclaredMethod(String name,Class[] args)
        Method[] getMethods()
        Method[] getDeclaredMethods()
        Field getField(String name)
        Field getDeclaredField(String name)
        Field[] getFields()
        Field[] getDeclaredFields()

java.lang.ClassLoader:
        void resolveClass(Class c)
        void defineClass(String name, byte[] bytes, int start, int len)

java.lang.Object:
        void notify()
        void notifyAll()
        void wait(long ms, int ns)

java.lang.Runtime:
        void gc()
        void runFinalization()
        void runFinalizersOnExit(boolean on)
        long freeMemory()
        long totalMemory()
        void traceInstructions(boolean on)
        void traceMethodCalls(boolean on)
        void exit(int status)
        void load(String libFilename)

java.lang.System:
        void arraycopy(Object a, int start, Object b, int start, int len)
        void identityHashCode(Object o)

------------------------------------------
Callouts from VM to us (stuff we provide):
------------------------------------------
        java.lang.Class.Class(String name, Class superclass, gnu.vm.VMData d) # use
for FindClass, forName, etc.
        java.lang.Class.Class.data                                            # use
for internal stuff, if desired
        java.lang.reflect.Constructor.Constructor(gnu.vm.VMData data)         # use
for ToReflectedMethod
        java.lang.reflect.Method.Method(gnu.vm.VMData data)                   # use
for ToReflectedMethod
        java.lang.reflect.Field.Field(gnu.vm.VMData data)                     # use
for ToReflectedField
        java.lang.reflect.Constructor.data                                    # use
for FromReflectedMethod
        java.lang.reflect.Method.data                                         # use
for FromReflectedMethod
        java.lang.reflect.Field.data                                          # use
for FromReflectedMethod


The main goal of these methods is to absolutely minimize the dependence
between classpath and the VM, thus making both their job and ours easier.

--John Keiser

Reply via email to