TODO ==== (By no means complete ...) Configuration ------------- -- *GET XPCTest WORKING*. For some reason, the JDK 1.2 JVM on Solaris won't load libxpcom.so correctly, even if it's on LD_LIBRARY_PATH. I have yet to confirm whether this is a problem on Linux or NT. [Done 13 Aug 1999] -- Make Java compilation work correctly on Unix/Linux. -- Better integration with Mozilla makefile/autoconf system. -- Move XPCOM startup code to test programs. -- Integrate into Java Plugin and test. -- File and function renaming, to prevent conflicts and increase modularity. Registration and Activation --------------------------- -- Insure JNI libraries load and unload, even within JNI plugin -- Derive proxy class from IID, and vice-versa -- Generate static proxies (using genproxy) -- Generate and load "on-the-fly" bytecode for proxy classes. Marshalling ----------- -- Verify nsID parameters are marshalled correctly. -- Unwrap proxies used as "in" parameters. -- Wrap "out" XPCOM objects in correct wrapper class. [dep: Proxy Generation] -- Build C++ stubs for Java-implemented XPCOM objects. [big task?] -- [Future] Allow mapping from native concrete type to Java types -- [Future] Efficient handling of attributes and 0- or 1-arg methods. -- [Future] Reflection API (if Java's is insufficient) NSRESULTs --------- -- Throw exceptions for error codes -- Design and implement "success code mechanism", for single-threaded case -- Store success codes per thread, and retrieve for current threads. API --- -- Write proxy for ns[I]ComponentManager, by hand. (For performance, and because of the overloaded methods and lack of XPT.) -- Write proxy for ns[I]ServiceManager, similar to above. -- Throw exceptions for unknown or missing proxy classes (and other errors). -- Implement XPCOM identity rules -- Document (including Javadoc) Memory Management ----------------- -- Insure that temporary heap memory (esp. strings and nsIDs) is recycled. -- Insure reference-counting rules aren't violated. -- Cache previously allocated wrapper objects, to prevent unnecessary allocation. -- Thread-safe object release