From 9cbc06758a3bfb041bf4edd80672e907b9de0e4a Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Thu, 23 Dec 2004 17:09:54 +0000 Subject: [PATCH] Bug 270889 - Various minor code and comment fixes. git-svn-id: svn://10.0.0.236/trunk@166985 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/extensions/java/xpcom/XPCOM.java | 3 +- .../java/xpcom/nsJavaInterfaces.cpp | 4 +- .../extensions/java/xpcom/nsJavaWrapper.cpp | 31 +++--- .../java/xpcom/nsJavaXPCOMBindingUtils.cpp | 94 +++++++++++-------- .../java/xpcom/nsJavaXPCOMBindingUtils.h | 8 +- .../extensions/java/xpcom/nsJavaXPTCStub.cpp | 1 - .../java/xpcom/nsJavaXPTCStubWeakRef.cpp | 2 +- .../java/xpcom/nsJavaXPTCStubWeakRef.h | 6 +- 8 files changed, 86 insertions(+), 63 deletions(-) diff --git a/mozilla/extensions/java/xpcom/XPCOM.java b/mozilla/extensions/java/xpcom/XPCOM.java index aeadef9aa38..7fdba861a90 100644 --- a/mozilla/extensions/java/xpcom/XPCOM.java +++ b/mozilla/extensions/java/xpcom/XPCOM.java @@ -71,7 +71,8 @@ public final class XPCOM { * */ public static native - nsIServiceManager initXPCOM(File aMozBinDirectory, AppFileLocProvider aAppFileLocProvider); + nsIServiceManager initXPCOM(File aMozBinDirectory, + AppFileLocProvider aAppFileLocProvider); /** * Shutdown XPCOM. You must call this method after you are finished diff --git a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp index 824d2447d9a..4f2a2b08539 100644 --- a/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaInterfaces.cpp @@ -89,7 +89,7 @@ GECKO_NATIVE(initEmbedding) (JNIEnv* env, jclass, jobject aMozBinDirectory, extern "C" JNIEXPORT void JNICALL GECKO_NATIVE(termEmbedding) (JNIEnv *env, jclass) { - nsresult rv = NS_TermEmbedding(); + nsresult rv = NS_TermEmbedding(); if (NS_FAILED(rv)) ThrowXPCOMException(env, rv, "NS_TermEmbedding failed"); @@ -166,7 +166,7 @@ XPCOM_NATIVE(shutdownXPCOM) (JNIEnv *env, jclass, jobject aServMgr) servMgr = do_QueryInterface(((JavaXPCOMInstance*) xpcomObj)->GetInstance()); } - nsresult rv = NS_ShutdownXPCOM(servMgr); + nsresult rv = NS_ShutdownXPCOM(servMgr); if (NS_FAILED(rv)) ThrowXPCOMException(env, rv, "NS_ShutdownXPCOM failed"); diff --git a/mozilla/extensions/java/xpcom/nsJavaWrapper.cpp b/mozilla/extensions/java/xpcom/nsJavaWrapper.cpp index 2d7aa148f1a..e7b934fc836 100644 --- a/mozilla/extensions/java/xpcom/nsJavaWrapper.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaWrapper.cpp @@ -412,7 +412,7 @@ SetupParams(JNIEnv *env, const jobject aParam, const nsXPTParamInfo &aParamInfo, } break; - // XXX How should this be handled? + // handle "void *" as an "int" in Java case nsXPTType::T_VOID: { if (env->IsInstanceOf(aParam, intClass)) @@ -469,7 +469,6 @@ FinalizeParams(JNIEnv *env, const jobject aParam, nsresult rv = NS_OK; const nsXPTType &type = aParamInfo.GetType(); - // XXX Not sure if this is necessary // Only write the array elements back if the parameter is an output param jint mode = 0; if (!aParamInfo.IsOut() && !aParamInfo.IsRetval()) @@ -609,9 +608,8 @@ FinalizeParams(JNIEnv *env, const jobject aParam, env->SetObjectArrayElement((jobjectArray) aParam, 0, str); } - // XXX Cannot delete this until we've handled all of the params. See - // comment in CallXPCOMMethod -// delete iid; + // Ordinarily, we would delete 'iid' here. But we cannot do that until + // we've handled all of the params. See comment in CallXPCOMMethod } break; @@ -888,21 +886,26 @@ CallXPCOMMethod(JNIEnv *env, jclass that, jobject aJavaObject, return; } - NS_ASSERTION(!IsXPTCStub(xpcomObj), "Expected JavaXPCOMInstance, but got nsJavaXPTCStub"); + NS_ASSERTION(!IsXPTCStub(xpcomObj), + "Expected JavaXPCOMInstance, but got nsJavaXPTCStub"); JavaXPCOMInstance* inst = (JavaXPCOMInstance*) xpcomObj; // Get method info const nsXPTMethodInfo* methodInfo; nsIInterfaceInfo* iinfo = inst->InterfaceInfo(); nsresult rv = iinfo->GetMethodInfo(aMethodIndex, &methodInfo); - NS_ASSERTION(NS_SUCCEEDED(rv), "GetMethodInfo failed"); - + if (NS_FAILED(rv)) { + ThrowXPCOMException(env, rv, "GetMethodInfo failed"); + return; + } + #ifdef DEBUG const char* ifaceName; iinfo->GetNameShared(&ifaceName); LOG(("=> Calling %s::%s()\n", ifaceName, methodInfo->GetName())); #endif + // Convert the Java params PRUint8 paramCount = methodInfo->GetParamCount(); nsXPTCVariant* params = nsnull; if (paramCount) @@ -955,10 +958,12 @@ CallXPCOMMethod(JNIEnv *env, jclass that, jobject aJavaObject, } } + // Call the XPCOM method nsresult invokeResult; invokeResult = XPTC_InvokeByIndex(inst->GetInstance(), aMethodIndex, paramCount, params); + // Clean up params for (PRUint8 i = 0; i < paramCount && NS_SUCCEEDED(rv); i++) { const nsXPTParamInfo ¶mInfo = methodInfo->GetParam(i); @@ -977,10 +982,10 @@ CallXPCOMMethod(JNIEnv *env, jclass that, jobject aJavaObject, return; } - // XXX Normally, we would delete any created nsID object in the above loop. - // However, GetIIDForMethodParam may need some of the nsID params when it's - // looking for the IID of an INTERFACE_IS. Therefore, we can't delete it - // until we've gone through the 'Finalize' loop once and created the result. + // Normally, we would delete any created nsID object in the above loop. + // However, GetIIDForMethodParam may need some of the nsID params when it's + // looking for the IID of an INTERFACE_IS. Therefore, we can't delete it + // until we've gone through the 'Finalize' loop once and created the result. for (PRUint8 j = 0; j < paramCount && NS_SUCCEEDED(rv); j++) { const nsXPTParamInfo ¶mInfo = methodInfo->GetParam(j); @@ -1007,7 +1012,6 @@ CallXPCOMMethod(JNIEnv *env, jclass that, jobject aJavaObject, return; } -// XXX Use org.mozilla.classfile.ClassFileWriter for stubs? jobject CreateJavaWrapper(JNIEnv* env, const char* aClassName) { @@ -1030,6 +1034,5 @@ CreateJavaWrapper(JNIEnv* env, const char* aClassName) } return java_stub; -// return env->NewGlobalRef(java_stub); } diff --git a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.cpp b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.cpp index f2b163107a2..59d97fa25f9 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.cpp @@ -266,35 +266,34 @@ InitializeJavaGlobals(JNIEnv *env) return PR_TRUE; jclass clazz; - if (!(clazz = env->FindClass("java/lang/Object")) || !(hashCodeMID = env->GetMethodID(clazz, "hashCode","()I"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Boolean")) || !(booleanValueMID = env->GetMethodID(clazz,"booleanValue","()Z"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Character")) || !(charValueMID = env->GetMethodID(clazz,"charValue","()C"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Byte")) || !(byteValueMID = env->GetMethodID(clazz,"byteValue","()B"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Short")) || !(shortValueMID = env->GetMethodID(clazz,"shortValue","()S"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Integer")) || @@ -303,49 +302,50 @@ InitializeJavaGlobals(JNIEnv *env) !(intArrayClass = (jclass) env->NewGlobalRef(clazz)) || !(intValueMID = env->GetMethodID(intClass,"intValue","()I"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Long")) || !(longValueMID = env->GetMethodID(clazz,"longValue","()J"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Float")) || !(floatValueMID = env->GetMethodID(clazz,"floatValue","()F"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/Double")) || !(doubleValueMID = env->GetMethodID(clazz,"doubleValue","()D"))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("java/lang/String")) || !(stringClass = (jclass) env->NewGlobalRef(clazz))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("org/mozilla/xpcom/nsISupports")) || !(nsISupportsClass = (jclass) env->NewGlobalRef(clazz))) { - return PR_FALSE; + goto init_error; } if (!(clazz = env->FindClass("org/mozilla/xpcom/XPCOMException")) || !(xpcomExceptionClass = (jclass) env->NewGlobalRef(clazz))) { - return PR_FALSE; + goto init_error; } #ifdef DEBUG if (!(clazz = env->FindClass("java/lang/Class")) || - !(getNameMID = env->GetMethodID(clazz, "getName","()Ljava/lang/String;"))) { - return PR_FALSE; + !(getNameMID = env->GetMethodID(clazz, "getName","()Ljava/lang/String;"))) + { + goto init_error; } #endif @@ -365,7 +365,7 @@ InitializeJavaGlobals(JNIEnv *env) gJAVAtoXPCOMBindings = PL_NewDHashTable(&java_to_xpcom_hash_ops, nsnull, sizeof(JavaXPCOMBindingEntry), 16); if (!gJAVAtoXPCOMBindings) { - return PR_FALSE; + goto init_error; } static PLDHashTableOps xpcom_to_java_hash_ops = @@ -384,12 +384,17 @@ InitializeJavaGlobals(JNIEnv *env) gXPCOMtoJAVABindings = PL_NewDHashTable(&xpcom_to_java_hash_ops, nsnull, sizeof(JavaXPCOMBindingEntry), 16); if (!gXPCOMtoJAVABindings) { - return PR_FALSE; + goto init_error; } gInitialized = PR_TRUE; - return PR_TRUE; + +init_error: + // If we encounter an error during initialization, then free any globals that + // were allocated, and return false. + FreeJavaGlobals(env); + return PR_FALSE; } /************************* @@ -398,17 +403,35 @@ InitializeJavaGlobals(JNIEnv *env) void FreeJavaGlobals(JNIEnv* env) { - if (!gInitialized) - return; + if (intClass) { + env->DeleteGlobalRef(intClass); + intClass = nsnull; + } + if (intArrayClass) { + env->DeleteGlobalRef(intArrayClass); + intArrayClass = nsnull; + } + if (stringClass) { + env->DeleteGlobalRef(stringClass); + stringClass = nsnull; + } + if (nsISupportsClass) { + env->DeleteGlobalRef(nsISupportsClass); + nsISupportsClass = nsnull; + } + if (xpcomExceptionClass) { + env->DeleteGlobalRef(xpcomExceptionClass); + xpcomExceptionClass = nsnull; + } - env->DeleteGlobalRef(intClass); - env->DeleteGlobalRef(intArrayClass); - env->DeleteGlobalRef(stringClass); - env->DeleteGlobalRef(nsISupportsClass); - env->DeleteGlobalRef(xpcomExceptionClass); - - PL_DHashTableDestroy(gJAVAtoXPCOMBindings); - PL_DHashTableDestroy(gXPCOMtoJAVABindings); + if (gJAVAtoXPCOMBindings) { + PL_DHashTableDestroy(gJAVAtoXPCOMBindings); + gJAVAtoXPCOMBindings = nsnull; + } + if (gXPCOMtoJAVABindings) { + PL_DHashTableDestroy(gXPCOMtoJAVABindings); + gXPCOMtoJAVABindings = nsnull; + } gInitialized = PR_FALSE; } @@ -419,8 +442,8 @@ FreeJavaGlobals(JNIEnv* env) *********************************************************/ JavaXPCOMInstance::JavaXPCOMInstance(nsISupports* aInstance, nsIInterfaceInfo* aIInfo) - : mInstance(aInstance), - mIInfo(aIInfo) + : mInstance(aInstance), + mIInfo(aIInfo) { NS_ADDREF(mInstance); } @@ -455,13 +478,10 @@ CreateJavaXPCOMInstance(nsISupports* aXPCOMObject, const nsIID* aIID) nsresult -GetIIDForMethodParam(nsIInterfaceInfo *iinfo, - const nsXPTMethodInfo *methodInfo, - const nsXPTParamInfo ¶mInfo, - PRUint16 methodIndex, - nsXPTCMiniVariant *dispatchParams, - PRBool isFullVariantArray, - nsID &result) +GetIIDForMethodParam(nsIInterfaceInfo *iinfo, const nsXPTMethodInfo *methodInfo, + const nsXPTParamInfo ¶mInfo, PRUint16 methodIndex, + nsXPTCMiniVariant *dispatchParams, + PRBool isFullVariantArray, nsID &result) { nsresult rv; diff --git a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h index e475f9bd869..32544c0c66f 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h +++ b/mozilla/extensions/java/xpcom/nsJavaXPCOMBindingUtils.h @@ -86,12 +86,12 @@ public: JavaXPCOMInstance(nsISupports* aInstance, nsIInterfaceInfo* aIInfo); ~JavaXPCOMInstance(); - nsISupports* GetInstance() { return mInstance; } - nsIInterfaceInfo* InterfaceInfo() { return mIInfo; } + nsISupports* GetInstance() { return mInstance; } + nsIInterfaceInfo* InterfaceInfo() { return mIInfo; } private: - nsISupports* mInstance; - nsCOMPtr mIInfo; + nsISupports* mInstance; + nsCOMPtr mIInfo; }; JavaXPCOMInstance* CreateJavaXPCOMInstance(nsISupports* aXPCOMObject, diff --git a/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp b/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp index 110c1dcbac7..68e2482c892 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp @@ -805,7 +805,6 @@ nsJavaXPTCStub::GetRetvalSig(const nsXPTParamInfo* aParamInfo, aRetvalSig.Append("Lorg/mozilla/xpcom/nsISupports;"); break; - // XXX Probably won't work for 64 bit addr case nsXPTType::T_VOID: aRetvalSig.Append("I"); break; diff --git a/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.cpp b/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.cpp index 22f279ad554..dd700cd6fbd 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.cpp @@ -56,7 +56,7 @@ nsJavaXPTCStubWeakRef::~nsJavaXPTCStubWeakRef() NS_IMPL_ADDREF(nsJavaXPTCStubWeakRef) NS_IMPL_RELEASE(nsJavaXPTCStubWeakRef) -NS_IMPL_THREADSAFE_QUERY_INTERFACE1(nsJavaXPTCStubWeakRef, nsIWeakReference) +NS_IMPL_QUERY_INTERFACE1(nsJavaXPTCStubWeakRef, nsIWeakReference) NS_IMETHODIMP nsJavaXPTCStubWeakRef::QueryReferent(const nsIID& aIID, void** aInstancePtr) diff --git a/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.h b/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.h index ad39f614202..28ebd4c1da6 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.h +++ b/mozilla/extensions/java/xpcom/nsJavaXPTCStubWeakRef.h @@ -45,9 +45,9 @@ class nsJavaXPTCStubWeakRef : public nsIWeakReference { public: - nsJavaXPTCStubWeakRef(JNIEnv* env, jobject aJavaObject); - virtual ~nsJavaXPTCStubWeakRef(); - NS_DECL_ISUPPORTS + nsJavaXPTCStubWeakRef(JNIEnv* env, jobject aJavaObject); + virtual ~nsJavaXPTCStubWeakRef(); + NS_DECL_ISUPPORTS NS_DECL_NSIWEAKREFERENCE protected: