Remove *_TYPE global variables.

At long last, the type interface is entirely contained
within an instance of JavaTypeNamespace.

Bug: 24303749
Test: Compiles, unittests pass, clean build of Android passes

Change-Id: I0a7e993c0e9492158874831671100f2c42c3d008
diff --git a/type_java.cpp b/type_java.cpp
index cffdf44..ae3dcda 100644
--- a/type_java.cpp
+++ b/type_java.cpp
@@ -24,31 +24,6 @@
 namespace android {
 namespace aidl {
 
-Type* VOID_TYPE;
-Type* BOOLEAN_TYPE;
-Type* BYTE_TYPE;
-Type* CHAR_TYPE;
-Type* INT_TYPE;
-Type* LONG_TYPE;
-Type* FLOAT_TYPE;
-Type* DOUBLE_TYPE;
-Type* STRING_TYPE;
-Type* OBJECT_TYPE;
-Type* CHAR_SEQUENCE_TYPE;
-Type* TEXT_UTILS_TYPE;
-Type* REMOTE_EXCEPTION_TYPE;
-Type* RUNTIME_EXCEPTION_TYPE;
-Type* IBINDER_TYPE;
-Type* IINTERFACE_TYPE;
-Type* BINDER_NATIVE_TYPE;
-Type* BINDER_PROXY_TYPE;
-Type* PARCEL_TYPE;
-Type* PARCELABLE_INTERFACE_TYPE;
-Type* CONTEXT_TYPE;
-Type* MAP_TYPE;
-Type* LIST_TYPE;
-Type* CLASSLOADER_TYPE;
-
 Expression* NULL_VALUE;
 Expression* THIS_VALUE;
 Expression* SUPER_VALUE;
@@ -176,7 +151,7 @@
     return new LiteralExpression("0");
   }
   if ((flags & PARCELABLE_WRITE_RETURN_VALUE) != 0) {
-    return new FieldVariable(PARCELABLE_INTERFACE_TYPE,
+    return new FieldVariable(m_types->ParcelableInterfaceType(),
                              "PARCELABLE_WRITE_RETURN_VALUE");
   }
   return new LiteralExpression("0");
@@ -354,8 +329,8 @@
   ifpart->elseif = elsepart;
   ifpart->statements->Add(
       new MethodCall(parcel, "writeInt", 1, new LiteralExpression("1")));
-  ifpart->statements->Add(new MethodCall(TEXT_UTILS_TYPE, "writeToParcel", 3, v,
-                                         parcel,
+  ifpart->statements->Add(new MethodCall(m_types->TextUtilsType(),
+                                         "writeToParcel", 3, v, parcel,
                                          BuildWriteToParcelFlags(flags)));
 
   addTo->Add(ifpart);
@@ -376,7 +351,7 @@
                                       new MethodCall(parcel, "readInt"));
   ifpart->elseif = elsepart;
   ifpart->statements->Add(new Assignment(
-      v, new MethodCall(TEXT_UTILS_TYPE,
+      v, new MethodCall(m_types->TextUtilsType(),
                         "CHAR_SEQUENCE_CREATOR.createFromParcel", 1, parcel)));
 
   addTo->Add(ifpart);
@@ -529,26 +504,27 @@
   addTo->Add(new MethodCall(parcel, "writeMap", 1, v));
 }
 
-static void EnsureClassLoader(StatementBlock* addTo, Variable** cl) {
+static void EnsureClassLoader(StatementBlock* addTo, Variable** cl,
+                              const JavaTypeNamespace* types) {
   // We don't want to look up the class loader once for every
   // collection argument, so ensure we do it at most once per method.
   if (*cl == NULL) {
-    *cl = new Variable(CLASSLOADER_TYPE, "cl");
+    *cl = new Variable(types->ClassLoaderType(), "cl");
     addTo->Add(new VariableDeclaration(
         *cl, new LiteralExpression("this.getClass().getClassLoader()"),
-        CLASSLOADER_TYPE));
+        types->ClassLoaderType()));
   }
 }
 
 void MapType::CreateFromParcel(StatementBlock* addTo, Variable* v,
                                Variable* parcel, Variable** cl) const {
-  EnsureClassLoader(addTo, cl);
+  EnsureClassLoader(addTo, cl, m_types);
   addTo->Add(new Assignment(v, new MethodCall(parcel, "readHashMap", 1, *cl)));
 }
 
 void MapType::ReadFromParcel(StatementBlock* addTo, Variable* v,
                              Variable* parcel, Variable** cl) const {
-  EnsureClassLoader(addTo, cl);
+  EnsureClassLoader(addTo, cl, m_types);
   addTo->Add(new MethodCall(parcel, "readMap", 2, v, *cl));
 }
 
@@ -566,14 +542,14 @@
 
 void ListType::CreateFromParcel(StatementBlock* addTo, Variable* v,
                                 Variable* parcel, Variable** cl) const {
-  EnsureClassLoader(addTo, cl);
+  EnsureClassLoader(addTo, cl, m_types);
   addTo->Add(
       new Assignment(v, new MethodCall(parcel, "readArrayList", 1, *cl)));
 }
 
 void ListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
                               Variable* parcel, Variable** cl) const {
-  EnsureClassLoader(addTo, cl);
+  EnsureClassLoader(addTo, cl, m_types);
   addTo->Add(new MethodCall(parcel, "readList", 2, v, *cl));
 }
 
@@ -762,9 +738,9 @@
 
 void GenericListType::WriteToParcel(StatementBlock* addTo, Variable* v,
                                     Variable* parcel, int flags) const {
-  if (m_creator == STRING_TYPE->CreatorName()) {
+  if (m_creator == m_types->StringType()->CreatorName()) {
     addTo->Add(new MethodCall(parcel, "writeStringList", 1, v));
-  } else if (m_creator == IBINDER_TYPE->CreatorName()) {
+  } else if (m_creator == m_types->IBinderType()->CreatorName()) {
     addTo->Add(new MethodCall(parcel, "writeBinderList", 1, v));
   } else {
     // parcel.writeTypedListXX(arg);
@@ -774,10 +750,10 @@
 
 void GenericListType::CreateFromParcel(StatementBlock* addTo, Variable* v,
                                        Variable* parcel, Variable**) const {
-  if (m_creator == STRING_TYPE->CreatorName()) {
+  if (m_creator == m_types->StringType()->CreatorName()) {
     addTo->Add(
         new Assignment(v, new MethodCall(parcel, "createStringArrayList", 0)));
-  } else if (m_creator == IBINDER_TYPE->CreatorName()) {
+  } else if (m_creator == m_types->IBinderType()->CreatorName()) {
     addTo->Add(
         new Assignment(v, new MethodCall(parcel, "createBinderArrayList", 0)));
   } else {
@@ -790,9 +766,9 @@
 
 void GenericListType::ReadFromParcel(StatementBlock* addTo, Variable* v,
                                      Variable* parcel, Variable**) const {
-  if (m_creator == STRING_TYPE->CreatorName()) {
+  if (m_creator == m_types->StringType()->CreatorName()) {
     addTo->Add(new MethodCall(parcel, "readStringList", 1, v));
-  } else if (m_creator == IBINDER_TYPE->CreatorName()) {
+  } else if (m_creator == m_types->IBinderType()->CreatorName()) {
     addTo->Add(new MethodCall(parcel, "readBinderList", 1, v));
   } else {
     // v = _data.readTypedList(v, XXX.creator);
@@ -809,90 +785,75 @@
 // ================================================================
 
 JavaTypeNamespace::JavaTypeNamespace() {
-  VOID_TYPE = new BasicType(this, "void", "XXX", "XXX", "XXX", "XXX", "XXX");
-  Add(VOID_TYPE);
+  Add(new BasicType(this, "void", "XXX", "XXX", "XXX", "XXX", "XXX"));
 
-  BOOLEAN_TYPE = new BooleanType(this);
-  Add(BOOLEAN_TYPE);
+  m_bool_type = new BooleanType(this);
+  Add(m_bool_type);
 
-  BYTE_TYPE =
-      new BasicType(this, "byte", "writeByte", "readByte", "writeByteArray",
-                    "createByteArray", "readByteArray");
-  Add(BYTE_TYPE);
+  Add(new BasicType(this, "byte", "writeByte", "readByte", "writeByteArray",
+                    "createByteArray", "readByteArray"));
 
-  CHAR_TYPE = new CharType(this);
-  Add(CHAR_TYPE);
+  Add(new CharType(this));
 
-  INT_TYPE = new BasicType(this, "int", "writeInt", "readInt", "writeIntArray",
-                           "createIntArray", "readIntArray");
-  Add(INT_TYPE);
-  m_int_type = INT_TYPE;
+  m_int_type = new BasicType(this, "int", "writeInt", "readInt",
+                             "writeIntArray", "createIntArray", "readIntArray");
+  Add(m_int_type);
 
-  LONG_TYPE =
-      new BasicType(this, "long", "writeLong", "readLong", "writeLongArray",
-                    "createLongArray", "readLongArray");
-  Add(LONG_TYPE);
+  Add(new BasicType(this, "long", "writeLong", "readLong", "writeLongArray",
+                    "createLongArray", "readLongArray"));
 
-  FLOAT_TYPE =
-      new BasicType(this, "float", "writeFloat", "readFloat", "writeFloatArray",
-                    "createFloatArray", "readFloatArray");
-  Add(FLOAT_TYPE);
+  Add(new BasicType(this, "float", "writeFloat", "readFloat", "writeFloatArray",
+                    "createFloatArray", "readFloatArray"));
 
-  DOUBLE_TYPE =
-      new BasicType(this, "double", "writeDouble", "readDouble",
-                    "writeDoubleArray", "createDoubleArray", "readDoubleArray");
-  Add(DOUBLE_TYPE);
+  Add(new BasicType(this, "double", "writeDouble", "readDouble",
+                    "writeDoubleArray", "createDoubleArray",
+                    "readDoubleArray"));
 
-  STRING_TYPE = new StringType(this);
-  Add(STRING_TYPE);
+  m_string_type = new class StringType(this);
+  Add(m_string_type);
 
-  OBJECT_TYPE =
-      new Type(this, "java.lang", "Object", Type::BUILT_IN, false, false);
-  Add(OBJECT_TYPE);
+  Add(new Type(this, "java.lang", "Object", Type::BUILT_IN, false, false));
 
-  CHAR_SEQUENCE_TYPE = new CharSequenceType(this);
-  Add(CHAR_SEQUENCE_TYPE);
+  Add(new CharSequenceType(this));
 
-  MAP_TYPE = new MapType(this);
-  Add(MAP_TYPE);
+  Add(new MapType(this));
 
-  LIST_TYPE = new ListType(this);
-  Add(LIST_TYPE);
+  Add(new ListType(this));
 
-  TEXT_UTILS_TYPE =
+  m_text_utils_type =
       new Type(this, "android.text", "TextUtils", Type::BUILT_IN, false, false);
-  Add(TEXT_UTILS_TYPE);
+  Add(m_text_utils_type);
 
-  REMOTE_EXCEPTION_TYPE = new RemoteExceptionType(this);
-  Add(REMOTE_EXCEPTION_TYPE);
+  m_remote_exception_type = new class RemoteExceptionType(this);
+  Add(m_remote_exception_type);
 
-  RUNTIME_EXCEPTION_TYPE = new RuntimeExceptionType(this);
-  Add(RUNTIME_EXCEPTION_TYPE);
+  m_runtime_exception_type = new class RuntimeExceptionType(this);
+  Add(m_runtime_exception_type);
 
-  IBINDER_TYPE = new IBinderType(this);
-  Add(IBINDER_TYPE);
+  m_ibinder_type = new class IBinderType(this);
+  Add(m_ibinder_type);
 
-  IINTERFACE_TYPE = new IInterfaceType(this);
-  Add(IINTERFACE_TYPE);
+  m_iinterface_type = new class IInterfaceType(this);
+  Add(m_iinterface_type);
 
-  BINDER_NATIVE_TYPE = new BinderType(this);
-  Add(BINDER_NATIVE_TYPE);
+  m_binder_native_type = new class BinderType(this);
+  Add(m_binder_native_type);
 
-  BINDER_PROXY_TYPE = new BinderProxyType(this);
-  Add(BINDER_PROXY_TYPE);
+  m_binder_proxy_type = new class BinderProxyType(this);
+  Add(m_binder_proxy_type);
 
-  PARCEL_TYPE = new ParcelType(this);
-  Add(PARCEL_TYPE);
+  m_parcel_type = new class ParcelType(this);
+  Add(m_parcel_type);
 
-  PARCELABLE_INTERFACE_TYPE = new ParcelableInterfaceType(this);
-  Add(PARCELABLE_INTERFACE_TYPE);
+  m_parcelable_interface_type = new class ParcelableInterfaceType(this);
+  Add(m_parcelable_interface_type);
 
-  CONTEXT_TYPE = new Type(this, "android.content", "Context", Type::BUILT_IN,
-                          false, false);
-  Add(CONTEXT_TYPE);
+  m_context_type = new class Type(this, "android.content", "Context",
+                                  Type::BUILT_IN, false, false);
+  Add(m_context_type);
 
-  CLASSLOADER_TYPE = new ClassLoaderType(this);
-  Add(CLASSLOADER_TYPE);
+  m_classloader_type = new class ClassLoaderType(this);
+  Add(m_classloader_type);
 
   NULL_VALUE = new LiteralExpression("null");
   THIS_VALUE = new LiteralExpression("this");
@@ -1074,8 +1035,8 @@
     return NULL;
   }
 
-  this->Add(result);
-  return this->Find(result->QualifiedName());
+  Add(result);
+  return Find(result->QualifiedName());
 }
 
 const JavaTypeNamespace::Generic* JavaTypeNamespace::search_generic(
@@ -1110,7 +1071,5 @@
   }
 }
 
-const Type* JavaTypeNamespace::IntType() const { return m_int_type; }
-
 }  // namespace aidl
 }  // namespace android