code: def get(self, context):
      
      if self.get_options().recursive:
        requested_targets = context.targets(exclude_scopes=Scope(self.get_options().exclude_scopes))
      else:
        requested_targets = list(context.target_roots)
  
      expanded_targets = list(requested_targets)
      # We want to act on targets derived from the specified, e.g., if acting on a binary
      # jar_library we actually want to act on the derived java_library wrapping the decompiled
      # sources.
      for t in requested_targets:
        expanded_targets.extend(context.build_graph.get_all_derivatives(t.address))
  
      return tuple(sorted(
        [t for t in expanded_targets if isinstance(t, JvmTarget) and t.has_sources('.java')],
        key=lambda t: t.address.spec))
docs: Return the indexable targets in the given context.
  
      Computes them lazily from the given context.  They are then fixed for the duration
      of the run, even if this method is called again with a different context.