Skip to content

Split source of encoders. #1033

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,18 @@

import com.android.build.gradle.LibraryExtension;
import com.android.build.gradle.api.AndroidSourceSet;
import com.android.build.gradle.api.LibraryVariant;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.firebase.gradle.plugins.apiinfo.GenerateApiTxtFileTask;
import com.google.firebase.gradle.plugins.apiinfo.ApiInformationTask;
import com.google.firebase.gradle.plugins.apiinfo.GenerateApiTxtFileTask;
import com.google.firebase.gradle.plugins.apiinfo.GenerateStubsTask;
import com.google.firebase.gradle.plugins.apiinfo.GetMetalavaJarTask;
import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer;

import java.io.File;
import java.nio.file.Paths;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile;
import java.io.File;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class FirebaseLibraryPlugin implements Plugin<Project> {

Expand Down Expand Up @@ -88,53 +83,74 @@ public void apply(Project project) {
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 outputFile =
project
.getRootProject()
.file(
Paths.get(
project.getRootProject().getBuildDir().getPath(),
"apiinfo",
project.getPath().substring(1).replace(":", "_")));
File outputApiFile = new File(outputFile.getAbsolutePath() + "_api.txt");
List<File> sourcePath = mainSourceSet.getJava().getSrcDirs().stream().collect(Collectors.toList());
if(mainSourceSet.getJava().getSrcDirs().stream().noneMatch(File::exists)) {
return;
}
project.getTasks().register("getMetalavaJar", GetMetalavaJarTask.class, task -> {
task.setOutputFile(metalavaOutputJarFile);
});
project.getTasks().register("apiInformation", ApiInformationTask.class, task -> {
task.setApiTxt(project.file("api.txt"));
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setSourcePath(sourcePath);
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");
});

project.getTasks().register("generateApiTxtFile", GenerateApiTxtFileTask.class, task -> {
task.setApiTxt(project.file("api.txt"));
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setSourcePath(sourcePath);
task.setBaselineFile(project.file("baseline.txt"));
if (project.hasProperty("updateBaseline")) {
task.setUpdateBaseline(true);
} else {
task.setUpdateBaseline(false);
}
task.dependsOn("getMetalavaJar");
});

project.getTasks().register("docStubs", GenerateStubsTask.class, task -> {
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setOutputDir(new File(project.getBuildDir(), "doc-stubs"));
task.dependsOn("getMetalavaJar");

task.setSourceDirs(android.getSourceSets().getByName("main").getJava().getSrcDirs());
});

project
.getTasks()
.register(
"getMetalavaJar",
GetMetalavaJarTask.class,
task -> {
task.setOutputFile(metalavaOutputJarFile);
});
project
.getTasks()
.register(
"apiInformation",
ApiInformationTask.class,
task -> {
task.setApiTxt(project.file("api.txt"));
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");
});

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"));
if (project.hasProperty("updateBaseline")) {
task.setUpdateBaseline(true);
} else {
task.setUpdateBaseline(false);
}
task.dependsOn("getMetalavaJar");
});

project
.getTasks()
.register(
"docStubs",
GenerateStubsTask.class,
task -> {
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setOutputDir(new File(project.getBuildDir(), "doc-stubs"));
task.dependsOn("getMetalavaJar");

task.setSourceSet(mainSourceSet);
});
}

private static void setupStaticAnalysis(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,110 +14,116 @@

package com.google.firebase.gradle.plugins.apiinfo;

import com.android.build.gradle.api.AndroidSourceSet;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.OutputFile;
import org.gradle.api.tasks.TaskAction;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Arrays;

/**
Task generates the api diff of the current source code against the api.txt file stored
alongside the project's src directory.
* Task generates the api diff of the current source code against the api.txt file stored alongside
* the project's src directory.
*/
public abstract class ApiInformationTask extends DefaultTask {

@Input
abstract String getMetalavaJarPath();
@Input
abstract String getMetalavaJarPath();

@InputFile
abstract File getApiTxt();
@InputFile
abstract File getApiTxt();

@InputFiles
abstract List<File> getSourcePath();
abstract AndroidSourceSet getSourceSet();

@OutputFile
abstract File getBaselineFile();
@OutputFile
abstract File getBaselineFile();

@OutputFile
abstract File getOutputApiFile();
@OutputFile
abstract File getOutputApiFile();

@Input
abstract boolean getUpdateBaseline();
@Input
abstract boolean getUpdateBaseline();

@OutputFile
abstract File getOutputFile();
@OutputFile
abstract File getOutputFile();

public abstract void setSourcePath(List<File> value);
public abstract void setSourceSet(AndroidSourceSet value);

public abstract void setBaselineFile(File value);
public abstract void setBaselineFile(File value);

public abstract void setUpdateBaseline(boolean value);
public abstract void setUpdateBaseline(boolean value);

public abstract void setMetalavaJarPath(String value);
public abstract void setMetalavaJarPath(String value);

public abstract void setApiTxt(File value);
public abstract void setApiTxt(File value);

public abstract void setOutputApiFile(File value);
public abstract void setOutputApiFile(File value);

public abstract void setOutputFile(File value);
public abstract void setOutputFile(File value);

@TaskAction
void execute() {
String sourcePath =
getSourceSet().getJava().getSrcDirs().stream()
.filter(File::exists)
.map(File::getAbsolutePath)
.collect(Collectors.joining(":"));
File outputFileDir = getOutputFile().getParentFile();
if (!outputFileDir.exists()) {
outputFileDir.mkdirs();
}

@TaskAction
void execute() {
String sourcePath = getSourcePath().stream().map(File::getAbsolutePath).collect(Collectors.joining(":"));
File outputFileDir = getOutputFile().getParentFile();
if(!outputFileDir.exists()) {
outputFileDir.mkdirs();
}

// Generate api.txt file and store it in the build directory.
getProject().javaexec(spec-> {
spec.setMain("-jar");
spec.setArgs(Arrays.asList(
getMetalavaJarPath(),
"--source-path", sourcePath,
"--api", getOutputApiFile().getAbsolutePath(),
"--format=v2"
));
spec.setIgnoreExitValue(true);
});
getProject().javaexec(spec-> {
spec.setMain("-jar");
List<String> args = new ArrayList<>(Arrays.asList(
getMetalavaJarPath(),
"--source-files", getOutputApiFile().getAbsolutePath(),
"--check-compatibility:api:current", getApiTxt().getAbsolutePath(),
"--format=v2",
"--no-color",
"--delete-empty-baselines"
));
if(getUpdateBaseline()) {
args.addAll(Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath()));
} else if(getBaselineFile().exists()) {
// Generate api.txt file and store it in the build directory.
getProject()
.javaexec(
spec -> {
spec.setMain("-jar");
spec.setArgs(
Arrays.asList(
getMetalavaJarPath(),
"--source-path",
sourcePath,
"--api",
getOutputApiFile().getAbsolutePath(),
"--format=v2"));
spec.setIgnoreExitValue(true);
});
getProject()
.javaexec(
spec -> {
spec.setMain("-jar");
List<String> args =
new ArrayList<>(
Arrays.asList(
getMetalavaJarPath(),
"--source-files",
getOutputApiFile().getAbsolutePath(),
"--check-compatibility:api:current",
getApiTxt().getAbsolutePath(),
"--format=v2",
"--no-color",
"--delete-empty-baselines"));
if (getUpdateBaseline()) {
args.addAll(
Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath()));
} else if (getBaselineFile().exists()) {
args.addAll(Arrays.asList("--baseline", getBaselineFile().getAbsolutePath()));
}
spec.setArgs(args);
spec.setIgnoreExitValue(true);
try {
}
spec.setArgs(args);
spec.setIgnoreExitValue(true);
try {
spec.setStandardOutput(new FileOutputStream(getOutputFile()));
} catch (FileNotFoundException e) {
} catch (FileNotFoundException e) {
throw new GradleException("Unable to run the command", e);
}
});

}

}
});
}
}
Loading