diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java index f204bc36666..f3d06693cdb 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java @@ -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 { @@ -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 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( diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/ApiInformationTask.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/ApiInformationTask.java index 5048dd24a35..22ae75ff57b 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/ApiInformationTask.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/ApiInformationTask.java @@ -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 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 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 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 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); - } - }); - - } - + } + }); + } } diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateApiTxtFileTask.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateApiTxtFileTask.java index 7c6b8a6e5bf..bced7b25346 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateApiTxtFileTask.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateApiTxtFileTask.java @@ -14,73 +14,73 @@ package com.google.firebase.gradle.plugins.apiinfo; - +import com.android.build.gradle.api.AndroidSourceSet; +import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputDirectory; -import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; -import java.io.File; - -import java.util.Arrays; -import java.util.stream.Collector; -import java.util.stream.Collectors; - public abstract class GenerateApiTxtFileTask extends DefaultTask { - @Input - abstract String getMetalavaJarPath(); - - @OutputFile - abstract File getApiTxt(); - - @InputFiles - abstract List getSourcePath(); + @Input + abstract String getMetalavaJarPath(); + @OutputFile + abstract File getApiTxt(); - @OutputFile - abstract File getBaselineFile(); + abstract AndroidSourceSet getSourceSet(); - @Input - abstract boolean getUpdateBaseline(); + @OutputFile + abstract File getBaselineFile(); + @Input + abstract boolean getUpdateBaseline(); - public abstract void setSourcePath(List 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); - @TaskAction - void execute() { - String sourcePath = getSourcePath().stream().map(File::getAbsolutePath).collect(Collectors.joining(":")); - List args = new ArrayList(Arrays.asList( - getMetalavaJarPath(), - "--source-path", sourcePath, - "--api", getApiTxt().getAbsolutePath(), - "--format=v2", - "--delete-empty-baselines" - )); - - if(getUpdateBaseline()) { - args.addAll(Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath())); - } else if(getBaselineFile().exists()) { - args.addAll(Arrays.asList("--baseline", getBaselineFile().getAbsolutePath())); - } - - getProject().javaexec(spec -> { - spec.setMain("-jar"); - spec.setArgs(args); - spec.setIgnoreExitValue(true); - }); + @TaskAction + void execute() { + String sourcePath = + getSourceSet().getJava().getSrcDirs().stream() + .filter(File::exists) + .map(File::getAbsolutePath) + .collect(Collectors.joining(":")); + List args = + new ArrayList<>( + Arrays.asList( + getMetalavaJarPath(), + "--source-path", + sourcePath, + "--api", + getApiTxt().getAbsolutePath(), + "--format=v2", + "--delete-empty-baselines")); + if (getUpdateBaseline()) { + args.addAll(Arrays.asList("--update-baseline", getBaselineFile().getAbsolutePath())); + } else if (getBaselineFile().exists()) { + args.addAll(Arrays.asList("--baseline", getBaselineFile().getAbsolutePath())); } + + getProject() + .javaexec( + spec -> { + spec.setMain("-jar"); + spec.setArgs(args); + spec.setIgnoreExitValue(true); + }); + } } diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateStubsTask.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateStubsTask.java index ad07ed425e7..72a20a89323 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateStubsTask.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GenerateStubsTask.java @@ -14,13 +14,12 @@ package com.google.firebase.gradle.plugins.apiinfo; +import com.android.build.gradle.api.AndroidSourceSet; import java.io.File; import java.util.Arrays; -import java.util.Collection; import java.util.stream.Collectors; import org.gradle.api.DefaultTask; import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.OutputDirectory; import org.gradle.api.tasks.TaskAction; @@ -30,10 +29,9 @@ public abstract class GenerateStubsTask extends DefaultTask { public abstract void setMetalavaJarPath(String path); - @InputFiles - public abstract Collection getSourceDirs(); + public abstract AndroidSourceSet getSourceSet(); - public abstract void setSourceDirs(Collection dirs); + public abstract void setSourceSet(AndroidSourceSet sourceSet); @OutputDirectory public abstract File getOutputDir(); @@ -43,7 +41,10 @@ public abstract class GenerateStubsTask extends DefaultTask { @TaskAction public void run() { String sourcePath = - getSourceDirs().stream().map(File::getAbsolutePath).collect(Collectors.joining(":")); + getSourceSet().getJava().getSrcDirs().stream() + .filter(File::exists) + .map(File::getAbsolutePath) + .collect(Collectors.joining(":")); getProject() .javaexec( diff --git a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GetMetalavaJarTask.java b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GetMetalavaJarTask.java index 3bf849d66c3..b9250abf0f4 100644 --- a/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GetMetalavaJarTask.java +++ b/buildSrc/src/main/groovy/com/google/firebase/gradle/plugins/apiinfo/GetMetalavaJarTask.java @@ -14,26 +14,19 @@ package com.google.firebase.gradle.plugins.apiinfo; -import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.net.JarURLConnection; -import java.net.MalformedURLException; import java.net.URL; -import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; -import org.gradle.api.invocation.Gradle; -import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; public abstract class GetMetalavaJarTask extends DefaultTask { - @OutputFile abstract File getOutputFile(); @@ -45,11 +38,12 @@ void execute() { return; } - try (InputStream stream = new URL("https://storage.googleapis.com/android-ci/metalava-full-1.3.0-SNAPSHOT.jar").openStream()){ + try (InputStream stream = + new URL("https://storage.googleapis.com/android-ci/metalava-full-1.3.0-SNAPSHOT.jar") + .openStream()) { Files.copy(stream, getOutputFile().toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new GradleException("Unable to read the jar file from GCS", e); } } - } diff --git a/encoders/firebase-encoders-json/firebase-encoders-json.gradle b/encoders/firebase-encoders-json/firebase-encoders-json.gradle index 4438fb47b18..97e59d11dbb 100644 --- a/encoders/firebase-encoders-json/firebase-encoders-json.gradle +++ b/encoders/firebase-encoders-json/firebase-encoders-json.gradle @@ -39,6 +39,10 @@ android { includeAndroidResources = true } } + + sourceSets.main.java { + srcDir 'src/json/java' + } } dependencies { diff --git a/encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/json/JsonDataEncoderBuilder.java b/encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonDataEncoderBuilder.java similarity index 100% rename from encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/json/JsonDataEncoderBuilder.java rename to encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonDataEncoderBuilder.java diff --git a/encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/json/JsonValueObjectEncoderContext.java b/encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonValueObjectEncoderContext.java similarity index 100% rename from encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/json/JsonValueObjectEncoderContext.java rename to encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonValueObjectEncoderContext.java