diff options
Diffstat (limited to 'runtime/mirror/class.cc')
| -rw-r--r-- | runtime/mirror/class.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/runtime/mirror/class.cc b/runtime/mirror/class.cc index 3590586228..05a9039ae9 100644 --- a/runtime/mirror/class.cc +++ b/runtime/mirror/class.cc @@ -802,6 +802,18 @@ mirror::Class* Class::GetDirectInterface(Thread* self, Handle<mirror::Class> kla } } +mirror::Class* Class::GetCommonSuperClass(Handle<Class> klass) { + DCHECK(klass.Get() != nullptr); + DCHECK(!klass->IsInterface()); + DCHECK(!IsInterface()); + mirror::Class* common_super_class = this; + while (!common_super_class->IsAssignableFrom(klass.Get())) { + common_super_class = common_super_class->GetSuperClass(); + } + DCHECK(common_super_class != nullptr); + return common_super_class; +} + const char* Class::GetSourceFile() { const DexFile& dex_file = GetDexFile(); const DexFile::ClassDef* dex_class_def = GetClassDef(); |