+ List<String> methPrmTypes, String method, String callbackType) {
+
+ checkAndWriteStructSetupJavaStub(methParams, methPrmTypes, intDecl, method);
+ println("int methodId = " + intDecl.getMethodNumId(method) + ";");
+ String retType = intDecl.getMethodType(method);
+ println("Class<?> retType = " + getSimpleType(getStructType(getEnumType(retType))) + ".class;");
+ checkAndWriteEnumTypeJavaStub(methParams, methPrmTypes);
+ // Generate array of parameter types
+ if (isStructPresent(methParams, methPrmTypes)) {
+ writeStructParamClassJavaStub(methParams, methPrmTypes, callbackType);
+ } else {
+ print("Class<?>[] paramCls = new Class<?>[] { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ String prmType = methPrmTypes.get(i);
+ if (checkCallbackType(prmType, callbackType)) { // Check if this has callback object
+ print("int.class");
+ } else { // Generate normal classes if it's not a callback object
+ String paramType = checkAndGetArray(methPrmTypes.get(i), methParams.get(i));
+ print(getSimpleType(getEnumType(paramType)) + ".class");
+ }
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
+ }
+ }
+ println(" };");
+ // Generate array of parameter objects
+ print("Object[] paramObj = new Object[] { ");
+ for (int i = 0; i < methParams.size(); i++) {
+ String paramType = methPrmTypes.get(i);
+ if (checkCallbackType(paramType, callbackType)) { // Check if this has callback object
+ //if (isArray(methPrmTypes.get(i), methParams.get(i)))
+ if (isArray(methParams.get(i)))
+ print(getSimpleIdentifier(methParams.get(i)) + ".length");
+ else if (isList(methPrmTypes.get(i)))
+ print(getSimpleIdentifier(methParams.get(i)) + ".size()");
+ else
+ print("new Integer(1)");
+ } else
+ print(getEnumParam(methPrmTypes.get(i), getSimpleIdentifier(methParams.get(i)), i));
+ // Check if this is the last element (don't print a comma)
+ if (i != methParams.size() - 1) {
+ print(", ");
+ }
+ }
+ println(" };");
+ }
+ // Check if this is "void"
+ if (retType.equals("void")) {
+ println("rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ } else { // We do have a return value
+ // Generate array of parameter types
+ if (isStructClass(getGenericType(getSimpleArrayType(retType)))) {
+ writeStructReturnJavaStub(getGenericType(getSimpleArrayType(retType)), retType);
+ } else {
+ // This is an enum type
+ if (getParamCategory(getGenericType(getSimpleArrayType(retType))) == ParamCategory.ENUM) {
+ println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ checkAndWriteEnumRetTypeJavaStub(retType);
+ } else if (getParamCategory(retType) == ParamCategory.NONPRIMITIVES) {
+ // Check if the return value NONPRIMITIVES
+ String retGenValType = getGenericType(retType);
+ println("Class<?> retGenValType = " + retGenValType + ".class;");
+ println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, retGenValType, paramCls, paramObj);");
+ println("return (" + retType + ")retObj;");
+ } else {
+ println("Object retObj = rmiCall.remoteCall(objectId, methodId, retType, null, paramCls, paramObj);");
+ println("return (" + retType + ")retObj;");
+ }
+ }
+ }
+ }
+
+
+ /*private void writeStdMethodBodyJavaStub(InterfaceDecl intDecl, List<String> methParams,