19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Type.h"
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3ea6d2197baff71a45f2bf95d3efbdef501cca76cDavid 'Digit' Turner#include <sys/types.h>
4ea6d2197baff71a45f2bf95d3efbdef501cca76cDavid 'Digit' Turner
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace NAMES;
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* VOID_TYPE;
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BOOLEAN_TYPE;
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BYTE_TYPE;
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_TYPE;
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* INT_TYPE;
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LONG_TYPE;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* FLOAT_TYPE;
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* DOUBLE_TYPE;
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* STRING_TYPE;
16fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* OBJECT_TYPE;
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_SEQUENCE_TYPE;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* TEXT_UTILS_TYPE;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* REMOTE_EXCEPTION_TYPE;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* RUNTIME_EXCEPTION_TYPE;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IBINDER_TYPE;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IINTERFACE_TYPE;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_NATIVE_TYPE;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_PROXY_TYPE;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCEL_TYPE;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCELABLE_INTERFACE_TYPE;
27fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* CONTEXT_TYPE;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* MAP_TYPE;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LIST_TYPE;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CLASSLOADER_TYPE;
31fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_DATA_TYPE;
32fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_ERROR_TYPE;
33e24dbeafe64278408b3342fcb77756bc7d091791Joe OnoratoType* EVENT_FAKE_TYPE;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* NULL_VALUE;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* THIS_VALUE;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* SUPER_VALUE;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* TRUE_VALUE;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* FALSE_VALUE;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectregister_base_types()
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    VOID_TYPE = new BasicType("void",
4505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX",
4605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX");
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(VOID_TYPE);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BOOLEAN_TYPE = new BooleanType();
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BOOLEAN_TYPE);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    BYTE_TYPE = new BasicType("byte",
5305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray",
5405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putByte", "getByte", "putByteArray", "createByteArray", "getByteArray");
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BYTE_TYPE);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_TYPE = new CharType();
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_TYPE);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    INT_TYPE = new BasicType("int",
6105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray",
6205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray");
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(INT_TYPE);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    LONG_TYPE = new BasicType("long",
6605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray",
6705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putLong", "getLong", "putLongArray", "createLongArray", "getLongArray");
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LONG_TYPE);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    FLOAT_TYPE = new BasicType("float",
7105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray",
7205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray");
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(FLOAT_TYPE);
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    DOUBLE_TYPE = new BasicType("double",
7605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray",
7705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray");
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(DOUBLE_TYPE);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    STRING_TYPE = new StringType();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(STRING_TYPE);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
837db766c3fec2795b08d237f29b972f474983684bJoe Onorato    OBJECT_TYPE = new Type("java.lang", "Object", Type::BUILT_IN, false, false, false);
84fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(OBJECT_TYPE);
85fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_SEQUENCE_TYPE = new CharSequenceType();
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_SEQUENCE_TYPE);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MAP_TYPE = new MapType();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(MAP_TYPE);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LIST_TYPE = new ListType();
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LIST_TYPE);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
957db766c3fec2795b08d237f29b972f474983684bJoe Onorato    TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false, false);
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(TEXT_UTILS_TYPE);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    REMOTE_EXCEPTION_TYPE = new RemoteExceptionType();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(REMOTE_EXCEPTION_TYPE);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType();
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(RUNTIME_EXCEPTION_TYPE);
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IBINDER_TYPE = new IBinderType();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IBINDER_TYPE);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IINTERFACE_TYPE = new IInterfaceType();
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IINTERFACE_TYPE);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_NATIVE_TYPE = new BinderType();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_NATIVE_TYPE);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_PROXY_TYPE = new BinderProxyType();
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_PROXY_TYPE);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCEL_TYPE = new ParcelType();
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCEL_TYPE);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType();
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCELABLE_INTERFACE_TYPE);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1227db766c3fec2795b08d237f29b972f474983684bJoe Onorato    CONTEXT_TYPE = new Type("android.content", "Context", Type::BUILT_IN, false, false, false);
123fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(CONTEXT_TYPE);
124fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
1251eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    RPC_DATA_TYPE = new RpcDataType();
126fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_DATA_TYPE);
127fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
12817a452f00c188173f48d0d490d98750cbb4529caMike Lockwood    RPC_ERROR_TYPE = new UserDataType("android.support.place.rpc", "RpcError",
129fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    true, __FILE__, __LINE__);
130fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_ERROR_TYPE);
131fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
132e24dbeafe64278408b3342fcb77756bc7d091791Joe Onorato    EVENT_FAKE_TYPE = new Type("event", Type::BUILT_IN, false, false, false);
133e24dbeafe64278408b3342fcb77756bc7d091791Joe Onorato    NAMES.Add(EVENT_FAKE_TYPE);
134fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CLASSLOADER_TYPE = new ClassLoaderType();
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CLASSLOADER_TYPE);
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NULL_VALUE = new LiteralExpression("null");
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    THIS_VALUE = new LiteralExpression("this");
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SUPER_VALUE = new LiteralExpression("super");
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    TRUE_VALUE = new LiteralExpression("true");
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    FALSE_VALUE = new LiteralExpression("false");
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "List", 1);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "Map", 2);
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic Type*
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmake_generic_type(const string& package, const string& name,
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    const vector<Type*>& args)
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package == "java.util" && name == "List") {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new GenericListType("java.util", "List", args);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //return new GenericType(package, name, args);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1617db766c3fec2795b08d237f29b972f474983684bJoe OnoratoType::Type(const string& name, int kind, bool canWriteToParcel, bool canWriteToRpcData,
1627db766c3fec2795b08d237f29b972f474983684bJoe Onorato        bool canBeOut)
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(),
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(""),
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(-1),
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
1697db766c3fec2795b08d237f29b972f474983684bJoe Onorato     m_canWriteToRpcData(canWriteToRpcData),
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = name;
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& package, const string& name,
1767db766c3fec2795b08d237f29b972f474983684bJoe Onorato            int kind, bool canWriteToParcel, bool canWriteToRpcData,
1777db766c3fec2795b08d237f29b972f474983684bJoe Onorato            bool canBeOut, const string& declFile, int declLine)
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(package),
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(declFile),
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(declLine),
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
1847db766c3fec2795b08d237f29b972f474983684bJoe Onorato     m_canWriteToRpcData(canWriteToRpcData),
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package.length() > 0) {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName = package;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName += '.';
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName += name;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::~Type()
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CanBeArray() const
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return false;
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::ImportType() const
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_qualifiedName;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreatorName() const
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "";
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
21779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe OnoratoType::RpcCreatorName() const
21879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato{
21979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    return "";
22079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato}
22179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato
22279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onoratostring
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::InstantiableName() const
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName();
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn",
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteToParcel error "
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
239b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateFromParcel error "
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
248b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadFromParcel error "
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteArrayToParcel error "
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
267b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error "
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
276b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error "
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
285fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
286fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
287fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
28805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
289fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
290fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* WriteToRpcData error "
291fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
292fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
293fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
294fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
295fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
296fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable** cl)
297fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
29805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
299fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
300fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* ReadFromRpcData error "
301fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
302fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
303fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
304fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::SetQualifiedName(const string& qualified)
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = qualified;
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression*
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::BuildWriteToParcelFlags(int flags)
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (flags == 0) {
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new LiteralExpression("0");
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) {
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new FieldVariable(PARCELABLE_INTERFACE_TYPE,
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "PARCELABLE_WRITE_RETURN_VALUE");
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new LiteralExpression("0");
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32505ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::BasicType(const string& name, const string& marshallParcel,
32605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& unmarshallParcel, const string& writeArrayParcel,
32705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& createArrayParcel, const string& readArrayParcel,
32805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& marshallRpc, const string& unmarshallRpc,
32905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
3307db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(name, BUILT_IN, true, true, false),
33105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallParcel(marshallParcel),
33205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallParcel(unmarshallParcel),
33305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayParcel(writeArrayParcel),
33405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayParcel(createArrayParcel),
33505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayParcel(readArrayParcel),
33605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallRpc(marshallRpc),
33705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallRpc(unmarshallRpc),
33805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayRpc(writeArrayRpc),
33905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayRpc(createArrayRpc),
34005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayRpc(readArrayRpc)
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
34705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_marshallParcel, 1, v));
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
351b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
35305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallParcel)));
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CanBeArray() const
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
36505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_writeArrayParcel, 1, v));
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
370b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayParcel)));
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
376b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v));
37905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
38005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
38105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
38205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
38305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
38405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
38505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v));
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
38805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
38905ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
39005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
39105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
39205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k)));
39305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::BooleanType()
3987db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("boolean", BUILT_IN, true, true, false)
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(v, new LiteralExpression("1"),
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new LiteralExpression("0"))));
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
411b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"),
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "!=", new MethodCall(parcel, "readInt"))));
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CanBeArray() const
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v));
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
431b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray")));
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
437b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v));
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
44205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
44305ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
44405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
44505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
44605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putBoolean", 2, k, v));
44705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
44805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
44905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
45005ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
45105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
45205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
45305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k)));
45405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CharType()
4597db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("char", BUILT_IN, true, true, false)
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Cast(INT_TYPE, v)));
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
471b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this));
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CanBeArray() const
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v));
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
490b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray")));
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
496b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readCharArray", 1, v));
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
50105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
50205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
50305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
50405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
50505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putChar", 2, k, v));
50605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
50705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
50805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
50905ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
51005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
51105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
51205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k)));
51305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
51405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::StringType()
5187db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "String", BUILT_IN, true, true, false)
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreatorName() const
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeString", 1, v));
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
535b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readString")));
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CanBeArray() const
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v));
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
554b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray")));
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
560b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readStringArray", 1, v));
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
565fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
566fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
567fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
568fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
569fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new MethodCall(data, "putString", 2, k, v));
570fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
571fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
572fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
573fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
574fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, Variable**)
575fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
576fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k)));
577fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
578fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CharSequenceType()
5827db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "CharSequence", BUILT_IN, true, true, false)
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreatorName() const
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel",
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                3, v, parcel, BuildWriteToParcelFlags(flags)));
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v,
617b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                Variable* parcel, Variable**)
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = TextUtils.createFromParcel(parcel)
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(TEXT_UTILS_TYPE,
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel)));
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::RemoteExceptionType()
6427db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "RemoteException", BUILT_IN, false, false, false)
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
653b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::RuntimeExceptionType()
6617db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "RuntimeException", BUILT_IN, false, false, false)
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
672b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::IBinderType()
6817db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IBinder", BUILT_IN, true, false, false)
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v));
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
692b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder")));
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v));
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
705b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray")));
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
711b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v));
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::IInterfaceType()
7207db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IInterface", BUILT_IN, false, false, false)
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
731b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::BinderType()
7407db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Binder", BUILT_IN, false, false, false)
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v,
752b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::BinderProxyType()
7617db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "BinderProxy", BUILT_IN, false, false, false)
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v,
773b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::ParcelType()
7827db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcel", BUILT_IN, false, false, false)
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
793b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::ParcelableInterfaceType()
8017db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcelable", BUILT_IN, false, false, false)
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
812b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::MapType()
8207db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "Map", BUILT_IN, true, false, true)
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeMap", 1, v));
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
830b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughesstatic void EnsureClassLoader(StatementBlock* addTo, Variable** cl)
831b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes{
832b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // We don't want to look up the class loader once for every
833b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // collection argument, so ensure we do it at most once per method.
834b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    if (*cl == NULL) {
835b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        *cl = new Variable(CLASSLOADER_TYPE, "cl");
836b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        addTo->Add(new VariableDeclaration(*cl,
837b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                new LiteralExpression("this.getClass().getClassLoader()"),
838b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                CLASSLOADER_TYPE));
839b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    }
840b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes}
841b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
843b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesMapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
845b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
846b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl)));
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
85005ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoMapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
852b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
853b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl));
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ListType()
8607db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "List", BUILT_IN, true, true, true)
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::InstantiableName() const
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList";
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeList", 1, v));
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
877b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
879b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
880b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl)));
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
885b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable** cl)
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
887b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
888b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
89105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
89205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
89305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
89405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
89505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
89605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
89705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
89805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
89905ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
90005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
90105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
90205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k)));
90305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
907a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::UserDataType(const string& package, const string& name,
908a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato                        bool builtIn, bool canWriteToParcel, bool canWriteToRpcData,
909a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato                        const string& declFile, int declLine)
910a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato    :Type(package, name, builtIn ? BUILT_IN : USERDATA, canWriteToParcel, canWriteToRpcData,
911a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato            true, declFile, declLine)
9126c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato{
9136c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato}
9146c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
916a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreatorName() const
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName() + ".CREATOR";
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
92179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onoratostring
92279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe OnoratoUserDataType::RpcCreatorName() const
92379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato{
92479824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    return QualifiedName() + ".RPC_CREATOR";
92579824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato}
92679824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
928a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2,
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                parcel, BuildWriteToParcelFlags(flags)));
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
951a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = CLASS.CREATOR.createFromParcel(parcel)
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel)));
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
972a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::ReadFromParcel(StatementBlock* addTo, Variable* v,
973b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable**)
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // TODO: really, we don't need to have this extra check, but we
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // don't have two separate marshalling code paths
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.readFromParcel(parcel)
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel));
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
988a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CanBeArray() const
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
994a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v,
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                BuildWriteToParcelFlags(flags)));
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1001a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
1002b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel,
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "createTypedArray", 1, new LiteralExpression(creator))));
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1010a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readTypedArray", 2,
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    v, new LiteralExpression(creator)));
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10177db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
1018a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10197db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, int flags)
10207db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
1021c3a7bb6563288373b4b6531ab5c8abfc3d048a77Joe Onorato    // data.putFlattenable(k, v);
1022c3a7bb6563288373b4b6531ab5c8abfc3d048a77Joe Onorato    addTo->Add(new MethodCall(data, "putFlattenable", 2, k, v));
10237db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10247db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10257db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
1026a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10277db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, Variable** cl)
10287db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
1029c3a7bb6563288373b4b6531ab5c8abfc3d048a77Joe Onorato    // data.getFlattenable(k, CLASS.RPC_CREATOR);
1030c3a7bb6563288373b4b6531ab5c8abfc3d048a77Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenable", 2, k,
1031c3a7bb6563288373b4b6531ab5c8abfc3d048a77Joe Onorato                new FieldVariable(v->type, "RPC_CREATOR"))));
10327db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10337db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::InterfaceType(const string& package, const string& name,
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, bool oneway,
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        const string& declFile, int declLine)
10397db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, false,
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        declFile, declLine)
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ,m_oneway(oneway)
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::OneWay() const
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_oneway;
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // parcel.writeStrongBinder(v != null ? v.asBinder() : null);
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1,
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Comparison(v, "!=", NULL_VALUE),
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(v, "asBinder"),
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    NULL_VALUE)));
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1063b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // v = Interface.asInterface(parcel.readStrongBinder());
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string type = v->type->QualifiedName();
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    type += ".Stub";
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v,
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall( NAMES.Find(type), "asInterface", 1,
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(parcel, "readStrongBinder"))));
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericType(const string& package, const string& name,
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
10787db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, BUILT_IN, true, true, true)
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_args = args;
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_importName = package + '.' + name;
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string gen = "<";
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = args.size();
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = args[i];
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gen += t->QualifiedName();
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (i != N-1) {
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            gen += ',';
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    gen += '>';
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_genericArguments = gen;
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SetQualifiedName(m_importName + gen);
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
109805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratoconst vector<Type*>&
109905ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericType::GenericArgumentTypes() const
110005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
110105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    return m_args;
110205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
110305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericArguments() const
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_genericArguments;
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ImportType() const
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_importName;
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::WriteToParcel\n");
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1123b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::CreateFromParcel\n");
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1130b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::ReadFromParcel\n");
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::GenericListType(const string& package, const string& name,
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :GenericType(package, name, args),
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_creator(args[0]->CreatorName())
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::CreatorName() const
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.arrayListCreator";
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::InstantiableName() const
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList" + GenericArguments();
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeStringList", 1, v));
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v));
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // parcel.writeTypedListXX(arg);
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v));
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1171b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createStringArrayList", 0)));
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createBinderArrayList", 0)));
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedArrayList(XXX.creator);
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createTypedArrayList", 1,
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new LiteralExpression(m_creator))));
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1189b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readStringList", 1, v));
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readBinderList", 1, v));
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedList(v, XXX.creator);
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readTypedList", 2,
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       v,
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       new LiteralExpression(m_creator)));
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
120305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
120405ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
120505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
120605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
120779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    Type* generic = GenericArgumentTypes()[0];
120879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    if (generic == RPC_DATA_TYPE) {
120979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putRpcDataList", 2, k, v));
121079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else if (generic->RpcCreatorName() != "") {
121179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putFlattenableList", 2, k, v));
121279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else {
121379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putList", 2, k, v));
121479824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    }
121505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
121605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
121705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
121805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
121905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, Variable** cl)
122005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
122179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    Type* generic = GenericArgumentTypes()[0];
122279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    if (generic == RPC_DATA_TYPE) {
122379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getRpcDataList", 2, k)));
122479824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else if (generic->RpcCreatorName() != "") {
122579824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenableList", 2, k,
122679824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato                        new LiteralExpression(generic->RpcCreatorName()))));
122779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else {
122879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        string classArg = GenericArgumentTypes()[0]->QualifiedName();
122979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        classArg += ".class";
123079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k,
123179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato                        new LiteralExpression(classArg))));
123279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    }
123305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
123405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
12351eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12361eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato// ================================================================
12371eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12381eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::RpcDataType()
123917a452f00c188173f48d0d490d98750cbb4529caMike Lockwood    :UserDataType("android.support.place.rpc", "RpcData", true, true, true)
12401eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12411eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12421eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12431eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12441eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
12451eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable* data, int flags)
12461eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12471eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new MethodCall(data, "putRpcData", 2, k, v));
12481eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12491eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12501eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12511eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
12521eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable** cl)
12531eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12541eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getRpcData", 1, k)));
12551eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12561eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12571eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectClassLoaderType::ClassLoaderType()
12617db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "ClassLoader", BUILT_IN, false, false, false)
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Namespace()
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::~Namespace()
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        delete m_types[i];
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Add(Type* type)
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* t = Find(type->QualifiedName());
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (t == NULL) {
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_types.push_back(type);
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::AddGenericType(const string& package, const string& name, int args)
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Generic g;
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.package = package;
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.name = name;
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.qualified = package + '.' + name;
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.args = args;
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_generics.push_back(g);
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const string& name) const
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->QualifiedName() == name) {
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const char* package, const char* name) const
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string s;
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package != NULL) {
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += package;
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += '.';
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    s += name;
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return Find(s);
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic string
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnormalize_generic(const string& s)
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string r;
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = s.size();
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char c = s[i];
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!isspace(c)) {
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            r += c;
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return r;
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Search(const string& name)
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // an exact match wins
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* result = Find(name);
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result != NULL) {
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // try the class names
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // our language doesn't allow you to not specify outer classes
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // when referencing an inner class.  that could be changed, and this
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // would be the place to do it, but I don't think the complexity in
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // scoping rules is worth it.
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13537c93839d7b41727c11925b034d4ec84491d3dee1Laurent Tu    for (int i=0; i<N; i++) {
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->Name() == name) {
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // we got to here and it's not a generic, give up
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (name.find('<') == name.npos) {
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // remove any whitespace
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string normalized = normalize_generic(name);
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // find the part before the '<', find a generic for it
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t baseIndex = normalized.find('<');
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string base(normalized.c_str(), baseIndex);
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const Generic* g = search_generic(base);
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g == NULL) {
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // For each of the args, do a recursive search on it.  We don't allow
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // generics within generics like Java does, because we're really limiting
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // them to just built-in container classes, at least for now.  Our syntax
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ensures this right now as well.
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    vector<Type*> args;
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t start = baseIndex + 1;
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t end = start;
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    while (normalized[start] != '\0') {
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        end = normalized.find(',', start);
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (end == normalized.npos) {
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            end = normalized.find('>', start);
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        string s(normalized.c_str()+start, end-start);
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = this->Search(s);
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (t == NULL) {
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // maybe we should print a warning here?
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NULL;
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.push_back(t);
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        start = end+1;
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // construct a GenericType, add it to our name set so they always get
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // the same object, and return it.
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    result = make_generic_type(g->package, g->name, args);
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result == NULL) {
14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    this->Add(result);
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return this->Find(result->QualifiedName());
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst Namespace::Generic*
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::search_generic(const string& name) const
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_generics.size();
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // first exact match
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.qualified == name) {
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // then name match
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.name == name) {
14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Dump() const
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int n = m_types.size();
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<n; i++) {
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = m_types[i];
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        printf("type: package=%s name=%s qualifiedName=%s\n",
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->Package().c_str(), t->Name().c_str(),
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->QualifiedName().c_str());
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1443