summaryrefslogtreecommitdiff
path: root/runtime/class_linker.cc
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2018-11-21 14:55:10 -0800
committer Andreas Gampe <agampe@google.com> 2018-11-21 14:55:10 -0800
commit4835d21a33b783869820c928bfc0a16f249d65f2 (patch)
treefe49fa458772f3e43c8a55c51a07a68c360cccf6 /runtime/class_linker.cc
parent5a78e8dbf068c544b84e98f636b30045b09451c4 (diff)
ART: Fix ResolveType with ArtMethod
ArtMethods may be obsolete. In that case, the dex cache of the declaring class is not correct. Refactor the code to avoid issues. Partially reverts commit 09c5ca40635faee00f40f6ca0581dd475efd545e. Bug: 119830111 Test: m test-art-host Change-Id: Ibf89af48e6384569c2abd6d5846cf05c929679d0
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r--runtime/class_linker.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 639fa7ec92..b1eb03b04a 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -8076,14 +8076,22 @@ ObjPtr<mirror::Class> ClassLinker::DoLookupResolvedType(dex::TypeIndex type_idx,
return type;
}
-ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx,
- ObjPtr<mirror::Class> referrer) {
+template <typename T>
+ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx, T referrer) {
StackHandleScope<2> hs(Thread::Current());
Handle<mirror::DexCache> dex_cache(hs.NewHandle(referrer->GetDexCache()));
Handle<mirror::ClassLoader> class_loader(hs.NewHandle(referrer->GetClassLoader()));
return DoResolveType(type_idx, dex_cache, class_loader);
}
+// Instantiate the above.
+template ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx,
+ ArtField* referrer);
+template ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx,
+ ArtMethod* referrer);
+template ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx,
+ ObjPtr<mirror::Class> referrer);
+
ObjPtr<mirror::Class> ClassLinker::DoResolveType(dex::TypeIndex type_idx,
Handle<mirror::DexCache> dex_cache,
Handle<mirror::ClassLoader> class_loader) {