code: public void traverseMethod(String methodID) {
      MethodReferenceNode node = (MethodReferenceNode) elementReferenceMap.get(methodID);
      if (node == null) {
        //TODO(malvania): This might never be reached, because we create a node for every method,
        //                both invoked and declared.
        ErrorUtil.warning("Encountered .class method while accessing: " + methodID);
        return;
      }
      if (node.reachable) {
        return;
      }
      node.reachable = true;
      markParentClasses(ElementUtil.getDeclaringClass(node.methodElement));
  
      for (String invokedMethodID : node.invokedMethods) {
        traverseMethod(invokedMethodID);
      }
      for (String overrideMethodID : node.overridingMethods) {
        traverseMethod(overrideMethodID);
      }
    }
docs: Traverses the method invocation graph created by ElementReferenceMapper, and marks all methods
  that are reachable from the inputRootSet. Also covers all methods that possibly override these
  called methods.
  @param methodID