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