[veridex] Reflective usage detection improvements.

- Convert a string name to the internal name
- Recognize ClassLoader.loadClass.
- Do a dummy merge in VeriFlow by just overwriting registers.

bug: 77513322
Test: m

(cherry picked from commit 295cba006e5212c06fde5ec956c81c507b2974e6)

Change-Id: I888ff742197f4aec9aee68a03daca84f165e4114
diff --git a/tools/veridex/flow_analysis.cc b/tools/veridex/flow_analysis.cc
index abd0b9b..a4553f9 100644
--- a/tools/veridex/flow_analysis.cc
+++ b/tools/veridex/flow_analysis.cc
@@ -41,7 +41,11 @@
 bool VeriFlowAnalysis::MergeRegisterValues(uint32_t dex_pc) {
   // TODO: Do the merging. Right now, just return that we should continue
   // the iteration if the instruction has not been visited.
-  return !instruction_infos_[dex_pc].has_been_visited;
+  if (!instruction_infos_[dex_pc].has_been_visited) {
+    dex_registers_[dex_pc]->assign(current_registers_.begin(), current_registers_.end());
+    return true;
+  }
+  return false;
 }
 
 void VeriFlowAnalysis::SetVisited(uint32_t dex_pc) {
@@ -260,6 +264,10 @@
         RegisterValue obj = GetRegister(args[0]);
         last_result_ = RegisterValue(
             obj.GetSource(), obj.GetDexFileReference(), VeriClass::class_);
+      } else if (method == VeriClass::loadClass_) {
+        RegisterValue value = GetRegister(args[1]);
+        last_result_ = RegisterValue(
+            value.GetSource(), value.GetDexFileReference(), VeriClass::class_);
       } else {
         last_result_ = GetReturnType(instruction.VRegB_35c());
       }