private List findLombokClasses()

in src/main/java/com/uber/scip/extractor/LombokJarProcessor.java [49:104]


  private List<JarEntryInfo> findLombokClasses(File inputJar) throws IOException {
    List<JarEntryInfo> lombokClasses = new ArrayList<>();

    Set<String> lombokClassesSet = new HashSet<>();

    try (JarFile jarIn = new JarFile(inputJar)) {
      jarIn
          .entries()
          .asIterator()
          .forEachRemaining(
              entry -> {
                if (entry.getName().endsWith(".class")) {
                  try {
                    if (isLombokGeneratedClass(entry, jarIn)) {
                      String parentClassName = entry.getName();
                      if (entry.getName().contains("$")) {
                        parentClassName =
                            entry.getName().substring(0, entry.getName().indexOf("$"));
                      }
                      parentClassName = parentClassName.replace(".class", "");
                      lombokClassesSet.add(parentClassName);
                    }
                  } catch (IOException e) {
                    logger.warn("Failed to analyze class file: " + entry.getName(), e);
                  }
                }
              });
      jarIn
          .entries()
          .asIterator()
          .forEachRemaining(
              entry -> {
                if (entry.getName().endsWith(".class")) {
                  String parentClassName = entry.getName();
                  if (entry.getName().contains("$")) {
                    // lombok annotation is defined in a nested class
                    parentClassName = entry.getName().substring(0, entry.getName().indexOf("$"));
                  }
                  parentClassName = parentClassName.replace(".class", "");
                  try {
                    if (lombokClassesSet.contains(parentClassName)) {
                      lombokClasses.add(
                          new JarEntryInfo(
                              entry.getName(), jarIn.getInputStream(entry).readAllBytes()));
                      logger.debug("Found Lombok-generated class: {}", entry.getName());
                    }
                  } catch (IOException e) {
                    logger.warn("Failed to analyze class file: " + entry.getName(), e);
                  }
                }
              });
    }

    logger.debug("Found {} Lombok-generated classes", lombokClasses.size());
    return lombokClasses;
  }