From c2b0605356382f99bfc66dcdf5aa470e389bfc61 Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 27 Sep 2006 15:17:44 +0000 Subject: [PATCH] Reorganize bindings methods. Also, properly check error conditions in those methods. Original committer: pedemont%us.ibm.com Original revision: 1.17 Original date: 2005/01/14 00:09:49 git-svn-id: svn://10.0.0.236/trunk@212620 18797224-902f-48f8-a5cc-f745e15eee43 --- .../java/xpcom/src/nsJavaXPCOMBindingUtils.h | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h b/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h index 30ce9868e29..667aed07cbe 100644 --- a/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h +++ b/mozilla/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h @@ -42,6 +42,7 @@ #include "xptcall.h" #include "nsCOMPtr.h" #include "nsString.h" +#include "pldhash.h" #ifdef DEBUG_pedemonte #define LOG(x) printf x @@ -71,6 +72,9 @@ extern jmethodID doubleValueMID; extern jmethodID getNameMID; #endif +class nsJavaXPCOMBindings; +extern nsJavaXPCOMBindings* gBindings; + PRBool InitializeJavaGlobals(JNIEnv *env); void FreeJavaGlobals(JNIEnv* env); @@ -111,12 +115,38 @@ nsresult CreateJavaXPCOMInstance(nsISupports* aXPCOMObject, const nsIID* aIID, /************************************** * Java<->XPCOM binding stores **************************************/ -void AddJavaXPCOMBinding(JNIEnv* env, jobject aJavaStub, - void* aXPCOMObject); -void RemoveJavaXPCOMBinding(JNIEnv* env, jobject aJavaObject, - void* aXPCOMObject); -void* GetMatchingXPCOMObject(JNIEnv* env, jobject aJavaObject); -jobject GetMatchingJavaObject(JNIEnv* env, void* aXPCOMObject); +// This class is used to store the associations between existing Java object +// and XPCOM objects. +class nsJavaXPCOMBindings +{ +public: + nsJavaXPCOMBindings() + : mJAVAtoXPCOMBindings(nsnull) + , mXPCOMtoJAVABindings(nsnull) + { } + ~nsJavaXPCOMBindings(); + + // Initializes internal structures. + NS_IMETHOD Init(); + + // Associates the given Java object with the given XPCOM object + NS_IMETHOD AddBinding(JNIEnv* env, jobject aJavaStub, void* aXPCOMObject); + + // Given either a Java object or XPCOM object, removes the association + // between the two. + NS_IMETHOD RemoveBinding(JNIEnv* env, jobject aJavaObject, void* aXPCOMObject); + + // Given a Java object, returns the associated XPCOM object. + void* GetXPCOMObject(JNIEnv* env, jobject aJavaObject); + + // Given an XPCOM object, returns the associated Java Object. + jobject GetJavaObject(JNIEnv* env, void* aXPCOMObject); + +private: + PLDHashTable* mJAVAtoXPCOMBindings; + PLDHashTable* mXPCOMtoJAVABindings; +}; + nsresult GetIIDForMethodParam(nsIInterfaceInfo *iinfo,