From 05ffbe7c020c59ee4fa7e13e04641c954d591951 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Fri, 2 Sep 2011 15:28:36 -0700 Subject: Add the full suite of RpcData types. --- tools/aidl/generate_java_rpc.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'tools/aidl/generate_java_rpc.cpp') diff --git a/tools/aidl/generate_java_rpc.cpp b/tools/aidl/generate_java_rpc.cpp index f7489b3..456a950 100644 --- a/tools/aidl/generate_java_rpc.cpp +++ b/tools/aidl/generate_java_rpc.cpp @@ -169,7 +169,7 @@ ServiceBaseClass::generate_process() this->processMethod->statements->Add(new VariableDeclaration(requestData, new NewExpression(RPC_DATA_TYPE, 1, requestParam))); - this->resultData = new Variable(RPC_DATA_TYPE, "response"); + this->resultData = new Variable(RPC_DATA_TYPE, "resultData"); this->processMethod->statements->Add(new VariableDeclaration(this->resultData, NULL_VALUE)); } @@ -299,6 +299,7 @@ ResultDispatcherClass::AddMethod(int index, const string& name, Method** method, Case* c = new Case(format_int(index)); c->statements->Add(new MethodCall(new LiteralExpression("this"), name, 1, this->resultParam)); + c->statements->Add(new Break()); this->methodSwitch->cases.push_back(c); } @@ -579,6 +580,7 @@ generate_service_base_methods(const method_type* method, ServiceBaseClass* servi } // the real call + bool first = true; Variable* _result = NULL; if (0 == strcmp(method->type.type.data, "void")) { block->Add(realCall); @@ -587,6 +589,13 @@ generate_service_base_methods(const method_type* method, ServiceBaseClass* servi decl->returnTypeDimension); block->Add(new VariableDeclaration(_result, realCall)); + // need the result RpcData + if (first) { + block->Add(new Assignment(serviceBaseClass->resultData, + new NewExpression(RPC_DATA_TYPE))); + first = false; + } + // marshall the return value generate_write_to_data(decl->returnType, block, new StringLiteralExpression("_result"), _result, serviceBaseClass->resultData); @@ -600,6 +609,14 @@ generate_service_base_methods(const method_type* method, ServiceBaseClass* servi Variable* v = stubArgs.Get(i++); if (convert_direction(arg->direction.data) & OUT_PARAMETER) { + // need the result RpcData + if (first) { + block->Add(new Assignment(serviceBaseClass->resultData, + new NewExpression(RPC_DATA_TYPE))); + first = false; + } + + generate_write_to_data(t, block, new StringLiteralExpression(arg->name.data), v, serviceBaseClass->resultData); } -- cgit v1.1