code: def _rearrange_output_for_package(self, target_workdir, java_package):
      
      package_dir_rel = java_package.replace('.', os.path.sep)
      package_dir = os.path.join(target_workdir, package_dir_rel)
      safe_mkdir(package_dir)
      for root, dirs, files in safe_walk(target_workdir):
        if root == package_dir_rel:
          # This path is already in the correct location
          continue
        for f in files:
          os.rename(
            os.path.join(root, f),
            os.path.join(package_dir, f)
          )
  
      # Remove any empty directories that were left behind
      for root, dirs, files in safe_walk(target_workdir, topdown = False):
        for d in dirs:
          full_dir = os.path.join(root, d)
          if not os.listdir(full_dir):
            os.rmdir(full_dir)
docs: Rearrange the output files to match a standard Java structure.
  
      Antlr emits a directory structure based on the relative path provided
      for the grammar file. If the source root of the file is different from
      the Pants build root, then the Java files end up with undesired parent
      directories.