Type.cpp revision b9eba866b203b28e58f35598023f49b4b58a0635
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; 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_SEQUENCE_TYPE; 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* TEXT_UTILS_TYPE; 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* REMOTE_EXCEPTION_TYPE; 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* RUNTIME_EXCEPTION_TYPE; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IBINDER_TYPE; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IINTERFACE_TYPE; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_NATIVE_TYPE; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_PROXY_TYPE; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCEL_TYPE; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCELABLE_INTERFACE_TYPE; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* MAP_TYPE; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LIST_TYPE; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CLASSLOADER_TYPE; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* NULL_VALUE; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* THIS_VALUE; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* SUPER_VALUE; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* TRUE_VALUE; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* FALSE_VALUE; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectregister_base_types() 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project VOID_TYPE = new BasicType("void", "XXX", "XXX", "XXX", "XXX", "XXX"); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(VOID_TYPE); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BOOLEAN_TYPE = new BooleanType(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(BOOLEAN_TYPE); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BYTE_TYPE = new BasicType("byte", "writeByte", "readByte", 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "writeByteArray", "createByteArray", "readByteArray"); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(BYTE_TYPE); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHAR_TYPE = new CharType(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(CHAR_TYPE); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INT_TYPE = new BasicType("int", "writeInt", "readInt", 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "writeIntArray", "createIntArray", "readIntArray"); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(INT_TYPE); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LONG_TYPE = new BasicType("long", "writeLong", "readLong", 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "writeLongArray", "createLongArray", "readLongArray"); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(LONG_TYPE); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FLOAT_TYPE = new BasicType("float", "writeFloat", "readFloat", 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "writeFloatArray", "createFloatArray", "readFloatArray"); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(FLOAT_TYPE); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DOUBLE_TYPE = new BasicType("double", "writeDouble", "readDouble", 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "writeDoubleArray", "createDoubleArray", "readDoubleArray"); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(DOUBLE_TYPE); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project STRING_TYPE = new StringType(); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(STRING_TYPE); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CHAR_SEQUENCE_TYPE = new CharSequenceType(); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(CHAR_SEQUENCE_TYPE); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MAP_TYPE = new MapType(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(MAP_TYPE); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LIST_TYPE = new ListType(); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(LIST_TYPE); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type::BUILT_IN, false, false); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(TEXT_UTILS_TYPE); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REMOTE_EXCEPTION_TYPE = new RemoteExceptionType(); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(REMOTE_EXCEPTION_TYPE); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(RUNTIME_EXCEPTION_TYPE); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBINDER_TYPE = new IBinderType(); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(IBINDER_TYPE); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IINTERFACE_TYPE = new IInterfaceType(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(IINTERFACE_TYPE); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BINDER_NATIVE_TYPE = new BinderType(); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(BINDER_NATIVE_TYPE); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BINDER_PROXY_TYPE = new BinderProxyType(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(BINDER_PROXY_TYPE); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PARCEL_TYPE = new ParcelType(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(PARCEL_TYPE); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType(); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(PARCELABLE_INTERFACE_TYPE); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLASSLOADER_TYPE = new ClassLoaderType(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.Add(CLASSLOADER_TYPE); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NULL_VALUE = new LiteralExpression("null"); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project THIS_VALUE = new LiteralExpression("this"); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SUPER_VALUE = new LiteralExpression("super"); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TRUE_VALUE = new LiteralExpression("true"); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FALSE_VALUE = new LiteralExpression("false"); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.AddGenericType("java.util", "List", 1); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NAMES.AddGenericType("java.util", "Map", 2); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic Type* 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmake_generic_type(const string& package, const string& name, 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const vector<Type*>& args) 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (package == "java.util" && name == "List") { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new GenericListType("java.util", "List", args); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //return new GenericType(package, name, args); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& name, int kind, bool canWriteToParcel, bool canBeOut) 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :m_package(), 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_name(name), 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_declFile(""), 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_declLine(-1), 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_kind(kind), 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_canWriteToParcel(canWriteToParcel), 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_canBeOut(canBeOut) 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_qualifiedName = name; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& package, const string& name, 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int kind, bool canWriteToParcel, bool canBeOut, 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const string& declFile, int declLine) 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :m_package(package), 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_name(name), 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_declFile(declFile), 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_declLine(declLine), 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_kind(kind), 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_canWriteToParcel(canWriteToParcel), 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_canBeOut(canBeOut) 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (package.length() > 0) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_qualifiedName = package; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_qualifiedName += '.'; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_qualifiedName += name; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::~Type() 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CanBeArray() const 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::ImportType() const 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_qualifiedName; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreatorName() const 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ""; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::InstantiableName() const 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return QualifiedName(); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn", 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* WriteToParcel error " 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 201b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* CreateFromParcel error " 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 210b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* ReadFromParcel error " 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* WriteArrayToParcel error " 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 229b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error " 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 238b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n", 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project __FILE__, __LINE__, m_qualifiedName.c_str()); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error " 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + m_qualifiedName + " */")); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::SetQualifiedName(const string& qualified) 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_qualifiedName = qualified; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::BuildWriteToParcelFlags(int flags) 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (flags == 0) { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LiteralExpression("0"); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new FieldVariable(PARCELABLE_INTERFACE_TYPE, 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "PARCELABLE_WRITE_RETURN_VALUE"); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LiteralExpression("0"); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::BasicType(const string& name, const string& marshallMethod, 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const string& unmarshallMethod, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const string& writeArray, const string& createArray, 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const string& readArray) 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type(name, BUILT_IN, true, false), 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_marshallMethod(marshallMethod), 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_unmarshallMethod(unmarshallMethod), 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_writeArrayMethod(writeArray), 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_createArrayMethod(createArray), 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_readArrayMethod(readArray) 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, m_marshallMethod, 1, v)); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 287b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallMethod))); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CanBeArray() const 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, m_writeArrayMethod, 1, v)); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 306b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayMethod))); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 312b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, m_readArrayMethod, 1, v)); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::BooleanType() 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("boolean", BUILT_IN, true, false) 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeInt", 1, 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Ternary(v, new LiteralExpression("1"), 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression("0")))); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 334b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"), 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "!=", new MethodCall(parcel, "readInt")))); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CanBeArray() const 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v)); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 354b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray"))); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 360b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v)); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CharType() 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("char", BUILT_IN, true, false) 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeInt", 1, 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Cast(INT_TYPE, v))); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 381b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this)); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CanBeArray() const 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v)); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 400b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray"))); 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 406b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readCharArray", 1, v)); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::StringType() 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.lang", "String", BUILT_IN, true, false) 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreatorName() const 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "android.os.Parcel.STRING_CREATOR"; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeString", 1, v)); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 431b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "readString"))); 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CanBeArray() const 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v)); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 450b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray"))); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 456b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readStringArray", 1, v)); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CharSequenceType() 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.lang", "CharSequence", BUILT_IN, true, false) 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreatorName() const 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "android.os.Parcel.STRING_CREATOR"; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (v != null) { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeInt(1); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v.writeToParcel(parcel); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } else { 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeInt(0); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* elsepart = new IfStatement(); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1, 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression("0"))); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* ifpart = new IfStatement; 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->expression = new Comparison(v, "!=", NULL_VALUE); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->elseif = elsepart; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1, 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression("1"))); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel", 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3, v, parcel, BuildWriteToParcelFlags(flags))); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(ifpart); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v, 499b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (0 != parcel.readInt()) { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = TextUtils.createFromParcel(parcel) 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } else { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = null; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* elsepart = new IfStatement(); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project elsepart->statements->Add(new Assignment(v, NULL_VALUE)); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* ifpart = new IfStatement(); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "readInt")); 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->elseif = elsepart; 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new Assignment(v, 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(TEXT_UTILS_TYPE, 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel))); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(ifpart); 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::RemoteExceptionType() 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "RemoteException", BUILT_IN, false, false) 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 535b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::RuntimeExceptionType() 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.lang", "RuntimeException", BUILT_IN, false, false) 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 554b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::IBinderType() 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "IBinder", BUILT_IN, true, false) 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v)); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 574b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder"))); 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v)); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 587b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray"))); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 593b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v)); 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::IInterfaceType() 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "IInterface", BUILT_IN, false, false) 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 613b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::BinderType() 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "Binder", BUILT_IN, false, false) 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, 634b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::BinderProxyType() 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "BinderProxy", BUILT_IN, false, false) 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v, 655b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::ParcelType() 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "Parcel", BUILT_IN, false, false) 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 675b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::ParcelableInterfaceType() 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("android.os", "Parcelable", BUILT_IN, false, false) 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 694b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__); 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::MapType() 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.util", "Map", BUILT_IN, true, true) 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeMap", 1, v)); 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 712b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughesstatic void EnsureClassLoader(StatementBlock* addTo, Variable** cl) 713b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes{ 714b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes // We don't want to look up the class loader once for every 715b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes // collection argument, so ensure we do it at most once per method. 716b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes if (*cl == NULL) { 717b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes *cl = new Variable(CLASSLOADER_TYPE, "cl"); 718b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes addTo->Add(new VariableDeclaration(*cl, 719b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes new LiteralExpression("this.getClass().getClassLoader()"), 720b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes CLASSLOADER_TYPE)); 721b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes } 722b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes} 723b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 725b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesMapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl) 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 727b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes EnsureClassLoader(addTo, cl); 728b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl))); 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::ReadFromParcel(StatementBlock* addTo, Variable* v, 733b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable** cl) 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 735b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes EnsureClassLoader(addTo, cl); 736b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl)); 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ListType() 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.util", "List", BUILT_IN, true, true) 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::InstantiableName() const 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "java.util.ArrayList"; 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeList", 1, v)); 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 760b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl) 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 762b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes EnsureClassLoader(addTo, cl); 763b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl))); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ReadFromParcel(StatementBlock* addTo, Variable* v, 768b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable** cl) 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 770b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes EnsureClassLoader(addTo, cl); 771b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl)); 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ParcelableType(const string& package, const string& name, 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool builtIn, const string& declFile, int declLine) 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type(package, name, builtIn ? BUILT_IN : PARCELABLE, true, true, 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project declFile, declLine) 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreatorName() const 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return QualifiedName() + ".CREATOR"; 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (v != null) { 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeInt(1); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v.writeToParcel(parcel); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } else { 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeInt(0); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* elsepart = new IfStatement(); 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1, 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression("0"))); 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* ifpart = new IfStatement; 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->expression = new Comparison(v, "!=", NULL_VALUE); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->elseif = elsepart; 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1, 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression("1"))); 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2, 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project parcel, BuildWriteToParcelFlags(flags))); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(ifpart); 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 814b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (0 != parcel.readInt()) { 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = CLASS.CREATOR.createFromParcel(parcel) 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } else { 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = null; 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* elsepart = new IfStatement(); 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project elsepart->statements->Add(new Assignment(v, NULL_VALUE)); 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* ifpart = new IfStatement(); 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "readInt")); 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->elseif = elsepart; 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new Assignment(v, 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel))); 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(ifpart); 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ReadFromParcel(StatementBlock* addTo, Variable* v, 836b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: really, we don't need to have this extra check, but we 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // don't have two separate marshalling code paths 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (0 != parcel.readInt()) { 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v.readFromParcel(parcel) 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IfStatement* ifpart = new IfStatement(); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->expression = new Comparison(new LiteralExpression("0"), "!=", 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "readInt")); 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel)); 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(ifpart); 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CanBeArray() const 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v, 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BuildWriteToParcelFlags(flags))); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v, 865b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string creator = v->type->QualifiedName() + ".CREATOR"; 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, new MethodCall(parcel, 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "createTypedArray", 1, new LiteralExpression(creator)))); 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 873b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string creator = v->type->QualifiedName() + ".CREATOR"; 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readTypedArray", 2, 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v, new LiteralExpression(creator))); 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::InterfaceType(const string& package, const string& name, 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bool builtIn, bool oneway, 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const string& declFile, int declLine) 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false, 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project declFile, declLine) 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ,m_oneway(oneway) 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::OneWay() const 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_oneway; 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeStrongBinder(v != null ? v.asBinder() : null); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Ternary( 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Comparison(v, "!=", NULL_VALUE), 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(v, "asBinder"), 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NULL_VALUE))); 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 910b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = Interface.asInterface(parcel.readStrongBinder()); 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string type = v->type->QualifiedName(); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project type += ".Stub"; 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall( NAMES.Find(type), "asInterface", 1, 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "readStrongBinder")))); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericType(const string& package, const string& name, 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const vector<Type*>& args) 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type(package, name, BUILT_IN, true, true) 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_args = args; 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_importName = package + '.' + name; 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string gen = "<"; 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = args.size(); 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type* t = args[i]; 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gen += t->QualifiedName(); 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (i != N-1) { 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gen += ','; 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gen += '>'; 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_genericArguments = gen; 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SetQualifiedName(m_importName + gen); 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericArguments() const 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_genericArguments; 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ImportType() const 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_importName; 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "implement GenericType::WriteToParcel\n"); 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 964b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "implement GenericType::CreateFromParcel\n"); 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ReadFromParcel(StatementBlock* addTo, Variable* v, 971b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fprintf(stderr, "implement GenericType::ReadFromParcel\n"); 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::GenericListType(const string& package, const string& name, 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const vector<Type*>& args) 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :GenericType(package, name, args), 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_creator(args[0]->CreatorName()) 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::CreatorName() const 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "android.os.Parcel.arrayListCreator"; 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::InstantiableName() const 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "java.util.ArrayList" + GenericArguments(); 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags) 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_creator == STRING_TYPE->CreatorName()) { 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeStringList", 1, v)); 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (m_creator == IBINDER_TYPE->CreatorName()) { 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v)); 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parcel.writeTypedListXX(arg); 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v)); 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 1012b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**) 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_creator == STRING_TYPE->CreatorName()) { 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "createStringArrayList", 0))); 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (m_creator == IBINDER_TYPE->CreatorName()) { 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "createBinderArrayList", 0))); 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = _data.readTypedArrayList(XXX.creator); 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new Assignment(v, 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new MethodCall(parcel, "createTypedArrayList", 1, 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression(m_creator)))); 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v, 1030b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes Variable* parcel, Variable**) 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_creator == STRING_TYPE->CreatorName()) { 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readStringList", 1, v)); 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (m_creator == IBINDER_TYPE->CreatorName()) { 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readBinderList", 1, v)); 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // v = _data.readTypedList(v, XXX.creator); 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addTo->Add(new MethodCall(parcel, "readTypedList", 2, 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v, 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new LiteralExpression(m_creator))); 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectClassLoaderType::ClassLoaderType() 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project :Type("java.lang", "ClassLoader", BUILT_IN, false, false) 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================ 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Namespace() 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::~Namespace() 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = m_types.size(); 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete m_types[i]; 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Add(Type* type) 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type* t = Find(type->QualifiedName()); 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t == NULL) { 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_types.push_back(type); 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::AddGenericType(const string& package, const string& name, int args) 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Generic g; 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project g.package = package; 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project g.name = name; 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project g.qualified = package + '.' + name; 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project g.args = args; 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project m_generics.push_back(g); 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const string& name) const 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = m_types.size(); 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_types[i]->QualifiedName() == name) { 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_types[i]; 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const char* package, const char* name) const 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string s; 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (package != NULL) { 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s += package; 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s += '.'; 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project s += name; 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return Find(s); 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic string 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnormalize_generic(const string& s) 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string r; 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = s.size(); 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char c = s[i]; 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isspace(c)) { 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r += c; 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return r; 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Search(const string& name) 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // an exact match wins 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type* result = Find(name); 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result != NULL) { 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // try the class names 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // our language doesn't allow you to not specify outer classes 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // when referencing an inner class. that could be changed, and this 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // would be the place to do it, but I don't think the complexity in 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // scoping rules is worth it. 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = m_types.size(); 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (m_types[i]->Name() == name) { 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return m_types[i]; 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // we got to here and it's not a generic, give up 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (name.find('<') == name.npos) { 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // remove any whitespace 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string normalized = normalize_generic(name); 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // find the part before the '<', find a generic for it 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ssize_t baseIndex = normalized.find('<'); 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string base(normalized.c_str(), baseIndex); 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Generic* g = search_generic(base); 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (g == NULL) { 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // For each of the args, do a recursive search on it. We don't allow 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // generics within generics like Java does, because we're really limiting 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // them to just built-in container classes, at least for now. Our syntax 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ensures this right now as well. 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vector<Type*> args; 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t start = baseIndex + 1; 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t end = start; 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (normalized[start] != '\0') { 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project end = normalized.find(',', start); 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (end == normalized.npos) { 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project end = normalized.find('>', start); 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project string s(normalized.c_str()+start, end-start); 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type* t = this->Search(s); 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (t == NULL) { 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // maybe we should print a warning here? 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project args.push_back(t); 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project start = end+1; 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // construct a GenericType, add it to our name set so they always get 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the same object, and return it. 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = make_generic_type(g->package, g->name, args); 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result == NULL) { 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this->Add(result); 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this->Find(result->QualifiedName()); 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst Namespace::Generic* 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::search_generic(const string& name) const 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int N = m_generics.size(); 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // first exact match 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Generic& g = m_generics[i]; 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (g.qualified == name) { 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return &g; 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // then name match 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const Generic& g = m_generics[i]; 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (g.name == name) { 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return &g; 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return NULL; 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Dump() const 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int n = m_types.size(); 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<n; i++) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Type* t = m_types[i]; 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project printf("type: package=%s name=%s qualifiedName=%s\n", 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t->Package().c_str(), t->Name().c_str(), 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t->QualifiedName().c_str()); 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1229