Type.cpp revision 05ffbe7c020c59ee4fa7e13e04641c954d591951
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Type.h"
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace NAMES;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* VOID_TYPE;
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BOOLEAN_TYPE;
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BYTE_TYPE;
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_TYPE;
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* INT_TYPE;
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LONG_TYPE;
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* FLOAT_TYPE;
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* DOUBLE_TYPE;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* STRING_TYPE;
14fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* OBJECT_TYPE;
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CHAR_SEQUENCE_TYPE;
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* TEXT_UTILS_TYPE;
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* REMOTE_EXCEPTION_TYPE;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* RUNTIME_EXCEPTION_TYPE;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IBINDER_TYPE;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* IINTERFACE_TYPE;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_NATIVE_TYPE;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* BINDER_PROXY_TYPE;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCEL_TYPE;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* PARCELABLE_INTERFACE_TYPE;
25fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* CONTEXT_TYPE;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* MAP_TYPE;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* LIST_TYPE;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType* CLASSLOADER_TYPE;
29fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_SERVICE_BASE_TYPE;
30fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_DATA_TYPE;
31fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_BROKER_TYPE;
32fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_ENDPOINT_INFO_TYPE;
33fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_RESULT_HANDLER_TYPE;
34fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_ERROR_TYPE;
35fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType* RPC_ERROR_LISTENER_TYPE;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* NULL_VALUE;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* THIS_VALUE;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* SUPER_VALUE;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* TRUE_VALUE;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression* FALSE_VALUE;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectregister_base_types()
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    VOID_TYPE = new BasicType("void",
4705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX",
4805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "XXX", "XXX", "XXX", "XXX", "XXX");
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(VOID_TYPE);
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BOOLEAN_TYPE = new BooleanType();
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BOOLEAN_TYPE);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    BYTE_TYPE = new BasicType("byte",
5505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeByte", "readByte", "writeByteArray", "createByteArray", "readByteArray",
5605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putByte", "getByte", "putByteArray", "createByteArray", "getByteArray");
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BYTE_TYPE);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_TYPE = new CharType();
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_TYPE);
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    INT_TYPE = new BasicType("int",
6305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeInt", "readInt", "writeIntArray", "createIntArray", "readIntArray",
6405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putInteger", "getInteger", "putIntegerArray", "createIntegerArray", "getIntegerArray");
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(INT_TYPE);
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    LONG_TYPE = new BasicType("long",
6805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeLong", "readLong", "writeLongArray", "createLongArray", "readLongArray",
6905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putLong", "getLong", "putLongArray", "createLongArray", "getLongArray");
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LONG_TYPE);
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    FLOAT_TYPE = new BasicType("float",
7305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeFloat", "readFloat", "writeFloatArray", "createFloatArray", "readFloatArray",
7405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putFloat", "getFloat", "putFloatArray", "createFloatArray", "getFloatArray");
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(FLOAT_TYPE);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    DOUBLE_TYPE = new BasicType("double",
7805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "writeDouble", "readDouble", "writeDoubleArray", "createDoubleArray", "readDoubleArray",
7905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato            "putDouble", "getDouble", "putDoubleArray", "createDoubleArray", "getDoubleArray");
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(DOUBLE_TYPE);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    STRING_TYPE = new StringType();
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(STRING_TYPE);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
85fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    OBJECT_TYPE = new Type("java.lang", "Object",
86fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            Type::BUILT_IN, false, false);
87fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(OBJECT_TYPE);
88fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CHAR_SEQUENCE_TYPE = new CharSequenceType();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CHAR_SEQUENCE_TYPE);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MAP_TYPE = new MapType();
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(MAP_TYPE);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LIST_TYPE = new ListType();
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(LIST_TYPE);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    TEXT_UTILS_TYPE = new Type("android.text", "TextUtils", Type::BUILT_IN, false, false);
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(TEXT_UTILS_TYPE);
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    REMOTE_EXCEPTION_TYPE = new RemoteExceptionType();
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(REMOTE_EXCEPTION_TYPE);
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(RUNTIME_EXCEPTION_TYPE);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IBINDER_TYPE = new IBinderType();
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IBINDER_TYPE);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IINTERFACE_TYPE = new IInterfaceType();
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(IINTERFACE_TYPE);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_NATIVE_TYPE = new BinderType();
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_NATIVE_TYPE);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BINDER_PROXY_TYPE = new BinderProxyType();
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(BINDER_PROXY_TYPE);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCEL_TYPE = new ParcelType();
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCEL_TYPE);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType();
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(PARCELABLE_INTERFACE_TYPE);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
125fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    CONTEXT_TYPE = new Type("android.content", "Context",
126fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    Type::BUILT_IN, false, false);
127fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(CONTEXT_TYPE);
128fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
129fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_SERVICE_BASE_TYPE = new Type("com.android.athome.service", "AndroidAtHomeService",
130fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    Type::BUILT_IN, false, false);
131fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_SERVICE_BASE_TYPE);
132fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
133fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_DATA_TYPE = new Type("com.android.athome.rpc", "RpcData",
134fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    Type::BUILT_IN, false, false);
135fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_DATA_TYPE);
136fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
137fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_BROKER_TYPE = new Type("com.android.athome.utils", "AndroidAtHomeBroker",
138fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    Type::BUILT_IN, false, false);
139fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_BROKER_TYPE);
140fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
141fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_ENDPOINT_INFO_TYPE = new ParcelableType("com.android.athome.rpc", "EndpointInfo",
142fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    true, __FILE__, __LINE__);
143fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_ENDPOINT_INFO_TYPE);
144fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
145fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_RESULT_HANDLER_TYPE = new ParcelableType("com.android.athome.rpc", "RpcResultHandler",
146fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    true, __FILE__, __LINE__);
147fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_RESULT_HANDLER_TYPE);
148fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
149fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_ERROR_TYPE = new ParcelableType("com.android.athome.rpc", "RpcError",
150fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    true, __FILE__, __LINE__);
151fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_ERROR_TYPE);
152fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
153fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    RPC_ERROR_LISTENER_TYPE = new Type("com.android.athome.rpc", "RpcErrorHandler",
154fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                                    Type::BUILT_IN, false, false);
155fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    NAMES.Add(RPC_ERROR_LISTENER_TYPE);
156fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CLASSLOADER_TYPE = new ClassLoaderType();
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.Add(CLASSLOADER_TYPE);
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NULL_VALUE = new LiteralExpression("null");
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    THIS_VALUE = new LiteralExpression("this");
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SUPER_VALUE = new LiteralExpression("super");
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    TRUE_VALUE = new LiteralExpression("true");
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    FALSE_VALUE = new LiteralExpression("false");
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "List", 1);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NAMES.AddGenericType("java.util", "Map", 2);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic Type*
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectmake_generic_type(const string& package, const string& name,
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    const vector<Type*>& args)
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package == "java.util" && name == "List") {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new GenericListType("java.util", "List", args);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //return new GenericType(package, name, args);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& name, int kind, bool canWriteToParcel, bool canBeOut)
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(),
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(""),
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(-1),
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = name;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::Type(const string& package, const string& name,
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int kind, bool canWriteToParcel, bool canBeOut,
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            const string& declFile, int declLine)
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :m_package(package),
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_name(name),
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declFile(declFile),
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_declLine(declLine),
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_kind(kind),
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canWriteToParcel(canWriteToParcel),
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_canBeOut(canBeOut)
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package.length() > 0) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName = package;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_qualifiedName += '.';
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName += name;
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::~Type()
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CanBeArray() const
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return false;
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::ImportType() const
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_qualifiedName;
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreatorName() const
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "";
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::InstantiableName() const
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName();
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%sn",
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteToParcel error "
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
252b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateFromParcel error "
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
261b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadFromParcel error "
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* WriteArrayToParcel error "
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
280b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* CreateArrayFromParcel error "
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
289b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            __FILE__, __LINE__, m_qualifiedName.c_str());
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new LiteralExpression("/* ReadArrayFromParcel error "
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + m_qualifiedName + " */"));
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
298fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
299fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
300fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
30105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
302fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
303fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* WriteToRpcData error "
304fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
305fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
306fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
307fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
308fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
309fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable** cl)
310fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
31105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    fprintf(stderr, "aidl:internal error %s:%d qualifiedName=%s\n",
312fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato            __FILE__, __LINE__, m_qualifiedName.c_str());
313fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new LiteralExpression("/* ReadFromRpcData error "
314fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato                + m_qualifiedName + " */"));
315fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
316fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
317fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::SetQualifiedName(const string& qualified)
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_qualifiedName = qualified;
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectExpression*
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType::BuildWriteToParcelFlags(int flags)
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (flags == 0) {
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new LiteralExpression("0");
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if ((flags&PARCELABLE_WRITE_RETURN_VALUE) != 0) {
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new FieldVariable(PARCELABLE_INTERFACE_TYPE,
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "PARCELABLE_WRITE_RETURN_VALUE");
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return new LiteralExpression("0");
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
33805ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::BasicType(const string& name, const string& marshallParcel,
33905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& unmarshallParcel, const string& writeArrayParcel,
34005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& createArrayParcel, const string& readArrayParcel,
34105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& marshallRpc, const string& unmarshallRpc,
34205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato          const string& writeArrayRpc, const string& createArrayRpc, const string& readArrayRpc)
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type(name, BUILT_IN, true, false),
34405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallParcel(marshallParcel),
34505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallParcel(unmarshallParcel),
34605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayParcel(writeArrayParcel),
34705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayParcel(createArrayParcel),
34805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayParcel(readArrayParcel),
34905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_marshallRpc(marshallRpc),
35005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_unmarshallRpc(unmarshallRpc),
35105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_writeArrayRpc(writeArrayRpc),
35205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_createArrayRpc(createArrayRpc),
35305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato     m_readArrayRpc(readArrayRpc)
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
36005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_marshallParcel, 1, v));
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
364b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
36605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_unmarshallParcel)));
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CanBeArray() const
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
37805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_writeArrayParcel, 1, v));
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBasicType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
383b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
38505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(parcel, m_createArrayParcel)));
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
389b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBasicType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
39105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(parcel, m_readArrayParcel, 1, v));
39205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
39305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
39405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
39505ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
39605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
39705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
39805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, m_marshallRpc, 2, k, v));
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
40105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
40205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBasicType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
40305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
40405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
40505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, m_unmarshallRpc, 1, k)));
40605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::BooleanType()
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("boolean", BUILT_IN, true, false)
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(v, new LiteralExpression("1"),
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new LiteralExpression("0"))));
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
424b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new Comparison(new LiteralExpression("0"),
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "!=", new MethodCall(parcel, "readInt"))));
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CanBeArray() const
4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBooleanArray", 1, v));
4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBooleanType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
444b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBooleanArray")));
4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
450b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesBooleanType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBooleanArray", 1, v));
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
45505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
45605ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
45705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
45805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
45905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putBoolean", 2, k, v));
46005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
46105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
46205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
46305ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoBooleanType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
46405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
46505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
46605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getBoolean", 1, k)));
46705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CharType()
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("char", BUILT_IN, true, false)
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeInt", 1,
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Cast(INT_TYPE, v)));
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
484b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readInt"), this));
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CanBeArray() const
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeCharArray", 1, v));
4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
503b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createCharArray")));
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
509b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesCharType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readCharArray", 1, v));
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
51405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
51505ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
51605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
51705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
51805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putChar", 2, k, v));
51905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
52005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
52105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
52205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoCharType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
52305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
52405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
52505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getChar", 1, k)));
52605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
52705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::StringType()
5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.lang", "String", BUILT_IN, true, false)
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreatorName() const
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeString", 1, v));
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
548b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readString")));
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CanBeArray() const
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStringArray", 1, v));
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectStringType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
567b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createStringArray")));
5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
573b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesStringType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readStringArray", 1, v));
5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
578fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
579fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
580fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, int flags)
581fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
582fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new MethodCall(data, "putString", 2, k, v));
583fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
584fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
585fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratovoid
586fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe OnoratoStringType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
587fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato        Variable* data, Variable**)
588fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato{
589fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getString", 1, k)));
590fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato}
591fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onorato
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CharSequenceType()
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.lang", "CharSequence", BUILT_IN, true, false)
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreatorName() const
6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.STRING_CREATOR";
6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel",
6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                3, v, parcel, BuildWriteToParcelFlags(flags)));
6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectCharSequenceType::CreateFromParcel(StatementBlock* addTo, Variable* v,
630b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                Variable* parcel, Variable**)
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = TextUtils.createFromParcel(parcel)
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(TEXT_UTILS_TYPE,
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                    "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel)));
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::RemoteExceptionType()
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "RemoteException", BUILT_IN, false, false)
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRemoteExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
666b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRemoteExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::RuntimeExceptionType()
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.lang", "RuntimeException", BUILT_IN, false, false)
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectRuntimeExceptionType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
685b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesRuntimeExceptionType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::IBinderType()
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "IBinder", BUILT_IN, true, false)
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1, v));
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
705b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "readStrongBinder")));
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeBinderArray", 1, v));
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIBinderType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
718b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel, "createBinderArray")));
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
724b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIBinderType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readBinderArray", 1, v));
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::IInterfaceType()
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "IInterface", BUILT_IN, false, false)
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
744b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesIInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::BinderType()
7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "Binder", BUILT_IN, false, false)
7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderType::CreateFromParcel(StatementBlock* addTo, Variable* v,
765b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::BinderProxyType()
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "BinderProxy", BUILT_IN, false, false)
7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectBinderProxyType::CreateFromParcel(StatementBlock* addTo, Variable* v,
786b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                                    Variable* parcel, Variable**)
7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::ParcelType()
7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "Parcel", BUILT_IN, false, false)
7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
806b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::ParcelableInterfaceType()
8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("android.os", "Parcelable", BUILT_IN, false, false)
8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
825b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "aidl:internal error %s:%d\n", __FILE__, __LINE__);
8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::MapType()
8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.util", "Map", BUILT_IN, true, true)
8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectMapType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeMap", 1, v));
8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
843b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughesstatic void EnsureClassLoader(StatementBlock* addTo, Variable** cl)
844b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes{
845b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // We don't want to look up the class loader once for every
846b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    // collection argument, so ensure we do it at most once per method.
847b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    if (*cl == NULL) {
848b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        *cl = new Variable(CLASSLOADER_TYPE, "cl");
849b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes        addTo->Add(new VariableDeclaration(*cl,
850b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                new LiteralExpression("this.getClass().getClassLoader()"),
851b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                CLASSLOADER_TYPE));
852b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    }
853b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes}
854b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes
8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
856b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesMapType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
858b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
859b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl)));
8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
86305ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoMapType::ReadFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
865b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
866b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl));
8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ListType()
8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.util", "List", BUILT_IN, true, true)
8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::InstantiableName() const
8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList";
8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeList", 1, v));
8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
890b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable** cl)
8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
892b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
893b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl)));
8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
898b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable** cl)
8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
900b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    EnsureClassLoader(addTo, cl);
901b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes    addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
90405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
90505ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
90605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
90705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
90805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
90905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
91005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
91105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
91205ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v, Variable* data,
91305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable** cl)
91405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
91505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 1, k)));
91605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ParcelableType(const string& package, const string& name,
9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, const string& declFile, int declLine)
9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type(package, name, builtIn ? BUILT_IN : PARCELABLE, true, true,
9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            declFile, declLine)
9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreatorName() const
9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return QualifiedName() + ".CREATOR";
9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (v != null) {
9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(1);
9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.writeToParcel(parcel);
9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     parcel.writeInt(0);
9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("0")));
9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement;
9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(v, "!=", NULL_VALUE);
9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(parcel, "writeInt", 1,
9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                new LiteralExpression("1")));
9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "writeToParcel", 2,
9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                parcel, BuildWriteToParcelFlags(flags)));
9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
957b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = CLASS.CREATOR.createFromParcel(parcel)
9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // } else {
9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v = null;
9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* elsepart = new IfStatement();
9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    elsepart->statements->Add(new Assignment(v, NULL_VALUE));
9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->elseif = elsepart;
9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new Assignment(v,
9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(v->type, "CREATOR.createFromParcel", 1, parcel)));
9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::ReadFromParcel(StatementBlock* addTo, Variable* v,
979b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                    Variable* parcel, Variable**)
9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // TODO: really, we don't need to have this extra check, but we
9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // don't have two separate marshalling code paths
9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // if (0 != parcel.readInt()) {
9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //     v.readFromParcel(parcel)
9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // }
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    IfStatement* ifpart = new IfStatement();
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->expression = new Comparison(new LiteralExpression("0"), "!=",
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall(parcel, "readInt"));
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ifpart->statements->Add(new MethodCall(v, "readFromParcel", 1, parcel));
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(ifpart);
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CanBeArray() const
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::WriteArrayToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeTypedArray", 2, v,
10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                BuildWriteToParcelFlags(flags)));
10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectParcelableType::CreateArrayFromParcel(StatementBlock* addTo, Variable* v,
1008b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v, new MethodCall(parcel,
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "createTypedArray", 1, new LiteralExpression(creator))));
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1016b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesParcelableType::ReadArrayFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string creator = v->type->QualifiedName() + ".CREATOR";
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "readTypedArray", 2,
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    v, new LiteralExpression(creator)));
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::InterfaceType(const string& package, const string& name,
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        bool builtIn, bool oneway,
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        const string& declFile, int declLine)
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type(package, name, builtIn ? BUILT_IN : INTERFACE, true, false,
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        declFile, declLine)
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ,m_oneway(oneway)
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::OneWay() const
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_oneway;
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectInterfaceType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // parcel.writeStrongBinder(v != null ? v.asBinder() : null);
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new MethodCall(parcel, "writeStrongBinder", 1,
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Ternary(
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new Comparison(v, "!=", NULL_VALUE),
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(v, "asBinder"),
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    NULL_VALUE)));
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1053b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesInterfaceType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // v = Interface.asInterface(parcel.readStrongBinder());
10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string type = v->type->QualifiedName();
10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    type += ".Stub";
10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    addTo->Add(new Assignment(v,
10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new MethodCall( NAMES.Find(type), "asInterface", 1,
10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    new MethodCall(parcel, "readStrongBinder"))));
10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericType(const string& package, const string& name,
10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type(package, name, BUILT_IN, true, true)
10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_args = args;
10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_importName = package + '.' + name;
10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string gen = "<";
10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = args.size();
10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = args[i];
10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        gen += t->QualifiedName();
10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (i != N-1) {
10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            gen += ',';
10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    gen += '>';
10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_genericArguments = gen;
10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SetQualifiedName(m_importName + gen);
10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
108805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratoconst vector<Type*>&
108905ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericType::GenericArgumentTypes() const
109005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
109105ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    return m_args;
109205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
109305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::GenericArguments() const
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_genericArguments;
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ImportType() const
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return m_importName;
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::WriteToParcel\n");
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1113b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::CreateFromParcel\n");
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1120b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    fprintf(stderr, "implement GenericType::ReadFromParcel\n");
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::GenericListType(const string& package, const string& name,
11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                         const vector<Type*>& args)
11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :GenericType(package, name, args),
11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     m_creator(args[0]->CreatorName())
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::CreatorName() const
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "android.os.Parcel.arrayListCreator";
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstring
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::InstantiableName() const
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return "java.util.ArrayList" + GenericArguments();
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::WriteToParcel(StatementBlock* addTo, Variable* v, Variable* parcel, int flags)
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeStringList", 1, v));
11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v));
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // parcel.writeTypedListXX(arg);
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "writeTypedList", 1, v));
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
1161b9eba866b203b28e58f35598023f49b4b58a0635Elliott HughesGenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v, Variable* parcel, Variable**)
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createStringArrayList", 0)));
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createBinderArrayList", 0)));
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedArrayList(XXX.creator);
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new Assignment(v,
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new MethodCall(parcel, "createTypedArrayList", 1,
11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                   new LiteralExpression(m_creator))));
11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
1179b9eba866b203b28e58f35598023f49b4b58a0635Elliott Hughes                            Variable* parcel, Variable**)
11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (m_creator == STRING_TYPE->CreatorName()) {
11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readStringList", 1, v));
11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else if (m_creator == IBINDER_TYPE->CreatorName()) {
11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readBinderList", 1, v));
11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // v = _data.readTypedList(v, XXX.creator);
11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addTo->Add(new MethodCall(parcel, "readTypedList", 2,
11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       v,
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                       new LiteralExpression(m_creator)));
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
119305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
119405ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::WriteToRpcData(StatementBlock* addTo, Expression* k, Variable* v,
119505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, int flags)
119605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
119705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new MethodCall(data, "putList", 2, k, v));
119805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
119905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
120005ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onoratovoid
120105ffbe7c020c59ee4fa7e13e04641c954d591951Joe OnoratoGenericListType::CreateFromRpcData(StatementBlock* addTo, Expression* k, Variable* v,
120205ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato        Variable* data, Variable** cl)
120305ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato{
120405ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    string classArg = GenericArgumentTypes()[0]->QualifiedName();
120505ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    classArg += ".class";
120605ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato    addTo->Add(new Assignment(v, new MethodCall(data, "getList", 2, k,
120705ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato                    new LiteralExpression(classArg))));
120805ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato}
120905ffbe7c020c59ee4fa7e13e04641c954d591951Joe Onorato
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectClassLoaderType::ClassLoaderType()
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    :Type("java.lang", "ClassLoader", BUILT_IN, false, false)
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================================
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Namespace()
12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::~Namespace()
12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        delete m_types[i];
12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Add(Type* type)
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* t = Find(type->QualifiedName());
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (t == NULL) {
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        m_types.push_back(type);
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::AddGenericType(const string& package, const string& name, int args)
12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Generic g;
12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.package = package;
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.name = name;
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.qualified = package + '.' + name;
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g.args = args;
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    m_generics.push_back(g);
12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const string& name) const
12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->QualifiedName() == name) {
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Find(const char* package, const char* name) const
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string s;
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (package != NULL) {
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += package;
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        s += '.';
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    s += name;
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return Find(s);
12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic string
12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnormalize_generic(const string& s)
12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string r;
12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = s.size();
12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char c = s[i];
12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!isspace(c)) {
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            r += c;
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return r;
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectType*
12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Search(const string& name)
12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // an exact match wins
12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Type* result = Find(name);
12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result != NULL) {
12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // try the class names
13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // our language doesn't allow you to not specify outer classes
13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // when referencing an inner class.  that could be changed, and this
13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // would be the place to do it, but I don't think the complexity in
13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // scoping rules is worth it.
13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_types.size();
13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (m_types[i]->Name() == name) {
13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return m_types[i];
13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // we got to here and it's not a generic, give up
13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (name.find('<') == name.npos) {
13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // remove any whitespace
13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string normalized = normalize_generic(name);
13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // find the part before the '<', find a generic for it
13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ssize_t baseIndex = normalized.find('<');
13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    string base(normalized.c_str(), baseIndex);
13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    const Generic* g = search_generic(base);
13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g == NULL) {
13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // For each of the args, do a recursive search on it.  We don't allow
13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // generics within generics like Java does, because we're really limiting
13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // them to just built-in container classes, at least for now.  Our syntax
13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // ensures this right now as well.
13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    vector<Type*> args;
13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t start = baseIndex + 1;
13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    size_t end = start;
13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    while (normalized[start] != '\0') {
13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        end = normalized.find(',', start);
13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (end == normalized.npos) {
13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            end = normalized.find('>', start);
13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        string s(normalized.c_str()+start, end-start);
13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = this->Search(s);
13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (t == NULL) {
13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // maybe we should print a warning here?
13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NULL;
13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        args.push_back(t);
13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        start = end+1;
13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // construct a GenericType, add it to our name set so they always get
13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // the same object, and return it.
13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    result = make_generic_type(g->package, g->name, args);
13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (result == NULL) {
13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return NULL;
13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    this->Add(result);
13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return this->Find(result->QualifiedName());
13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst Namespace::Generic*
13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::search_generic(const string& name) const
13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int N = m_generics.size();
13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // first exact match
13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.qualified == name) {
13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // then name match
13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<N; i++) {
13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const Generic& g = m_generics[i];
13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g.name == name) {
13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return &g;
13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return NULL;
13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid
13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectNamespace::Dump() const
13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int n = m_types.size();
13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    for (int i=0; i<n; i++) {
13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Type* t = m_types[i];
13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        printf("type: package=%s name=%s qualifiedName=%s\n",
13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->Package().c_str(), t->Name().c_str(),
13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                t->QualifiedName().c_str());
13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1395