diff options
author | Joe Onorato <joeo@google.com> | 2011-11-07 18:12:22 -0800 |
---|---|---|
committer | Joe Onorato <joeo@google.com> | 2011-11-07 18:12:22 -0800 |
commit | 44c620da02fd55f589b910863da892972f01ebc5 (patch) | |
tree | 7a2c06356caf1f54fdc9e0df8f0d56c8c88ef25f /tools/aidl | |
parent | ab26b50134e4936ab1dbf316bc5e00307df94ee0 (diff) | |
download | frameworks_base-44c620da02fd55f589b910863da892972f01ebc5.zip frameworks_base-44c620da02fd55f589b910863da892972f01ebc5.tar.gz frameworks_base-44c620da02fd55f589b910863da892972f01ebc5.tar.bz2 |
Support putting Flattenables in Lists.
Change-Id: I683ec1823286d7f2ac03683a1cdad6413d2445b1
Diffstat (limited to 'tools/aidl')
-rwxr-xr-x | tools/aidl/Type.cpp | 37 | ||||
-rwxr-xr-x | tools/aidl/Type.h | 2 |
2 files changed, 34 insertions, 5 deletions
diff --git a/tools/aidl/Type.cpp b/tools/aidl/Type.cpp index f73f523..e9fc905 100755 --- a/tools/aidl/Type.cpp +++ b/tools/aidl/Type.cpp @@ -212,6 +212,12 @@ Type::CreatorName() const } string +Type::RpcCreatorName() const +{ + return ""; +} + +string Type::InstantiableName() const { return QualifiedName(); @@ -911,6 +917,12 @@ UserDataType::CreatorName() const return QualifiedName() + ".CREATOR"; } +string +UserDataType::RpcCreatorName() const +{ + return QualifiedName() + ".RPC_CREATOR"; +} + void UserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) { @@ -1222,17 +1234,32 @@ void GenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, int flags) { - addTo->Add(new MethodCall(data, "putList", 2, k, v)); + Type* generic = GenericArgumentTypes()[0]; + if (generic == RPC_DATA_TYPE) { + addTo->Add(new MethodCall(data, "putRpcDataList", 2, k, v)); + } else if (generic->RpcCreatorName() != "") { + addTo->Add(new MethodCall(data, "putFlattenableList", 2, k, v)); + } else { + addTo->Add(new MethodCall(data, "putList", 2, k, v)); + } } void GenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data, Variable** cl) { - string classArg = GenericArgumentTypes()[0]->QualifiedName(); - classArg += ".class"; - addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k, - new LiteralExpression(classArg)))); + Type* generic = GenericArgumentTypes()[0]; + if (generic == RPC_DATA_TYPE) { + addTo->Add(new Assignment(v, new MethodCall(data, "getRpcDataList", 2, k))); + } else if (generic->RpcCreatorName() != "") { + addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenableList", 2, k, + new LiteralExpression(generic->RpcCreatorName())))); + } else { + string classArg = GenericArgumentTypes()[0]->QualifiedName(); + classArg += ".class"; + addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k, + new LiteralExpression(classArg)))); + } } diff --git a/tools/aidl/Type.h b/tools/aidl/Type.h index f2f3f21..ae12720 100755 --- a/tools/aidl/Type.h +++ b/tools/aidl/Type.h @@ -42,6 +42,7 @@ public: virtual string ImportType() const; virtual string CreatorName() const; + virtual string RpcCreatorName() const; virtual string InstantiableName() const; virtual void WriteToParcel(StatementBlock* addTo, Variable* v, @@ -358,6 +359,7 @@ public: const string& declFile = "", int declLine = -1); virtual string CreatorName() const; + virtual string RpcCreatorName() const; virtual void WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags); |