* 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:
idk%eng.sun.com
2000-10-06 08:19:53 +00:00
parent 85c42f0bbc
commit 9cd4f9d962
21 changed files with 776 additions and 111 deletions

View File

@@ -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

View File

@@ -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, &param, XPTType2bcXPType(param.GetType().TagPart()), i);
} else {
jobject object = env->GetObjectArrayElement(args,i);
r = MarshalElement(m, object, param.IsOut(), &param, XPTType2bcXPType(param.GetType().TagPart()), i);
}
jobject object = env->GetObjectArrayElement(args,i);
r = MarshalElement(m, object, param.IsOut(), &param, 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, &param, XPTType2bcXPType(type.TagPart()),allocator);
retV = value;
} else {
if (isOut) {
value = env->GetObjectArrayElement(args,i);
}
UnMarshalElement(&value, i, um, isOut, &param, XPTType2bcXPType(type.TagPart()),allocator);
env->SetObjectArrayElement(args,i,value);
}
UnMarshalElement(&value, i, um, isOut, &param, XPTType2bcXPType(type.TagPart()),allocator);
env->SetObjectArrayElement(args,i,value);
}
delete allocator;
return NS_OK;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}
/*