Change dex cache to be java object instead of array, add pointer to dex file in dex cache.

Generic clean up to facilitate having GDB macros for Pretty* helper functions.

Improved cleanliness of DexCache since having it as an object array was not the best solution.

Fixed a bug in InOrderWalk caused by ResolveType sometimes allocating classes.

Rename C++ Method to AbstractMethod and add two new classes Constructor, Method which both inherit from AbstractMethod.

Rename done to have the C++ code be closer to the java code.

Change-Id: I4995b4c5e47a3822192b08afa24a639d3b1f4da9
diff --git a/src/dex_cache.cc b/src/dex_cache.cc
index 02a8a55..adb889b 100644
--- a/src/dex_cache.cc
+++ b/src/dex_cache.cc
@@ -23,29 +23,34 @@
 
 namespace art {
 
-void DexCache::Init(String* location,
+void DexCache::Init(const DexFile* dex_file,
+                    String* location,
                     ObjectArray<String>* strings,
                     ObjectArray<Class>* resolved_types,
-                    ObjectArray<Method>* resolved_methods,
+                    ObjectArray<AbstractMethod>* resolved_methods,
                     ObjectArray<Field>* resolved_fields,
                     ObjectArray<StaticStorageBase>* initialized_static_storage) {
+  CHECK(dex_file != NULL);
   CHECK(location != NULL);
   CHECK(strings != NULL);
   CHECK(resolved_types != NULL);
   CHECK(resolved_methods != NULL);
   CHECK(resolved_fields != NULL);
   CHECK(initialized_static_storage != NULL);
-  Set(kLocation,                 location);
-  Set(kStrings,                  strings);
-  Set(kResolvedTypes,            resolved_types);
-  Set(kResolvedMethods,          resolved_methods);
-  Set(kResolvedFields,           resolved_fields);
-  Set(kInitializedStaticStorage, initialized_static_storage);
+
+  SetFieldPtr(OFFSET_OF_OBJECT_MEMBER(DexCache, dex_file_), dex_file, false);
+  SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, location_), location, false);
+  SetFieldObject(StringsOffset(), strings, false);
+  SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, resolved_types_), resolved_types, false);
+  SetFieldObject(ResolvedMethodsOffset(), resolved_methods, false);
+  SetFieldObject(ResolvedFieldsOffset(), resolved_fields, false);
+  SetFieldObject(OFFSET_OF_OBJECT_MEMBER(DexCache, initialized_static_storage_),
+                 initialized_static_storage, false);
 
   Runtime* runtime = Runtime::Current();
   if (runtime->HasResolutionMethod()) {
     // Initialize the resolve methods array to contain trampolines for resolution.
-    Method* trampoline = runtime->GetResolutionMethod();
+    AbstractMethod* trampoline = runtime->GetResolutionMethod();
     size_t length = resolved_methods->GetLength();
     for (size_t i = 0; i < length; i++) {
       resolved_methods->SetWithoutChecks(i, trampoline);
@@ -53,10 +58,10 @@
   }
 }
 
-void DexCache::Fixup(Method* trampoline) {
+void DexCache::Fixup(AbstractMethod* trampoline) {
   // Fixup the resolve methods array to contain trampoline for resolution.
   CHECK(trampoline != NULL);
-  ObjectArray<Method>* resolved_methods = down_cast<ObjectArray<Method>*>(Get(kResolvedMethods));
+  ObjectArray<AbstractMethod>* resolved_methods = GetResolvedMethods();
   size_t length = resolved_methods->GetLength();
   for (size_t i = 0; i < length; i++) {
     if (resolved_methods->GetWithoutChecks(i) == NULL) {