code: def calculating_node_creator(self, classes_by_source, runtime_classpath, product_deps_by_src,
                                 target_to_vts):
      
      analyzer = JvmDependencyAnalyzer(get_buildroot(), runtime_classpath)
      targets = self.context.targets()
      targets_by_file = analyzer.targets_by_file(targets)
      transitive_deps_by_target = analyzer.compute_transitive_deps_by_target(targets)
      def creator(target):
        transitive_deps = set(transitive_deps_by_target.get(target))
        node = self.create_dep_usage_node(target,
                                          analyzer,
                                          product_deps_by_src,
                                          classes_by_source,
                                          targets_by_file,
                                          transitive_deps)
        vt = target_to_vts[target]
        mode = 'w' if PY3 else 'wb'
        with open(self.nodes_json(vt.results_dir), mode=mode) as fp:
          json.dump(node.to_cacheable_dict(), fp, indent=2, sort_keys=True)
        vt.update()
        return node
  
      return creator
docs: Strategy directly computes dependency graph node based on
      `classes_by_source`, `runtime_classpath`, `product_deps_by_src` parameters and
      stores the result to the build cache.