in buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java [94:193]
private static void setupApiInformationAnalysis(Project project) {
File metalavaOutputJarFile = new File(project.getRootProject().getBuildDir(), "metalava.jar");
SourceSet mainSourceSet =
project
.getConvention()
.getPlugin(JavaPluginConvention.class)
.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.dependsOn("getMetalavaJar");
task.setSourceSet(mainSourceSet);
});
project.getTasks().getByName("check").dependsOn(docStubs);
project.afterEvaluate(
p -> {
FileCollection classpath =
project
.getConfigurations()
.getByName("runtimeClasspath")
.getIncoming()
.artifactView(
config ->
config.attributes(
container ->
container.attribute(
Attribute.of("artifactType", String.class), "jar")))
.getArtifacts()
.getArtifactFiles();
apiInfo.configure(t -> t.setClassPath(classpath));
generateApiTxt.configure(t -> t.setClassPath(classpath));
docStubs.configure(t -> t.setClassPath(classpath));
});
}