Backout xptcall because linux tboxes are stupid, I think.
git-svn-id: svn://10.0.0.236/trunk@215369 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1477,8 +1477,8 @@ JAVAPROXY_NATIVE(callXPCOMMethod) (JNIEnv *env, jclass that, jobject aJavaProxy,
|
||||
ThrowException(env, rv, "Failed to get real XPCOM object");
|
||||
return nsnull;
|
||||
}
|
||||
nsresult invokeResult = NS_InvokeByIndex(realObject, methodIndex,
|
||||
paramCount, params);
|
||||
nsresult invokeResult = XPTC_InvokeByIndex(realObject, methodIndex,
|
||||
paramCount, params);
|
||||
NS_RELEASE(realObject);
|
||||
|
||||
// Clean up params
|
||||
|
||||
@@ -881,7 +881,8 @@ GetNewOrUsedXPCOMObject(JNIEnv* env, jobject aJavaObject, const nsIID& aIID,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (stub) {
|
||||
// stub is already AddRef'd and QI'd
|
||||
*aResult = stub->GetStub();
|
||||
*aResult = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsXPTCStubBase*, stub));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -900,14 +901,10 @@ GetNewOrUsedXPCOMObject(JNIEnv* env, jobject aJavaObject, const nsIID& aIID,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Create XPCOM stub
|
||||
stub = new nsJavaXPTCStub(aJavaObject, iinfo, &rv);
|
||||
if (!stub)
|
||||
stub = new nsJavaXPTCStub(aJavaObject, iinfo);
|
||||
if (!stub) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
if (NS_FAILED(rv)) {
|
||||
delete stub;
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = gJavaToXPTCStubMap->Add(hash, stub);
|
||||
if (NS_FAILED(rv)) {
|
||||
delete stub;
|
||||
@@ -915,14 +912,14 @@ GetNewOrUsedXPCOMObject(JNIEnv* env, jobject aJavaObject, const nsIID& aIID,
|
||||
}
|
||||
|
||||
NS_ADDREF(stub);
|
||||
*aResult = stub->GetStub();
|
||||
*aResult = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsXPTCStubBase*, stub));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
GetIIDForMethodParam(nsIInterfaceInfo *iinfo,
|
||||
const XPTMethodDescriptor *methodInfo,
|
||||
GetIIDForMethodParam(nsIInterfaceInfo *iinfo, const nsXPTMethodInfo *methodInfo,
|
||||
const nsXPTParamInfo ¶mInfo, PRUint8 paramType,
|
||||
PRUint16 methodIndex, nsXPTCMiniVariant *dispatchParams,
|
||||
PRBool isFullVariantArray, nsID &result)
|
||||
@@ -943,7 +940,7 @@ GetIIDForMethodParam(nsIInterfaceInfo *iinfo,
|
||||
if (NS_FAILED(rv))
|
||||
break;
|
||||
|
||||
const nsXPTParamInfo& arg_param = methodInfo->params[argnum];
|
||||
const nsXPTParamInfo& arg_param = methodInfo->GetParam(argnum);
|
||||
const nsXPTType& arg_type = arg_param.GetType();
|
||||
|
||||
// The xpidl compiler ensures this. We reaffirm it for safety.
|
||||
|
||||
@@ -295,7 +295,7 @@ nsresult GetNewOrUsedXPCOMObject(JNIEnv* env, jobject aJavaObject,
|
||||
const nsIID& aIID, nsISupports** aResult);
|
||||
|
||||
nsresult GetIIDForMethodParam(nsIInterfaceInfo *iinfo,
|
||||
const XPTMethodDescriptor *methodInfo,
|
||||
const nsXPTMethodInfo *methodInfo,
|
||||
const nsXPTParamInfo ¶mInfo,
|
||||
PRUint8 paramType, PRUint16 methodIndex,
|
||||
nsXPTCMiniVariant *dispatchParams,
|
||||
|
||||
@@ -46,21 +46,12 @@
|
||||
#include "nsServiceManagerUtils.h"
|
||||
|
||||
|
||||
nsJavaXPTCStub::nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo,
|
||||
nsresult *rv)
|
||||
nsJavaXPTCStub::nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo)
|
||||
: mJavaStrongRef(nsnull)
|
||||
, mIInfo(aIInfo)
|
||||
, mMaster(nsnull)
|
||||
, mWeakRefCnt(0)
|
||||
{
|
||||
const nsIID *iid = nsnull;
|
||||
aIInfo->GetIIDShared(&iid);
|
||||
NS_ASSERTION(iid, "GetIIDShared must not fail!");
|
||||
|
||||
*rv = InitStub(*iid);
|
||||
if (NS_FAILED(*rv))
|
||||
return;
|
||||
|
||||
JNIEnv* env = GetJNIEnv();
|
||||
jobject weakref = env->NewObject(weakReferenceClass,
|
||||
weakReferenceConstructorMID, aJavaObject);
|
||||
@@ -69,10 +60,13 @@ nsJavaXPTCStub::nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo,
|
||||
aJavaObject);
|
||||
|
||||
#ifdef DEBUG_JAVAXPCOM
|
||||
nsIID* iid;
|
||||
mIInfo->GetInterfaceIID(&iid);
|
||||
char* iid_str = iid->ToString();
|
||||
LOG(("+ nsJavaXPTCStub (Java=%08x | XPCOM=%08x | IID=%s)\n",
|
||||
(PRUint32) mJavaRefHashCode, (PRUint32) this, iid_str));
|
||||
PR_Free(iid_str);
|
||||
nsMemory::Free(iid);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -242,7 +236,8 @@ nsJavaXPTCStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
|
||||
// always return the master stub for nsISupports
|
||||
if (aIID.Equals(NS_GET_IID(nsISupports)))
|
||||
{
|
||||
*aInstancePtr = master->mXPTCStub;
|
||||
*aInstancePtr = NS_STATIC_CAST(nsISupports*,
|
||||
NS_STATIC_CAST(nsXPTCStubBase*, master));
|
||||
NS_ADDREF(master);
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -259,7 +254,7 @@ nsJavaXPTCStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
|
||||
nsJavaXPTCStub *stub = master->FindStubSupportingIID(aIID);
|
||||
if (stub)
|
||||
{
|
||||
*aInstancePtr = stub->mXPTCStub;
|
||||
*aInstancePtr = stub;
|
||||
NS_ADDREF(stub);
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -314,15 +309,10 @@ nsJavaXPTCStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
stub = new nsJavaXPTCStub(obj, iinfo, &rv);
|
||||
stub = new nsJavaXPTCStub(obj, iinfo);
|
||||
if (!stub)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
delete stub;
|
||||
return rv;
|
||||
}
|
||||
|
||||
// add stub to the master's list of children, so we can preserve
|
||||
// symmetry in future QI calls. the master will delete each child
|
||||
// when it is destroyed. the refcount of each child is bound to
|
||||
@@ -347,7 +337,7 @@ nsJavaXPTCStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
|
||||
stub->mMaster = master;
|
||||
master->mChildren.AppendElement(stub);
|
||||
|
||||
*aInstancePtr = stub->mXPTCStub;
|
||||
*aInstancePtr = stub;
|
||||
NS_ADDREF(stub);
|
||||
return NS_OK;
|
||||
}
|
||||
@@ -388,15 +378,22 @@ nsJavaXPTCStub::FindStubSupportingIID(const nsID &iid)
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsJavaXPTCStub::GetInterfaceInfo(nsIInterfaceInfo **aInfo)
|
||||
{
|
||||
NS_ADDREF(*aInfo = mIInfo);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
const XPTMethodDescriptor *aMethodInfo,
|
||||
const nsXPTMethodInfo *aMethodInfo,
|
||||
nsXPTCMiniVariant *aParams)
|
||||
{
|
||||
#ifdef DEBUG_JAVAXPCOM
|
||||
const char* ifaceName;
|
||||
mIInfo->GetNameShared(&ifaceName);
|
||||
LOG(("---> (Java) %s::%s()\n", ifaceName, aMethodInfo->name));
|
||||
LOG(("---> (Java) %s::%s()\n", ifaceName, aMethodInfo->GetName()));
|
||||
#endif
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
@@ -406,7 +403,7 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
nsCAutoString methodSig("(");
|
||||
|
||||
// Create jvalue array to hold Java params
|
||||
PRUint8 paramCount = aMethodInfo->num_args;
|
||||
PRUint8 paramCount = aMethodInfo->GetParamCount();
|
||||
jvalue* java_params = nsnull;
|
||||
const nsXPTParamInfo* retvalInfo = nsnull;
|
||||
if (paramCount) {
|
||||
@@ -416,7 +413,7 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
|
||||
for (PRUint8 i = 0; i < paramCount && NS_SUCCEEDED(rv); i++)
|
||||
{
|
||||
const nsXPTParamInfo ¶mInfo = aMethodInfo->params[i];
|
||||
const nsXPTParamInfo ¶mInfo = aMethodInfo->GetParam(i);
|
||||
if (!paramInfo.IsRetval()) {
|
||||
rv = SetupJavaParams(paramInfo, aMethodInfo, aMethodIndex, aParams,
|
||||
aParams[i], java_params[i], methodSig);
|
||||
@@ -445,16 +442,15 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
jmethodID mid = nsnull;
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsCAutoString methodName;
|
||||
if (XPT_MD_IS_GETTER(aMethodInfo->flags) ||
|
||||
XPT_MD_IS_SETTER(aMethodInfo->flags)) {
|
||||
if (XPT_MD_IS_GETTER(aMethodInfo->flags))
|
||||
if (aMethodInfo->IsGetter() || aMethodInfo->IsSetter()) {
|
||||
if (aMethodInfo->IsGetter())
|
||||
methodName.AppendLiteral("get");
|
||||
else
|
||||
methodName.AppendLiteral("set");
|
||||
methodName.AppendASCII(aMethodInfo->name);
|
||||
methodName.AppendASCII(aMethodInfo->GetName());
|
||||
methodName.SetCharAt(toupper(methodName[3]), 3);
|
||||
} else {
|
||||
methodName.AppendASCII(aMethodInfo->name);
|
||||
methodName.AppendASCII(aMethodInfo->GetName());
|
||||
methodName.SetCharAt(tolower(methodName[0]), 0);
|
||||
}
|
||||
// If it's a Java keyword, then prepend an underscore
|
||||
@@ -562,7 +558,7 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
for (PRUint8 i = 0; i < paramCount; i++)
|
||||
{
|
||||
const nsXPTParamInfo ¶mInfo = aMethodInfo->params[i];
|
||||
const nsXPTParamInfo ¶mInfo = aMethodInfo->GetParam(i);
|
||||
if (paramInfo.IsIn() && !paramInfo.IsOut() && !paramInfo.IsDipper()) // 'in'
|
||||
continue;
|
||||
|
||||
@@ -590,7 +586,7 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
#endif
|
||||
env->ExceptionClear();
|
||||
|
||||
LOG(("<--- (Java) %s::%s()\n", ifaceName, aMethodInfo->name));
|
||||
LOG(("<--- (Java) %s::%s()\n", ifaceName, aMethodInfo->GetName()));
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -599,7 +595,7 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
|
||||
*/
|
||||
nsresult
|
||||
nsJavaXPTCStub::SetupJavaParams(const nsXPTParamInfo &aParamInfo,
|
||||
const XPTMethodDescriptor* aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsXPTCMiniVariant &aVariant, jvalue &aJValue,
|
||||
@@ -1063,7 +1059,7 @@ nsJavaXPTCStub::SetupJavaParams(const nsXPTParamInfo &aParamInfo,
|
||||
|
||||
nsresult
|
||||
nsJavaXPTCStub::GetRetvalSig(const nsXPTParamInfo* aParamInfo,
|
||||
const XPTMethodDescriptor* aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsACString &aRetvalSig)
|
||||
@@ -1173,7 +1169,7 @@ nsJavaXPTCStub::GetRetvalSig(const nsXPTParamInfo* aParamInfo,
|
||||
*/
|
||||
nsresult
|
||||
nsJavaXPTCStub::FinalizeJavaParams(const nsXPTParamInfo &aParamInfo,
|
||||
const XPTMethodDescriptor *aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsXPTCMiniVariant &aVariant, jvalue &aJValue)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#ifndef _nsJavaXPTCStub_h_
|
||||
#define _nsJavaXPTCStub_h_
|
||||
|
||||
#include "nsXPTCUtils.h"
|
||||
#include "xptcall.h"
|
||||
#include "jni.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "nsIInterfaceInfo.h"
|
||||
@@ -50,7 +50,7 @@
|
||||
#define NS_JAVAXPTCSTUB_IID \
|
||||
{0x88dd8130, 0xebe6, 0x4431, {0x9d, 0xa7, 0xe6, 0xb7, 0x54, 0x74, 0xfb, 0x21}}
|
||||
|
||||
class nsJavaXPTCStub : protected nsAutoXPTCStub,
|
||||
class nsJavaXPTCStub : public nsXPTCStubBase,
|
||||
public nsSupportsWeakReference
|
||||
{
|
||||
friend class nsJavaXPTCStubWeakRef;
|
||||
@@ -60,18 +60,19 @@ public:
|
||||
NS_DECL_NSISUPPORTSWEAKREFERENCE
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_JAVAXPTCSTUB_IID)
|
||||
|
||||
nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo,
|
||||
nsresult *rv);
|
||||
nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo);
|
||||
|
||||
virtual ~nsJavaXPTCStub();
|
||||
|
||||
// return a refcounted pointer to the InterfaceInfo for this object
|
||||
// NOTE: on some platforms this MUST not fail or we crash!
|
||||
NS_IMETHOD GetInterfaceInfo(nsIInterfaceInfo **aInfo);
|
||||
|
||||
// call this method and return result
|
||||
NS_IMETHOD CallMethod(PRUint16 aMethodIndex,
|
||||
const XPTMethodDescriptor *aInfo,
|
||||
const nsXPTMethodInfo *aInfo,
|
||||
nsXPTCMiniVariant *aParams);
|
||||
|
||||
nsISomeInterface* GetStub() { return mXPTCStub; }
|
||||
|
||||
// getter for mJavaObject
|
||||
jobject GetJavaObject();
|
||||
|
||||
@@ -100,18 +101,18 @@ private:
|
||||
PRBool SupportsIID(const nsID &aIID);
|
||||
|
||||
nsresult SetupJavaParams(const nsXPTParamInfo &aParamInfo,
|
||||
const XPTMethodDescriptor* aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsXPTCMiniVariant &aVariant,
|
||||
jvalue &aJValue, nsACString &aMethodSig);
|
||||
nsresult GetRetvalSig(const nsXPTParamInfo* aParamInfo,
|
||||
const XPTMethodDescriptor* aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsACString &aRetvalSig);
|
||||
nsresult FinalizeJavaParams(const nsXPTParamInfo &aParamInfo,
|
||||
const XPTMethodDescriptor* aMethodInfo,
|
||||
const nsXPTMethodInfo* aMethodInfo,
|
||||
PRUint16 aMethodIndex,
|
||||
nsXPTCMiniVariant* aDispatchParams,
|
||||
nsXPTCMiniVariant &aVariant,
|
||||
|
||||
Reference in New Issue
Block a user