docs: def compute_json(self, build_context):
          """Compute and store a JSON serialization of this target for caching
             purposes.
  
          The serialization includes:
          - The build flavor
          - The builder name
          - Target tags
          - Hashes of target dependencies & buildenv
          - Processed props (where target props are replaced with their hashes,
            and file props are replaced with mapping from file name to its hash)
  
          It specifically does NOT include:
          - Artifacts produced by the target
  
          The target name is currently included, although it would be better off
          to leave it out, and allow targets to be renamed without affecting
          their caching status (if it's just a rename).
          It is currently included because it's the easy way to account for the
          fact that when cached artifacts are restored, their path may be a
          function of the target name in non-essential ways (such as a workspace
          dir name).
          """
          props = {}
          test_props = {}
          for prop in self.props:
              if prop in self._prop_json_blacklist:
                  continue
              sig_spec = Plugin.builders[self.builder_name].sig.get(prop)
              if sig_spec is None:
                  continue
              if prop in self._prop_json_testlist:
                  test_props[prop] = process_prop(sig_spec.type,
                                                  self.props[prop],
                                                  build_context)
              else:
                  props[prop] = process_prop(sig_spec.type, self.props[prop],
                                             build_context)
          json_dict = dict(
              # TODO: avoid including the name in the hashed json...
              name=self.name,
              builder_name=self.builder_name,
              deps=hashify_targets(self.deps, build_context),
              props=props,
              buildenv=hashify_targets(self.buildenv, build_context),
              tags=sorted(list(self.tags)),
              flavor=build_context.conf.flavor,  # TODO: any other conf args?
              # yabt_version=__version__,  # TODO: is this needed?
          )
          json_test_dict = dict(
              props=test_props,
          )
  
          self._json = json.dumps(json_dict, sort_keys=True, indent=4)
          self._test_json = json.dumps(json_test_dict, sort_keys=True, indent=4)