diff options
Diffstat (limited to 'runtime/class_linker.cc')
| -rw-r--r-- | runtime/class_linker.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index f2c2f03003..32ad422158 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -7024,6 +7024,23 @@ mirror::String* ClassLinker::ResolveString(const DexFile& dex_file, return string; } +mirror::String* ClassLinker::LookupString(const DexFile& dex_file, + uint32_t string_idx, + Handle<mirror::DexCache> dex_cache) { + DCHECK(dex_cache.Get() != nullptr); + mirror::String* resolved = dex_cache->GetResolvedString(string_idx); + if (resolved != nullptr) { + return resolved; + } + uint32_t utf16_length; + const char* utf8_data = dex_file.StringDataAndUtf16LengthByIdx(string_idx, &utf16_length); + mirror::String* string = intern_table_->LookupStrong(Thread::Current(), utf16_length, utf8_data); + if (string != nullptr) { + dex_cache->SetResolvedString(string_idx, string); + } + return string; +} + mirror::Class* ClassLinker::ResolveType(const DexFile& dex_file, uint16_t type_idx, mirror::Class* referrer) { |