Static and direct resolution stub.

Ensure that invoke static and direct go through a stub that causes
resolution and initialization.

Change-Id: I872900560322817d8f4378b04ac410d9ea0b3b17
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 2c69651..ff3c6be 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -2401,6 +2401,14 @@
   return resolved;
 }
 
+const char* ClassLinker::MethodShorty(uint32_t method_idx, Method* referrer) {
+  Class* declaring_class = referrer->GetDeclaringClass();
+  DexCache* dex_cache = declaring_class->GetDexCache();
+  const DexFile& dex_file = FindDexFile(dex_cache);
+  const DexFile::MethodId& method_id = dex_file.GetMethodId(method_idx);
+  return dex_file.GetShorty(method_id.proto_idx_);
+}
+
 void ClassLinker::DumpAllClasses(int flags) const {
   // TODO: at the time this was written, it wasn't safe to call PrettyField with the ClassLinker
   // lock held, because it might need to resolve a field's type, which would try to take the lock.