Fix aidl to cope with multiple collection types per method.
Bug: http://code.google.com/p/android/issues/detail?id=18497
Change-Id: I152416022524d2860cb16b46c4812c5be6bdcbad
diff --git a/tools/aidl/generate_java.cpp b/tools/aidl/generate_java.cpp
index 0f18132..83e3bbc 100644
--- a/tools/aidl/generate_java.cpp
+++ b/tools/aidl/generate_java.cpp
@@ -286,25 +286,25 @@
static void
generate_create_from_parcel(Type* t, StatementBlock* addTo, Variable* v,
- Variable* parcel)
+ Variable* parcel, Variable** cl)
{
if (v->dimension == 0) {
- t->CreateFromParcel(addTo, v, parcel);
+ t->CreateFromParcel(addTo, v, parcel, cl);
}
if (v->dimension == 1) {
- t->CreateArrayFromParcel(addTo, v, parcel);
+ t->CreateArrayFromParcel(addTo, v, parcel, cl);
}
}
static void
generate_read_from_parcel(Type* t, StatementBlock* addTo, Variable* v,
- Variable* parcel)
+ Variable* parcel, Variable** cl)
{
if (v->dimension == 0) {
- t->ReadFromParcel(addTo, v, parcel);
+ t->ReadFromParcel(addTo, v, parcel, cl);
}
if (v->dimension == 1) {
- t->ReadArrayFromParcel(addTo, v, parcel);
+ t->ReadArrayFromParcel(addTo, v, parcel, cl);
}
}
@@ -362,6 +362,7 @@
"enforceInterface", 1, new LiteralExpression("DESCRIPTOR")));
// args
+ Variable* cl = NULL;
VariableFactory stubArgs("_arg");
arg = method->args;
while (arg != NULL) {
@@ -373,7 +374,7 @@
if (convert_direction(arg->direction.data) & IN_PARAMETER) {
generate_create_from_parcel(t, c->statements, v,
- stubClass->transact_data);
+ stubClass->transact_data, &cl);
} else {
if (arg->type.dimension == 0) {
c->statements->Add(new Assignment(
@@ -531,7 +532,7 @@
if (_reply != NULL) {
if (_result != NULL) {
generate_create_from_parcel(proxy->returnType,
- tryStatement->statements, _result, _reply);
+ tryStatement->statements, _result, _reply, &cl);
}
// the out/inout parameters
@@ -541,7 +542,7 @@
Variable* v = new Variable(t, arg->name.data, arg->type.dimension);
if (convert_direction(arg->direction.data) & OUT_PARAMETER) {
generate_read_from_parcel(t, tryStatement->statements,
- v, _reply);
+ v, _reply, &cl);
}
arg = arg->next;
}