Type.cpp revision e24dbeafe64278408b3342fcb77756bc7d091791
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
126fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_ERROR_TYPE = new ParcelableType("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
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::InstantiableName() const
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName();
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn",
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteToParcel error "
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
231b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateFromParcel error "
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
240b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadFromParcel error "
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteArrayToParcel error "
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
259b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error "
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
268b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error "
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
277fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
278fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
279fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
28005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
281fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
282fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* WriteToRpcData error "
283fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
284fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
285fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
286fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
287fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
288fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable** cl)
289fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
29005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
291fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
292fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* ReadFromRpcData error "
293fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
294fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
295fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
296fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::SetQualifiedName(const string& qualified)
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = qualified;
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression*
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::BuildWriteToParcelFlags(int flags)
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (flags == 0) {
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new LiteralExpression("0");
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) {
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new FieldVariable(PARCELABLE_INTERFACE_TYPE,
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "PARCELABLE_WRITE_RETURN_VALUE");
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new LiteralExpression("0");
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31705ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::BasicType(const string& name, const string& marshallParcel,
31805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& unmarshallParcel, const string& writeArrayParcel,
31905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& createArrayParcel, const string& readArrayParcel,
32005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& marshallRpc, const string& unmarshallRpc,
32105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
3227db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(name, BUILT_IN, true, true, false),
32305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallParcel(marshallParcel),
32405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallParcel(unmarshallParcel),
32505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayParcel(writeArrayParcel),
32605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayParcel(createArrayParcel),
32705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayParcel(readArrayParcel),
32805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallRpc(marshallRpc),
32905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallRpc(unmarshallRpc),
33005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayRpc(writeArrayRpc),
33105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayRpc(createArrayRpc),
33205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayRpc(readArrayRpc)
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
33905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_marshallParcel, 1, v));
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
343b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
34505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallParcel)));
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CanBeArray() const
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
35705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_writeArrayParcel, 1, v));
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
362b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
36405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayParcel)));
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
368b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v));
37105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
37205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
37305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
37405ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
37505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
37605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
37705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v));
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
38005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
38105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
38205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
38305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
38405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k)));
38505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::BooleanType()
3907db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("boolean", BUILT_IN, true, true, false)
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(v, new LiteralExpression("1"),
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new LiteralExpression("0"))));
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
403b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"),
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "!=", new MethodCall(parcel, "readInt"))));
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CanBeArray() const
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v));
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
423b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray")));
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
429b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v));
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
43405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
43505ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
43605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
43705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
43805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putBoolean", 2, k, v));
43905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
44005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
44105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
44205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
44305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
44405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
44505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k)));
44605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CharType()
4517db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("char", BUILT_IN, true, true, false)
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Cast(INT_TYPE, v)));
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
463b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this));
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CanBeArray() const
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v));
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
482b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray")));
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
488b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readCharArray", 1, v));
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
49305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
49405ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
49505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
49605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
49705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putChar", 2, k, v));
49805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
49905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
50005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
50105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
50205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
50305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
50405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k)));
50505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
50605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::StringType()
5107db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "String", BUILT_IN, true, true, false)
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreatorName() const
5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeString", 1, v));
5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
527b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readString")));
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CanBeArray() const
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v));
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
546b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray")));
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
552b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readStringArray", 1, v));
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
557fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
558fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
559fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
560fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
561fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new MethodCall(data, "putString", 2, k, v));
562fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
563fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
564fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
565fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
566fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, Variable**)
567fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
568fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k)));
569fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
570fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CharSequenceType()
5747db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "CharSequence", BUILT_IN, true, true, false)
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreatorName() const
5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel",
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                3, v, parcel, BuildWriteToParcelFlags(flags)));
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v,
609b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                Variable* parcel, Variable**)
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = TextUtils.createFromParcel(parcel)
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(TEXT_UTILS_TYPE,
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel)));
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::RemoteExceptionType()
6347db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "RemoteException", BUILT_IN, false, false, false)
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
645b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
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 Project// ================================================================
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::RuntimeExceptionType()
6537db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "RuntimeException", BUILT_IN, false, false, false)
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
664b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
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 Project
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::IBinderType()
6737db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IBinder", BUILT_IN, true, false, false)
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v));
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
684b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder")));
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v));
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
697b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray")));
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
703b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v));
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::IInterfaceType()
7127db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "IInterface", BUILT_IN, false, false, false)
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
723b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
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 Project
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::BinderType()
7327db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Binder", BUILT_IN, false, false, false)
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v,
744b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::BinderProxyType()
7537db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "BinderProxy", BUILT_IN, false, false, false)
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v,
765b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::ParcelType()
7747db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcel", BUILT_IN, false, false, false)
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
785b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
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 Project// ================================================================
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::ParcelableInterfaceType()
7937db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("android.os", "Parcelable", BUILT_IN, false, false, false)
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
804b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
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 Project// ================================================================
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::MapType()
8127db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "Map", BUILT_IN, true, false, true)
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeMap", 1, v));
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
822b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughesstatic void EnsureClassLoader(StatementBlock* addTo, Variable** cl)
823b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes{
824b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // We don't want to look up the class loader once for every
825b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // collection argument, so ensure we do it at most once per method.
826b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    if (*cl == NULL) {
827b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        *cl = new Variable(CLASSLOADER_TYPE, "cl");
828b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        addTo->Add(new VariableDeclaration(*cl,
829b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                new LiteralExpression("this.getClass().getClassLoader()"),
830b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                CLASSLOADER_TYPE));
831b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    }
832b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes}
833b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
835b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesMapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
837b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
838b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl)));
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
84205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoMapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
844b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
845b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl));
8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ListType()
8527db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.util", "List", BUILT_IN, true, true, true)
8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::InstantiableName() const
8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList";
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeList", 1, v));
8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
869b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
871b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
872b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl)));
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
877b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable** cl)
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
879b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
880b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
88305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
88405ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
88505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
88605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
88705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
88805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
88905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
89005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
89105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
89205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
89305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
89405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k)));
89505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ParcelableType(const string& package, const string& name,
9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, const string& declFile, int declLine)
9017db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, builtIn ? BUILT_IN : PARCELABLE, true, false, true,
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            declFile, declLine)
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreatorName() const
9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName() + ".CREATOR";
9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2,
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                parcel, BuildWriteToParcelFlags(flags)));
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
936b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = CLASS.CREATOR.createFromParcel(parcel)
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel)));
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ReadFromParcel(StatementBlock* addTo, Variable* v,
958b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable**)
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // TODO: really, we don't need to have this extra check, but we
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // don't have two separate marshalling code paths
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.readFromParcel(parcel)
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel));
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CanBeArray() const
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v,
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                BuildWriteToParcelFlags(flags)));
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
987b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel,
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "createTypedArray", 1, new LiteralExpression(creator))));
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
995b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readTypedArray", 2,
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    v, new LiteralExpression(creator)));
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10027db766c3fec2795b08d237f29b972f474983684bJoe Onorato// ================================================================
10037db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10047db766c3fec2795b08d237f29b972f474983684bJoe OnoratoFlattenableType::FlattenableType(const string& package, const string& name,
10057db766c3fec2795b08d237f29b972f474983684bJoe Onorato                        bool builtIn, const string& declFile, int declLine)
10067db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, builtIn ? BUILT_IN : PARCELABLE, false, true, true,
10077db766c3fec2795b08d237f29b972f474983684bJoe Onorato            declFile, declLine)
10087db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10097db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10107db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10117db766c3fec2795b08d237f29b972f474983684bJoe Onoratostring
10127db766c3fec2795b08d237f29b972f474983684bJoe OnoratoFlattenableType::CreatorName() const
10137db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10147db766c3fec2795b08d237f29b972f474983684bJoe Onorato    return QualifiedName() + ".CREATOR";
10157db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10167db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10177db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
10187db766c3fec2795b08d237f29b972f474983684bJoe OnoratoFlattenableType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10197db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, int flags)
10207db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10217db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // if (v != null) {
10227db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     RpcData _obj = new RpcData();
10237db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     v.writeToRpcData(_obj);
10247db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     data.putRpcData(k, obj);
10257db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // }
10267db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* ifpart = new IfStatement;
10277db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
10287db766c3fec2795b08d237f29b972f474983684bJoe Onorato    Variable* _obj = new Variable(RPC_DATA_TYPE, "_obj");
10297db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new VariableDeclaration(_obj, new NewExpression(RPC_DATA_TYPE)));
10307db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new MethodCall(v, "writeToRpcData", 1, _obj));
10317db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new MethodCall(data, "putRpcData", 2, k, _obj));
10327db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10337db766c3fec2795b08d237f29b972f474983684bJoe Onorato    addTo->Add(ifpart);
10347db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10357db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10367db766c3fec2795b08d237f29b972f474983684bJoe Onoratovoid
10377db766c3fec2795b08d237f29b972f474983684bJoe OnoratoFlattenableType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
10387db766c3fec2795b08d237f29b972f474983684bJoe Onorato                                    Variable* data, Variable** cl)
10397db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10407db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // RpcData _obj_XX = data.getRpcData(k);
10417db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // if (_data_XX != null)
10427db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     v = CLASS.RPC_CREATOR.createFromParcel(parcel)
10437db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // } else {
10447db766c3fec2795b08d237f29b972f474983684bJoe Onorato    //     v = null;
10457db766c3fec2795b08d237f29b972f474983684bJoe Onorato    // }
10467db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10477db766c3fec2795b08d237f29b972f474983684bJoe Onorato    StatementBlock* block = new StatementBlock;
10487db766c3fec2795b08d237f29b972f474983684bJoe Onorato    addTo->Add(block);
10497db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10507db766c3fec2795b08d237f29b972f474983684bJoe Onorato    Variable* _obj = new Variable(RPC_DATA_TYPE, "_obj");
10517db766c3fec2795b08d237f29b972f474983684bJoe Onorato    block->Add(new VariableDeclaration(_obj, new MethodCall(data, "getRpcData", 1, k)));
10527db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10537db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* ifpart = new IfStatement();
10547db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->expression = new Comparison(_obj, "!=", NULL_VALUE);
10557db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->statements->Add(new Assignment(v,
10567db766c3fec2795b08d237f29b972f474983684bJoe Onorato                new MethodCall(v->type, "RPC_CREATOR.createFromRpcData", 1, data)));
10577db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10587db766c3fec2795b08d237f29b972f474983684bJoe Onorato    IfStatement* elsepart = new IfStatement();
10597db766c3fec2795b08d237f29b972f474983684bJoe Onorato    ifpart->elseif = elsepart;
10607db766c3fec2795b08d237f29b972f474983684bJoe Onorato    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
10617db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10627db766c3fec2795b08d237f29b972f474983684bJoe Onorato    block->Add(ifpart);
10637db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10647db766c3fec2795b08d237f29b972f474983684bJoe Onorato
10657db766c3fec2795b08d237f29b972f474983684bJoe Onoratobool
10667db766c3fec2795b08d237f29b972f474983684bJoe OnoratoFlattenableType::CanBeArray() const
10677db766c3fec2795b08d237f29b972f474983684bJoe Onorato{
10687db766c3fec2795b08d237f29b972f474983684bJoe Onorato    return true;
10697db766c3fec2795b08d237f29b972f474983684bJoe Onorato}
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::InterfaceType(const string& package, const string& name,
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, bool oneway,
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        const string& declFile, int declLine)
10767db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, false,
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        declFile, declLine)
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ,m_oneway(oneway)
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::OneWay() const
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_oneway;
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // parcel.writeStrongBinder(v != null ? v.asBinder() : null);
10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1,
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Comparison(v, "!=", NULL_VALUE),
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(v, "asBinder"),
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    NULL_VALUE)));
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1100b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // v = Interface.asInterface(parcel.readStrongBinder());
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string type = v->type->QualifiedName();
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    type += ".Stub";
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v,
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall( NAMES.Find(type), "asInterface", 1,
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(parcel, "readStrongBinder"))));
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericType(const string& package, const string& name,
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11157db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type(package, name, BUILT_IN, true, true, true)
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_args = args;
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_importName = package + '.' + name;
11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string gen = "<";
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = args.size();
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = args[i];
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gen += t->QualifiedName();
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (i != N-1) {
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            gen += ',';
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    gen += '>';
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_genericArguments = gen;
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SetQualifiedName(m_importName + gen);
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
113505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratoconst vector<Type*>&
113605ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericType::GenericArgumentTypes() const
113705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
113805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    return m_args;
113905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
114005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericArguments() const
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_genericArguments;
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ImportType() const
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_importName;
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::WriteToParcel\n");
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1160b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::CreateFromParcel\n");
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1167b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::ReadFromParcel\n");
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::GenericListType(const string& package, const string& name,
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :GenericType(package, name, args),
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_creator(args[0]->CreatorName())
11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::CreatorName() const
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.arrayListCreator";
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::InstantiableName() const
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList" + GenericArguments();
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeStringList", 1, v));
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v));
12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // parcel.writeTypedListXX(arg);
12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v));
12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1208b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createStringArrayList", 0)));
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createBinderArrayList", 0)));
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedArrayList(XXX.creator);
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createTypedArrayList", 1,
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new LiteralExpression(m_creator))));
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1226b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readStringList", 1, v));
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readBinderList", 1, v));
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedList(v, XXX.creator);
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readTypedList", 2,
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       v,
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       new LiteralExpression(m_creator)));
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
124005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
124105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
124205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
124305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
124405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
124505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
124605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
124705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
124805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
124905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, Variable** cl)
125005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
125105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    string classArg = GenericArgumentTypes()[0]->QualifiedName();
125205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    classArg += ".class";
125305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k,
125405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato                    new LiteralExpression(classArg))));
125505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
125605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
12571eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12581eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato// ================================================================
12591eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12601eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::RpcDataType()
12617db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("com.android.athome.rpc", "RpcData", Type::BUILT_IN, false, true, true)
12621eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12631eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12641eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12651eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12661eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
12671eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable* data, int flags)
12681eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12691eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new MethodCall(data, "putRpcData", 2, k, v));
12701eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12711eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12721eb720446dec3248ba102c4635bf113d450d0d73Joe Onoratovoid
12731eb720446dec3248ba102c4635bf113d450d0d73Joe OnoratoRpcDataType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
12741eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato        Variable** cl)
12751eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato{
12761eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getRpcData", 1, k)));
12771eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato}
12781eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12791eb720446dec3248ba102c4635bf113d450d0d73Joe Onorato
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectClassLoaderType::ClassLoaderType()
12837db766c3fec2795b08d237f29b972f474983684bJoe Onorato    :Type("java.lang", "ClassLoader", BUILT_IN, false, false, false)
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Namespace()
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::~Namespace()
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        delete m_types[i];
12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Add(Type* type)
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* t = Find(type->QualifiedName());
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (t == NULL) {
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_types.push_back(type);
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::AddGenericType(const string& package, const string& name, int args)
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Generic g;
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.package = package;
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.name = name;
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.qualified = package + '.' + name;
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.args = args;
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_generics.push_back(g);
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const string& name) const
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->QualifiedName() == name) {
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const char* package, const char* name) const
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string s;
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package != NULL) {
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += package;
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += '.';
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    s += name;
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return Find(s);
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic string
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnormalize_generic(const string& s)
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string r;
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = s.size();
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char c = s[i];
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!isspace(c)) {
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            r += c;
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return r;
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Search(const string& name)
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // an exact match wins
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* result = Find(name);
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result != NULL) {
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // try the class names
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // our language doesn't allow you to not specify outer classes
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // when referencing an inner class.  that could be changed, and this
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // would be the place to do it, but I don't think the complexity in
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // scoping rules is worth it.
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->Name() == name) {
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // we got to here and it's not a generic, give up
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (name.find('<') == name.npos) {
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // remove any whitespace
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string normalized = normalize_generic(name);
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // find the part before the '<', find a generic for it
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t baseIndex = normalized.find('<');
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string base(normalized.c_str(), baseIndex);
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const Generic* g = search_generic(base);
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g == NULL) {
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // For each of the args, do a recursive search on it.  We don't allow
13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // generics within generics like Java does, because we're really limiting
13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // them to just built-in container classes, at least for now.  Our syntax
14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ensures this right now as well.
14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    vector<Type*> args;
14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t start = baseIndex + 1;
14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t end = start;
14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    while (normalized[start] != '\0') {
14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        end = normalized.find(',', start);
14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (end == normalized.npos) {
14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            end = normalized.find('>', start);
14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        string s(normalized.c_str()+start, end-start);
14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = this->Search(s);
14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (t == NULL) {
14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // maybe we should print a warning here?
14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NULL;
14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.push_back(t);
14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        start = end+1;
14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // construct a GenericType, add it to our name set so they always get
14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // the same object, and return it.
14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    result = make_generic_type(g->package, g->name, args);
14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result == NULL) {
14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    this->Add(result);
14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return this->Find(result->QualifiedName());
14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst Namespace::Generic*
14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::search_generic(const string& name) const
14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_generics.size();
14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // first exact match
14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.qualified == name) {
14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // then name match
14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.name == name) {
14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Dump() const
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int n = m_types.size();
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<n; i++) {
14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = m_types[i];
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        printf("type: package=%s name=%s qualifiedName=%s\n",
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->Package().c_str(), t->Name().c_str(),
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->QualifiedName().c_str());
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1465