Type.cpp revision 79824179b8ceb77d4ddb392a7c104e873d61ccc8
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Type.h"
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace NAMES;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* VOID_TYPE;
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BOOLEAN_TYPE;
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BYTE_TYPE;
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_TYPE;
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* INT_TYPE;
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LONG_TYPE;
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* FLOAT_TYPE;
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* DOUBLE_TYPE;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* STRING_TYPE;
14fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* OBJECT_TYPE;
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_SEQUENCE_TYPE;
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* TEXT_UTILS_TYPE;
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* REMOTE_EXCEPTION_TYPE;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* RUNTIME_EXCEPTION_TYPE;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IBINDER_TYPE;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IINTERFACE_TYPE;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_NATIVE_TYPE;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_PROXY_TYPE;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCEL_TYPE;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCELABLE_INTERFACE_TYPE;
25fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* CONTEXT_TYPE;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* MAP_TYPE;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LIST_TYPE;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CLASSLOADER_TYPE;
29fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_DATA_TYPE;
30fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_ERROR_TYPE;
31e24dbeafe64278408b3342fcb77756bc7d091791Joe OnoratoType* EVENT_FAKE_TYPE;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* NULL_VALUE;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* THIS_VALUE;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* SUPER_VALUE;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* TRUE_VALUE;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* FALSE_VALUE;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectregister_base_types()
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    VOID_TYPE = new BasicType("void",
4305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX",
4405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX");
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(VOID_TYPE);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BOOLEAN_TYPE = new BooleanType();
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BOOLEAN_TYPE);
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    BYTE_TYPE = new BasicType("byte",
5105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray",
5205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putByte", "getByte", "putByteArray", "createByteArray", "getByteArray");
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BYTE_TYPE);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_TYPE = new CharType();
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_TYPE);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    INT_TYPE = new BasicType("int",
5905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray",
6005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray");
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(INT_TYPE);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    LONG_TYPE = new BasicType("long",
6405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray",
6505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putLong", "getLong", "putLongArray", "createLongArray", "getLongArray");
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LONG_TYPE);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    FLOAT_TYPE = new BasicType("float",
6905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray",
7005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray");
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(FLOAT_TYPE);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    DOUBLE_TYPE = new BasicType("double",
7405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray",
7505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray");
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(DOUBLE_TYPE);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    STRING_TYPE = new StringType();
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(STRING_TYPE);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
817db766c3fec2795b08d237f29b972f474983684bJoe Onorato    OBJECT_TYPE = new Type("java.lang", "Object", Type::BUILT_IN, false, false, false);
82fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(OBJECT_TYPE);
83fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_SEQUENCE_TYPE = new CharSequenceType();
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_SEQUENCE_TYPE);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MAP_TYPE = new MapType();
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(MAP_TYPE);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LIST_TYPE = new ListType();
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LIST_TYPE);
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
937db766c3fec2795b08d237f29b972f474983684bJoe Onorato    TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false, false);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(TEXT_UTILS_TYPE);
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    REMOTE_EXCEPTION_TYPE = new RemoteExceptionType();
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(REMOTE_EXCEPTION_TYPE);
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType();
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(RUNTIME_EXCEPTION_TYPE);
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IBINDER_TYPE = new IBinderType();
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IBINDER_TYPE);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IINTERFACE_TYPE = new IInterfaceType();
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IINTERFACE_TYPE);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_NATIVE_TYPE = new BinderType();
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_NATIVE_TYPE);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_PROXY_TYPE = new BinderProxyType();
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_PROXY_TYPE);
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCEL_TYPE = new ParcelType();
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCEL_TYPE);
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType();
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCELABLE_INTERFACE_TYPE);
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1207db766c3fec2795b08d237f29b972f474983684bJoe Onorato    CONTEXT_TYPE = new Type("android.content", "Context", Type::BUILT_IN, false, false, false);
121fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(CONTEXT_TYPE);
122fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
1231eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    RPC_DATA_TYPE = new RpcDataType();
124fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_DATA_TYPE);
125fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
126a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato    RPC_ERROR_TYPE = new UserDataType("com.android.athome.rpc", "RpcError",
127fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    true, __FILE__, __LINE__);
128fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_ERROR_TYPE);
129fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
130e24dbeafe64278408b3342fcb77756bc7d091791Joe Onorato    EVENT_FAKE_TYPE = new Type("event", Type::BUILT_IN, false, false, false);
131e24dbeafe64278408b3342fcb77756bc7d091791Joe Onorato    NAMES.Add(EVENT_FAKE_TYPE);
132fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CLASSLOADER_TYPE = new ClassLoaderType();
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CLASSLOADER_TYPE);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NULL_VALUE = new LiteralExpression("null");
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    THIS_VALUE = new LiteralExpression("this");
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SUPER_VALUE = new LiteralExpression("super");
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    TRUE_VALUE = new LiteralExpression("true");
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    FALSE_VALUE = new LiteralExpression("false");
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "List", 1);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "Map", 2);
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic Type*
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmake_generic_type(const string& package, const string& name,
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    const vector<Type*>& args)
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package == "java.util" && name == "List") {
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new GenericListType("java.util", "List", args);
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //return new GenericType(package, name, args);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1597db766c3fec2795b08d237f29b972f474983684bJoe OnoratoType::Type(const string& name, int kind, bool canWriteToParcel, bool canWriteToRpcData,
1607db766c3fec2795b08d237f29b972f474983684bJoe Onorato        bool canBeOut)
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(),
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(""),
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(-1),
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
1677db766c3fec2795b08d237f29b972f474983684bJoe Onorato     m_canWriteToRpcData(canWriteToRpcData),
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = name;
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& package, const string& name,
1747db766c3fec2795b08d237f29b972f474983684bJoe Onorato            int kind, bool canWriteToParcel, bool canWriteToRpcData,
1757db766c3fec2795b08d237f29b972f474983684bJoe Onorato            bool canBeOut, const string& declFile, int declLine)
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(package),
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(declFile),
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(declLine),
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
1827db766c3fec2795b08d237f29b972f474983684bJoe Onorato     m_canWriteToRpcData(canWriteToRpcData),
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package.length() > 0) {
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName = package;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName += '.';
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName += name;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::~Type()
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CanBeArray() const
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return false;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::ImportType() const
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_qualifiedName;
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreatorName() const
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "";
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
21579824179b8ceb77d4ddb392a7c104e873d61ccc8Joe OnoratoType::RpcCreatorName() const
21679824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato{
21779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    return "";
21879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato}
21979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato
22079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onoratostring
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::InstantiableName() const
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName();
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn",
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteToParcel error "
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
237b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateFromParcel error "
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
246b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadFromParcel error "
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteArrayToParcel error "
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
265b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error "
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
274b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error "
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
283fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
284fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
285fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
28605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
287fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
288fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* WriteToRpcData error "
289fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
290fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
291fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
292fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
293fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
294fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable** cl)
295fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
29605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
297fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
298fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* ReadFromRpcData error "
299fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
300fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
301fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
302fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::SetQualifiedName(const string& qualified)
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = qualified;
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression*
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::BuildWriteToParcelFlags(int flags)
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (flags == 0) {
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new LiteralExpression("0");
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) {
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new FieldVariable(PARCELABLE_INTERFACE_TYPE,
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "PARCELABLE_WRITE_RETURN_VALUE");
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new LiteralExpression("0");
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
32305ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::BasicType(const string& name, const string& marshallParcel,
32405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& unmarshallParcel, const string& writeArrayParcel,
32505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& createArrayParcel, const string& readArrayParcel,
32605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& marshallRpc, const string& unmarshallRpc,
32705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
3287db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(name, BUILT_IN, true, true, false),
32905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallParcel(marshallParcel),
33005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallParcel(unmarshallParcel),
33105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayParcel(writeArrayParcel),
33205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayParcel(createArrayParcel),
33305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayParcel(readArrayParcel),
33405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallRpc(marshallRpc),
33505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallRpc(unmarshallRpc),
33605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayRpc(writeArrayRpc),
33705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayRpc(createArrayRpc),
33805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayRpc(readArrayRpc)
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
34505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_marshallParcel, 1, v));
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
349b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
35105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallParcel)));
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CanBeArray() const
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
36305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_writeArrayParcel, 1, v));
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
368b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayParcel)));
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
374b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v));
37705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
37805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
37905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
38005ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
38105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
38205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
38305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v));
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
38605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
38705ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
38805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
38905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
39005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k)));
39105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::BooleanType()
3967db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("boolean", BUILT_IN, true, true, false)
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(v, new LiteralExpression("1"),
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new LiteralExpression("0"))));
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
409b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"),
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "!=", new MethodCall(parcel, "readInt"))));
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CanBeArray() const
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v));
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
429b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray")));
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
435b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v));
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
44005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
44105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
44205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
44305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
44405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putBoolean", 2, k, v));
44505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
44605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
44705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
44805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
44905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
45005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
45105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k)));
45205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CharType()
4577db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("char", BUILT_IN, true, true, false)
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Cast(INT_TYPE, v)));
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
469b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this));
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CanBeArray() const
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v));
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
488b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray")));
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
494b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readCharArray", 1, v));
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
49905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
50005ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
50105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
50205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
50305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putChar", 2, k, v));
50405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
50505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
50605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
50705ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
50805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
50905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
51005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k)));
51105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
51205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::StringType()
5167db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "String", BUILT_IN, true, true, false)
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreatorName() const
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeString", 1, v));
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
533b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readString")));
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CanBeArray() const
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v));
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
552b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray")));
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
558b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readStringArray", 1, v));
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
563fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
564fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
565fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
566fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
567fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new MethodCall(data, "putString", 2, k, v));
568fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
569fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
570fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
571fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
572fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, Variable**)
573fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
574fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k)));
575fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
576fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CharSequenceType()
5807db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "CharSequence", BUILT_IN, true, true, false)
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreatorName() const
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel",
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                3, v, parcel, BuildWriteToParcelFlags(flags)));
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v,
615b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                Variable* parcel, Variable**)
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = TextUtils.createFromParcel(parcel)
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(TEXT_UTILS_TYPE,
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel)));
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::RemoteExceptionType()
6407db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "RemoteException", BUILT_IN, false, false, false)
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
651b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::RuntimeExceptionType()
6597db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "RuntimeException", BUILT_IN, false, false, false)
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
670b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::IBinderType()
6797db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IBinder", BUILT_IN, true, false, false)
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v));
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
690b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder")));
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v));
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
703b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray")));
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
709b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v));
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::IInterfaceType()
7187db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IInterface", BUILT_IN, false, false, false)
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
729b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::BinderType()
7387db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Binder", BUILT_IN, false, false, false)
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v,
750b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::BinderProxyType()
7597db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "BinderProxy", BUILT_IN, false, false, false)
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v,
771b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::ParcelType()
7807db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcel", BUILT_IN, false, false, false)
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
791b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::ParcelableInterfaceType()
7997db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcelable", BUILT_IN, false, false, false)
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
810b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::MapType()
8187db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "Map", BUILT_IN, true, false, true)
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeMap", 1, v));
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
828b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughesstatic void EnsureClassLoader(StatementBlock* addTo, Variable** cl)
829b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes{
830b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // We don't want to look up the class loader once for every
831b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // collection argument, so ensure we do it at most once per method.
832b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    if (*cl == NULL) {
833b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        *cl = new Variable(CLASSLOADER_TYPE, "cl");
834b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        addTo->Add(new VariableDeclaration(*cl,
835b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                new LiteralExpression("this.getClass().getClassLoader()"),
836b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                CLASSLOADER_TYPE));
837b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    }
838b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes}
839b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
841b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesMapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
843b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
844b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl)));
8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
84805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoMapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
850b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
851b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl));
8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ListType()
8587db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "List", BUILT_IN, true, true, true)
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::InstantiableName() const
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList";
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeList", 1, v));
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
875b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
877b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
878b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl)));
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
883b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable** cl)
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
885b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
886b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
88905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
89005ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
89105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
89205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
89305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
89405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
89505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
89605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
89705ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
89805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
89905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
90005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k)));
90105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
905a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::UserDataType(const string& package, const string& name,
906a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato                        bool builtIn, bool canWriteToParcel, bool canWriteToRpcData,
907a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato                        const string& declFile, int declLine)
908a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato    :Type(package, name, builtIn ? BUILT_IN : USERDATA, canWriteToParcel, canWriteToRpcData,
909a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato            true, declFile, declLine)
9106c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato{
9116c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato}
9126c0236c53a30ea9fef28ee7c95a4dce2fa5ce2e1Joe Onorato
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
914a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreatorName() const
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName() + ".CREATOR";
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
91979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onoratostring
92079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe OnoratoUserDataType::RpcCreatorName() const
92179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato{
92279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    return QualifiedName() + ".RPC_CREATOR";
92379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato}
92479824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
926a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2,
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                parcel, BuildWriteToParcelFlags(flags)));
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
949a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = CLASS.CREATOR.createFromParcel(parcel)
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel)));
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
970a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::ReadFromParcel(StatementBlock* addTo, Variable* v,
971b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable**)
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // TODO: really, we don't need to have this extra check, but we
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // don't have two separate marshalling code paths
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.readFromParcel(parcel)
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel));
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
986a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CanBeArray() const
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
992a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v,
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                BuildWriteToParcelFlags(flags)));
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
999a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
1000b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel,
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "createTypedArray", 1, new LiteralExpression(creator))));
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1008a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readTypedArray", 2,
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    v, new LiteralExpression(creator)));
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10157db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
1016a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10177db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, int flags)
10187db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10197db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // if (v != null) {
10207db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     RpcData _obj = new RpcData();
10217db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     v.writeToRpcData(_obj);
10227db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     data.putRpcData(k, obj);
10237db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // }
10247db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* ifpart = new IfStatement;
10257db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
10267db766c3fec2795b08d237f29b972f474983684bJoe Onorato    Variable* _obj = new Variable(RPC_DATA_TYPE, "_obj");
10277db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new VariableDeclaration(_obj, new NewExpression(RPC_DATA_TYPE)));
10287db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new MethodCall(v, "writeToRpcData", 1, _obj));
10297db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new MethodCall(data, "putRpcData", 2, k, _obj));
10307db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10317db766c3fec2795b08d237f29b972f474983684bJoe Onorato    addTo->Add(ifpart);
10327db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10337db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10347db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
1035a1c6d909c22e196ef62ddb065fc7821deda8a602Joe OnoratoUserDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10367db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, Variable** cl)
10377db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10386e0f981e864be5365b07a8cdc6f23e983d7f7352Joe Onorato    // RpcData _obj = data.getRpcData(k);
10397db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // if (_data_XX != null)
10406e0f981e864be5365b07a8cdc6f23e983d7f7352Joe Onorato    //     v = CLASS.RPC_CREATOR.createFromParcel(_obj)
10417db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // } else {
10427db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     v = null;
10437db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // }
10447db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10457db766c3fec2795b08d237f29b972f474983684bJoe Onorato    StatementBlock* block = new StatementBlock;
10467db766c3fec2795b08d237f29b972f474983684bJoe Onorato    addTo->Add(block);
10477db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10487db766c3fec2795b08d237f29b972f474983684bJoe Onorato    Variable* _obj = new Variable(RPC_DATA_TYPE, "_obj");
10497db766c3fec2795b08d237f29b972f474983684bJoe Onorato    block->Add(new VariableDeclaration(_obj, new MethodCall(data, "getRpcData", 1, k)));
10507db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10517db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* ifpart = new IfStatement();
10527db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->expression = new Comparison(_obj, "!=", NULL_VALUE);
10537db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new Assignment(v,
10546e0f981e864be5365b07a8cdc6f23e983d7f7352Joe Onorato                new MethodCall(v->type, "RPC_CREATOR.createFromRpcData", 1, _obj)));
10557db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10567db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* elsepart = new IfStatement();
10577db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->elseif = elsepart;
10587db766c3fec2795b08d237f29b972f474983684bJoe Onorato    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
10597db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10607db766c3fec2795b08d237f29b972f474983684bJoe Onorato    block->Add(ifpart);
10617db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10627db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::InterfaceType(const string& package, const string& name,
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, bool oneway,
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        const string& declFile, int declLine)
10687db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, false,
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        declFile, declLine)
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ,m_oneway(oneway)
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::OneWay() const
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_oneway;
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // parcel.writeStrongBinder(v != null ? v.asBinder() : null);
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1,
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Comparison(v, "!=", NULL_VALUE),
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(v, "asBinder"),
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    NULL_VALUE)));
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1092b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // v = Interface.asInterface(parcel.readStrongBinder());
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string type = v->type->QualifiedName();
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    type += ".Stub";
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v,
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall( NAMES.Find(type), "asInterface", 1,
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(parcel, "readStrongBinder"))));
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericType(const string& package, const string& name,
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11077db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, BUILT_IN, true, true, true)
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_args = args;
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_importName = package + '.' + name;
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string gen = "<";
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = args.size();
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = args[i];
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gen += t->QualifiedName();
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (i != N-1) {
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            gen += ',';
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    gen += '>';
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_genericArguments = gen;
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SetQualifiedName(m_importName + gen);
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
112705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratoconst vector<Type*>&
112805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericType::GenericArgumentTypes() const
112905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
113005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    return m_args;
113105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
113205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericArguments() const
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_genericArguments;
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ImportType() const
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_importName;
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::WriteToParcel\n");
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1152b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::CreateFromParcel\n");
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1159b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::ReadFromParcel\n");
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::GenericListType(const string& package, const string& name,
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :GenericType(package, name, args),
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_creator(args[0]->CreatorName())
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::CreatorName() const
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.arrayListCreator";
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::InstantiableName() const
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList" + GenericArguments();
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeStringList", 1, v));
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v));
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // parcel.writeTypedListXX(arg);
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v));
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1200b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createStringArrayList", 0)));
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createBinderArrayList", 0)));
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedArrayList(XXX.creator);
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createTypedArrayList", 1,
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new LiteralExpression(m_creator))));
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1218b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readStringList", 1, v));
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readBinderList", 1, v));
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedList(v, XXX.creator);
12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readTypedList", 2,
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       v,
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       new LiteralExpression(m_creator)));
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
123205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
123305ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
123405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
123505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
123679824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    Type* generic = GenericArgumentTypes()[0];
123779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    if (generic == RPC_DATA_TYPE) {
123879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putRpcDataList", 2, k, v));
123979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else if (generic->RpcCreatorName() != "") {
124079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putFlattenableList", 2, k, v));
124179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else {
124279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new MethodCall(data, "putList", 2, k, v));
124379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    }
124405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
124505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
124605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
124705ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
124805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, Variable** cl)
124905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
125079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    Type* generic = GenericArgumentTypes()[0];
125179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    if (generic == RPC_DATA_TYPE) {
125279824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getRpcDataList", 2, k)));
125379824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else if (generic->RpcCreatorName() != "") {
125479824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getFlattenableList", 2, k,
125579824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato                        new LiteralExpression(generic->RpcCreatorName()))));
125679824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    } else {
125779824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        string classArg = GenericArgumentTypes()[0]->QualifiedName();
125879824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        classArg += ".class";
125979824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato        addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k,
126079824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato                        new LiteralExpression(classArg))));
126179824179b8ceb77d4ddb392a7c104e873d61ccc8Joe Onorato    }
126205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
126305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
12641eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12651eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato// ================================================================
12661eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12671eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::RpcDataType()
1268a1c6d909c22e196ef62ddb065fc7821deda8a602Joe Onorato    :UserDataType("com.android.athome.rpc", "RpcData", true, true, true)
12691eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12701eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12711eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12721eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12731eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
12741eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable* data, int flags)
12751eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12761eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new MethodCall(data, "putRpcData", 2, k, v));
12771eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12781eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12791eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12801eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
12811eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable** cl)
12821eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12831eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getRpcData", 1, k)));
12841eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12851eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12861eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectClassLoaderType::ClassLoaderType()
12907db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "ClassLoader", BUILT_IN, false, false, false)
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Namespace()
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::~Namespace()
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        delete m_types[i];
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Add(Type* type)
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* t = Find(type->QualifiedName());
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (t == NULL) {
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_types.push_back(type);
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::AddGenericType(const string& package, const string& name, int args)
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Generic g;
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.package = package;
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.name = name;
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.qualified = package + '.' + name;
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.args = args;
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_generics.push_back(g);
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const string& name) const
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->QualifiedName() == name) {
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const char* package, const char* name) const
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string s;
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package != NULL) {
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += package;
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += '.';
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    s += name;
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return Find(s);
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic string
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnormalize_generic(const string& s)
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string r;
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = s.size();
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char c = s[i];
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!isspace(c)) {
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            r += c;
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return r;
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Search(const string& name)
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // an exact match wins
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* result = Find(name);
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result != NULL) {
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // try the class names
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // our language doesn't allow you to not specify outer classes
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // when referencing an inner class.  that could be changed, and this
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // would be the place to do it, but I don't think the complexity in
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // scoping rules is worth it.
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->Name() == name) {
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // we got to here and it's not a generic, give up
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (name.find('<') == name.npos) {
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // remove any whitespace
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string normalized = normalize_generic(name);
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // find the part before the '<', find a generic for it
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t baseIndex = normalized.find('<');
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string base(normalized.c_str(), baseIndex);
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const Generic* g = search_generic(base);
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g == NULL) {
14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // For each of the args, do a recursive search on it.  We don't allow
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // generics within generics like Java does, because we're really limiting
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // them to just built-in container classes, at least for now.  Our syntax
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ensures this right now as well.
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    vector<Type*> args;
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t start = baseIndex + 1;
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t end = start;
14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    while (normalized[start] != '\0') {
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        end = normalized.find(',', start);
14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (end == normalized.npos) {
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            end = normalized.find('>', start);
14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        string s(normalized.c_str()+start, end-start);
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = this->Search(s);
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (t == NULL) {
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // maybe we should print a warning here?
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NULL;
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.push_back(t);
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        start = end+1;
14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // construct a GenericType, add it to our name set so they always get
14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // the same object, and return it.
14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    result = make_generic_type(g->package, g->name, args);
14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result == NULL) {
14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    this->Add(result);
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return this->Find(result->QualifiedName());
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst Namespace::Generic*
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::search_generic(const string& name) const
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_generics.size();
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // first exact match
14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.qualified == name) {
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // then name match
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.name == name) {
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Dump() const
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int n = m_types.size();
14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<n; i++) {
14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = m_types[i];
14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        printf("type: package=%s name=%s qualifiedName=%s\n",
14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->Package().c_str(), t->Name().c_str(),
14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->QualifiedName().c_str());
14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1472