private static void setupApiInformationAnalysis()

in buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java [118:211]


  private static void setupApiInformationAnalysis(Project project, LibraryExtension android) {
    File metalavaOutputJarFile = new File(project.getRootProject().getBuildDir(), "metalava.jar");
    AndroidSourceSet mainSourceSet = android.getSourceSets().getByName("main");
    File outputFile =
        project
            .getRootProject()
            .file(
                Paths.get(
                    project.getRootProject().getBuildDir().getPath(),
                    "apiinfo",
                    project.getPath().substring(1).replace(":", "_")));
    File outputApiFile = new File(outputFile.getAbsolutePath() + "_api.txt");

    project
        .getTasks()
        .register(
            "getMetalavaJar",
            GetMetalavaJarTask.class,
            task -> {
              task.setOutputFile(metalavaOutputJarFile);
            });
    File apiTxt =
        project.file("api.txt").exists()
            ? project.file("api.txt")
            : project.file(project.getRootDir() + "/empty-api.txt");
    TaskProvider<ApiInformationTask> apiInfo =
        project
            .getTasks()
            .register(
                "apiInformation",
                ApiInformationTask.class,
                task -> {
                  task.setApiTxt(apiTxt);
                  task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
                  task.setSourceSet(mainSourceSet);
                  task.setOutputFile(outputFile);
                  task.setBaselineFile(project.file("baseline.txt"));
                  task.setOutputApiFile(outputApiFile);
                  if (project.hasProperty("updateBaseline")) {
                    task.setUpdateBaseline(true);
                  } else {
                    task.setUpdateBaseline(false);
                  }
                  task.dependsOn("getMetalavaJar");
                });

    TaskProvider<GenerateApiTxtFileTask> generateApiTxt =
        project
            .getTasks()
            .register(
                "generateApiTxtFile",
                GenerateApiTxtFileTask.class,
                task -> {
                  task.setApiTxt(project.file("api.txt"));
                  task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
                  task.setSourceSet(mainSourceSet);
                  task.setBaselineFile(project.file("baseline.txt"));
                  task.setUpdateBaseline(project.hasProperty("updateBaseline"));
                  task.dependsOn("getMetalavaJar");
                });

    TaskProvider<GenerateStubsTask> docStubs =
        project
            .getTasks()
            .register(
                "docStubs",
                GenerateStubsTask.class,
                task -> {
                  task.setSourceSet(mainSourceSet);
                });
    project.getTasks().getByName("check").dependsOn(docStubs);

    android
        .getLibraryVariants()
        .all(
            v -> {
              if (v.getName().equals("release")) {
                FileCollection jars =
                    v.getCompileConfiguration()
                        .getIncoming()
                        .artifactView(
                            config ->
                                config.attributes(
                                    container ->
                                        container.attribute(
                                            Attribute.of("artifactType", String.class), "jar")))
                        .getArtifacts()
                        .getArtifactFiles();
                apiInfo.configure(t -> t.setClassPath(jars));
                generateApiTxt.configure(t -> t.setClassPath(jars));
                docStubs.configure(t -> t.setClassPath(jars));
              }
            });
  }