コード例 #1
0
  @Override
  public void modifyOutputStream(JarOutputStream jos) throws IOException {
    for (Map.Entry<String, ServiceStream> entry : serviceEntries.entrySet()) {
      String key = entry.getKey();
      ServiceStream data = entry.getValue();

      if (relocators != null) {
        key = key.substring(SERVICES_PATH.length() + 1);
        for (Relocator relocator : relocators) {
          if (relocator.canRelocateClass(key)) {
            key = relocator.relocateClass(key);
            break;
          }
        }
        key = SERVICES_PATH + '/' + key;
      }

      jos.putNextEntry(new JarEntry(key));

      PrintWriter writer = new PrintWriter(jos);
      InputStreamReader streamReader = new InputStreamReader(data.toInputStream());
      try (BufferedReader reader = new BufferedReader(streamReader)) {
        String className;

        while ((className = reader.readLine()) != null) {
          if (relocators != null) {
            for (Relocator relocator : relocators) {
              if (relocator.canRelocateClass(className)) {
                className = relocator.applyToSourceContent(className);
                break;
              }
            }
          }

          writer.println(className);
          writer.flush();
        }
      }

      data.reset();
    }
  }