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

