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