diff options
Diffstat (limited to 'runtime/class_linker.h')
| -rw-r--r-- | runtime/class_linker.h | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/runtime/class_linker.h b/runtime/class_linker.h index 4975c29742..9217c32fe7 100644 --- a/runtime/class_linker.h +++ b/runtime/class_linker.h @@ -60,6 +60,13 @@ template<size_t kNumReferences> class PACKED(4) StackHandleScope; enum VisitRootFlags : uint8_t; +class ClassVisitor { + public: + virtual ~ClassVisitor() {} + // Return true to continue visiting. + virtual bool operator()(mirror::Class* klass) = 0; +}; + class ClassLoaderVisitor { public: virtual ~ClassLoaderVisitor() {} @@ -284,6 +291,15 @@ class ClassLinker { ArtMethod* GetResolvedMethod(uint32_t method_idx, ArtMethod* referrer) SHARED_REQUIRES(Locks::mutator_lock_); + + // This returns the class referred to by GetMethodId(method_idx).class_idx_. This might be + // different then the declaring class of the resolved method due to copied + // miranda/default/conflict methods. + mirror::Class* ResolveReferencedClassOfMethod(Thread* self, + uint32_t method_idx, + ArtMethod* referrer) + SHARED_REQUIRES(Locks::mutator_lock_) + REQUIRES(!dex_lock_, !Roles::uninterruptible_); template <ResolveMode kResolveMode> ArtMethod* ResolveMethod(Thread* self, uint32_t method_idx, ArtMethod* referrer, InvokeType type) SHARED_REQUIRES(Locks::mutator_lock_) @@ -432,11 +448,10 @@ class ClassLinker { mirror::Class::Status& oat_file_class_status) SHARED_REQUIRES(Locks::mutator_lock_) REQUIRES(!dex_lock_); - void ResolveClassExceptionHandlerTypes(const DexFile& dex_file, - Handle<mirror::Class> klass) + void ResolveClassExceptionHandlerTypes(Handle<mirror::Class> klass) SHARED_REQUIRES(Locks::mutator_lock_) REQUIRES(!dex_lock_); - void ResolveMethodExceptionHandlerTypes(const DexFile& dex_file, ArtMethod* klass) + void ResolveMethodExceptionHandlerTypes(ArtMethod* klass) SHARED_REQUIRES(Locks::mutator_lock_) REQUIRES(!dex_lock_); @@ -999,11 +1014,13 @@ class ClassLinker { SHARED_REQUIRES(Locks::mutator_lock_) REQUIRES(!Locks::classlinker_classes_lock_); - void UpdateAppImageClassLoadersAndDexCaches( + bool UpdateAppImageClassLoadersAndDexCaches( gc::space::ImageSpace* space, Handle<mirror::ClassLoader> class_loader, Handle<mirror::ObjectArray<mirror::DexCache>> dex_caches, - bool added_class_table) + bool added_class_table, + bool* out_forward_dex_cache_array, + std::string* out_error_msg) REQUIRES(!dex_lock_) SHARED_REQUIRES(Locks::mutator_lock_); |