* NOT PART OF TBOX BUILD *
java uses general syntax for return values.
(idl: void test0([retval] out long l); will be
java: long test0(); intead of
java void test0(long[] l);
)
author=sdv@sparc.spb.su
git-svn-id: svn://10.0.0.236/trunk@80566 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -38,7 +38,7 @@ IS_COMPONENT = 1
|
||||
|
||||
EXPORTS = \
|
||||
bcJavaStubsAndProxies.h
|
||||
|
||||
|
||||
CPPSRCS = \
|
||||
bcJavaMarshalToolkit.cpp \
|
||||
bcJavaStub.cpp \
|
||||
@@ -48,8 +48,7 @@ CPPSRCS = \
|
||||
org_mozilla_xpcom_Utilities.cpp \
|
||||
$(NULL)
|
||||
|
||||
CXXFLAGS += -I$(JDKHOME)/include -I$(JDKHOME)/include/linux $(MOZ_TOOLKIT_REGISTRY_CFLAGS) -D_REENTRANT -DOJI_DISABLE -I$(CONNECT_SRC)/public
|
||||
|
||||
CXXFLAGS := -I$(JDKHOME)/include -I$(JDKHOME)/include/linux $(MOZ_TOOLKIT_REGISTRY_CFLAGS) -D_REENTRANT -DOJI_DISABLE -I$(CONNECT_SRC)/public $(CXXFLAGS)
|
||||
|
||||
DSO_LDOPTS += \
|
||||
-L$(JDKHOME)/jre/lib/$(HOSTTYPE)/ \
|
||||
@@ -63,19 +62,19 @@ DSO_LDOPTS += \
|
||||
# -L$(JDKHOME)/jre/bin/classic \
|
||||
# -ljvm \
|
||||
# $(NULL)
|
||||
|
||||
|
||||
ifneq ($(OS_ARCH), Linux)
|
||||
DSO_LDOPTS += \
|
||||
-lthread -lXm -lX11 -lXt -lm
|
||||
endif
|
||||
|
||||
|
||||
EXTRA_DSO_LDOPTS += \
|
||||
-L$(DIST)/bin/components/ \
|
||||
-lbcorb \
|
||||
$(NULL)
|
||||
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
CCC += $(CXXFLAGS) # I want to have $(JDKHOME)/include before $(DIST) include
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -119,6 +119,10 @@ private:
|
||||
nsCOMPtr<nsIAllocator> allocator;
|
||||
};
|
||||
|
||||
nsresult bcJavaMarshalToolkit::Marshal(bcIMarshaler *m, jobject retval) {
|
||||
retV = retval;
|
||||
return Marshal(m);
|
||||
}
|
||||
|
||||
nsresult bcJavaMarshalToolkit::Marshal(bcIMarshaler *m) {
|
||||
|
||||
@@ -129,14 +133,23 @@ nsresult bcJavaMarshalToolkit::Marshal(bcIMarshaler *m) {
|
||||
if ((callSide == onClient && !param.IsIn())
|
||||
|| (callSide == onServer && !param.IsOut())) {
|
||||
continue;
|
||||
} else if (param.IsRetval() && callSide == onServer) {
|
||||
r = MarshalElement(m, retV, PR_FALSE, ¶m, XPTType2bcXPType(param.GetType().TagPart()), i);
|
||||
} else {
|
||||
jobject object = env->GetObjectArrayElement(args,i);
|
||||
r = MarshalElement(m, object, param.IsOut(), ¶m, XPTType2bcXPType(param.GetType().TagPart()), i);
|
||||
}
|
||||
jobject object = env->GetObjectArrayElement(args,i);
|
||||
r = MarshalElement(m, object, param.IsOut(), ¶m, XPTType2bcXPType(param.GetType().TagPart()), i);
|
||||
}
|
||||
return r;
|
||||
|
||||
}
|
||||
|
||||
nsresult bcJavaMarshalToolkit::UnMarshal(bcIUnMarshaler *um, jobject *retval) {
|
||||
nsresult r = UnMarshal(um);
|
||||
*retval = retV;
|
||||
return r;
|
||||
}
|
||||
|
||||
nsresult bcJavaMarshalToolkit::UnMarshal(bcIUnMarshaler *um) {
|
||||
printf("--nsresult bcJavaMarshalToolkit::UnMarshal\n");
|
||||
bcIAllocator * allocator = new javaAllocator(nsAllocator::GetGlobalAllocator());
|
||||
@@ -146,6 +159,11 @@ nsresult bcJavaMarshalToolkit::UnMarshal(bcIUnMarshaler *um) {
|
||||
nsXPTParamInfo param = info->GetParam(i);
|
||||
PRBool isOut = param.IsOut();
|
||||
nsXPTType type = param.GetType();
|
||||
if (param.IsRetval() && callSide == onServer) {
|
||||
printf("** bcJavaMarshalToolkit::UnMarshal skipping retval\n");
|
||||
printf("**unmarshall: call side: %d\n", callSide);
|
||||
continue;
|
||||
}
|
||||
if ( (callSide == onServer && !param.IsIn()
|
||||
|| (callSide == onClient && !param.IsOut()))){
|
||||
if (callSide == onServer
|
||||
@@ -155,11 +173,16 @@ nsresult bcJavaMarshalToolkit::UnMarshal(bcIUnMarshaler *um) {
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (isOut) {
|
||||
value = env->GetObjectArrayElement(args,i);
|
||||
if (param.IsRetval()) {
|
||||
UnMarshalElement(&value, i, um, PR_FALSE, ¶m, XPTType2bcXPType(type.TagPart()),allocator);
|
||||
retV = value;
|
||||
} else {
|
||||
if (isOut) {
|
||||
value = env->GetObjectArrayElement(args,i);
|
||||
}
|
||||
UnMarshalElement(&value, i, um, isOut, ¶m, XPTType2bcXPType(type.TagPart()),allocator);
|
||||
env->SetObjectArrayElement(args,i,value);
|
||||
}
|
||||
UnMarshalElement(&value, i, um, isOut, ¶m, XPTType2bcXPType(type.TagPart()),allocator);
|
||||
env->SetObjectArrayElement(args,i,value);
|
||||
}
|
||||
delete allocator;
|
||||
return NS_OK;
|
||||
|
||||
@@ -38,9 +38,12 @@ public:
|
||||
JNIEnv *env, int isOnServer, bcIORB *orb) ;
|
||||
virtual ~bcJavaMarshalToolkit();
|
||||
nsresult Marshal(bcIMarshaler *);
|
||||
nsresult Marshal(bcIMarshaler *, jobject);
|
||||
nsresult UnMarshal(bcIUnMarshaler *);
|
||||
nsresult UnMarshal(bcIUnMarshaler *, jobject*);
|
||||
private:
|
||||
|
||||
jobject retV;
|
||||
|
||||
enum ArrayModifier { none, arrayElement, array};
|
||||
enum { unDefined, onServer, onClient } callSide;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* The contents of this file are subject to the Mozilla Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Sun Microsystems,
|
||||
* Inc. Portions created by Sun are
|
||||
* Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Igor Kushnirskiy <idk@eng.sun.com>
|
||||
*/
|
||||
|
||||
#ifndef __bcJavaProxy_h
|
||||
#define __bcJavaProxy_h
|
||||
#include "jni.h"
|
||||
#include "bcDefs.h"
|
||||
#include "bcIORB.h"
|
||||
|
||||
class bcJavaProxy {
|
||||
public:
|
||||
bcJavaProxy(bcOID oid, bcIID * iid, bcIORB *orb);
|
||||
virtual ~bcJavaProxy();
|
||||
jobject GetObject();
|
||||
private:
|
||||
bcIORB *orb;
|
||||
bcOID oid;
|
||||
bcIID iid;
|
||||
|
||||
};
|
||||
#endif
|
||||
@@ -74,15 +74,20 @@ void bcJavaStub::Dispatch(bcICall *call) {
|
||||
nsXPTMethodInfo* info;
|
||||
interfaceInfo->GetMethodInfo(mid,(const nsXPTMethodInfo **)&info);
|
||||
PRUint32 paramCount = info->GetParamCount();
|
||||
args = env->NewObjectArray(paramCount, objectClass,NULL);
|
||||
printf("\n**[c++]hasRetval: %d\n", HasRetval(paramCount, info));
|
||||
if (HasRetval(paramCount, info))
|
||||
// do not pass retval param
|
||||
paramCount--;
|
||||
args = env->NewObjectArray(paramCount, objectClass,NULL);
|
||||
bcJavaMarshalToolkit * mt = new bcJavaMarshalToolkit(mid, interfaceInfo, args, env,1, call->GetORB());
|
||||
bcIUnMarshaler * um = call->GetUnMarshaler();
|
||||
bcIUnMarshaler * um = call->GetUnMarshaler();
|
||||
mt->UnMarshal(um);
|
||||
jobject jiid = bcIIDJava::GetObject(&iid);
|
||||
bcJavaGlobal::GetJNIEnv()->CallStaticObjectMethod(utilitiesClass, callMethodByIndexMID, object, jiid, (jint)mid, args);
|
||||
jobject retval = bcJavaGlobal::GetJNIEnv()->CallStaticObjectMethod(utilitiesClass, callMethodByIndexMID, object, jiid, (jint)mid, args);
|
||||
//nb return value; excepion handling
|
||||
bcIMarshaler * m = call->GetMarshaler();
|
||||
mt->Marshal(m);
|
||||
bcIMarshaler * m = call->GetMarshaler();
|
||||
// mt->Marshal(m);
|
||||
mt->Marshal(m, retval);
|
||||
//nb memory deallocation
|
||||
delete m; delete um; delete mt;
|
||||
return;
|
||||
@@ -109,8 +114,12 @@ void bcJavaStub::Init() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PRBool bcJavaStub::HasRetval(PRUint32 paramCount, nsXPTMethodInfo *info)
|
||||
{
|
||||
for (unsigned int i = 0; i < paramCount; i++) {
|
||||
nsXPTParamInfo param = info->GetParam(i);
|
||||
if (param.IsRetval())
|
||||
return PR_TRUE;
|
||||
}
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define __bcJavaStub_h
|
||||
#include "bcIStub.h"
|
||||
#include "jni.h"
|
||||
#include "xptinfo.h"
|
||||
|
||||
class bcJavaStub : public bcIStub {
|
||||
public:
|
||||
@@ -36,6 +37,7 @@ private:
|
||||
static jclass utilitiesClass;
|
||||
static jmethodID callMethodByIndexMID;
|
||||
void Init();
|
||||
PRBool HasRetval(PRUint32 paramCount, nsXPTMethodInfo *info);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -66,9 +66,12 @@ JNIEXPORT jobject JNICALL Java_org_mozilla_xpcom_Utilities_callMethodByIndex
|
||||
mt->Marshal(m);
|
||||
orb->SendReceive(call);
|
||||
bcIUnMarshaler * um = call->GetUnMarshaler();
|
||||
mt->UnMarshal(um);
|
||||
// mt->UnMarshal(um);
|
||||
jobject retval;
|
||||
mt->UnMarshal(um, &retval);
|
||||
delete m; delete um; delete mt;
|
||||
return NULL;
|
||||
// return NULL;
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user