From 405f5be71f4f558c61d65a3c8e7208d5a53da227 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Mon, 6 Feb 2023 12:54:27 -0600 Subject: [PATCH 01/11] Converty library plugins to kotlin --- .../plugins/FirebaseJavaLibraryPlugin.java | 207 ------------- .../plugins/FirebaseJavaLibraryPlugin.kt | 113 +++++++ .../gradle/plugins/FirebaseLibraryPlugin.java | 287 ------------------ .../gradle/plugins/FirebaseLibraryPlugin.kt | 163 ++++++++++ .../firebase/gradle/plugins/GradleUtils.kt | 22 +- 5 files changed, 296 insertions(+), 496 deletions(-) delete mode 100644 buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java create mode 100644 buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt delete mode 100644 buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java create mode 100644 buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java deleted file mode 100644 index 2e2438a3fbc..00000000000 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.gradle.plugins; - -import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.firebase.gradle.plugins.ci.Coverage; -import java.io.File; -import java.nio.file.Paths; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.attributes.Attribute; -import org.gradle.api.file.FileCollection; -import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.publish.PublishingExtension; -import org.gradle.api.publish.maven.MavenPublication; -import org.gradle.api.tasks.SourceSet; -import org.gradle.api.tasks.TaskProvider; -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; - -// TODO(vkryachko): extract functionality common across Firebase{,Java}LibraryPlugin plugins. -public class FirebaseJavaLibraryPlugin implements Plugin { - - @Override - public void apply(Project project) { - project.apply(ImmutableMap.of("plugin", "java-library")); - project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")); - project.getExtensions().getByType(GoogleJavaFormatExtension.class).setToolVersion("1.10.0"); - - FirebaseLibraryExtension firebaseLibrary = - project - .getExtensions() - .create("firebaseLibrary", FirebaseLibraryExtension.class, project, LibraryType.JAVA); - - // reduce the likelihood of kotlin module files colliding. - project - .getTasks() - .withType( - KotlinCompile.class, - kotlin -> - kotlin - .getKotlinOptions() - .setFreeCompilerArgs( - ImmutableList.of("-module-name", kotlinModuleName(project)))); - - setupStaticAnalysis(project, firebaseLibrary); - configurePublishing(project, firebaseLibrary); - project.getTasks().register("kotlindoc"); - } - - private static void setupStaticAnalysis(Project project, FirebaseLibraryExtension library) { - project.afterEvaluate( - p -> - project - .getConfigurations() - .all( - c -> { - if ("lintChecks".equals(c.getName())) { - for (String checkProject : - library.staticAnalysis.androidLintCheckProjects) { - project - .getDependencies() - .add("lintChecks", project.project(checkProject)); - } - } - })); - - setupApiInformationAnalysis(project); - - project.getTasks().register("firebaseLint", task -> task.dependsOn("lint")); - Coverage.apply(library); - } - - private static void setupApiInformationAnalysis(Project project) { - 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"); - - File apiTxt = - project.file("api.txt").exists() - ? project.file("api.txt") - : project.file(project.getRootDir() + "/empty-api.txt"); - TaskProvider apiInfo = - project - .getTasks() - .register( - "apiInformation", - ApiInformationTask.class, - task -> { - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs())); - task.getApiTxtFile().set(apiTxt); - task.getBaselineFile().set(project.file("baseline.txt")); - task.getOutputFile().set(outputFile); - task.getOutputApiFile().set(outputApiFile); - task.getUpdateBaseline().set(project.hasProperty("updateBaseline")); - }); - - TaskProvider generateApiTxt = - project - .getTasks() - .register( - "generateApiTxtFile", - GenerateApiTxtTask.class, - task -> { - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs())); - task.getApiTxtFile().set(project.file("api.txt")); - task.getBaselineFile().set(project.file("baseline.txt")); - task.getUpdateBaseline().set(project.hasProperty("updateBaseline")); - }); - - TaskProvider docStubs = - project - .getTasks() - .register( - "docStubs", - GenerateStubsTask.class, - task -> - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs()))); - 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)); - }); - } - - private static String kotlinModuleName(Project project) { - - String fullyQualifiedProjectPath = project.getPath().replaceAll(":", "-"); - - return project.getRootProject().getName() + fullyQualifiedProjectPath; - } - - private static void configurePublishing( - Project project, FirebaseLibraryExtension firebaseLibrary) { - project.apply(ImmutableMap.of("plugin", "maven-publish")); - PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class); - publishing.repositories( - repos -> - repos.maven( - repo -> { - String s = project.getRootProject().getBuildDir() + "/m2repository"; - File file = new File(s); - repo.setUrl(file.toURI()); - repo.setName("BuildDir"); - })); - publishing.publications( - publications -> - publications.create( - "mavenAar", - MavenPublication.class, - publication -> { - publication.from( - project.getComponents().findByName(firebaseLibrary.type.getComponentName())); - project.afterEvaluate( - p -> { - publication.setArtifactId(firebaseLibrary.artifactId.get()); - publication.setGroupId(firebaseLibrary.groupId.get()); - firebaseLibrary.applyPomCustomization(publication.getPom()); - }); - })); - } -} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt new file mode 100644 index 00000000000..5271001367a --- /dev/null +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -0,0 +1,113 @@ +package com.google.firebase.gradle.plugins + +import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension +import com.google.common.collect.ImmutableList +import com.google.common.collect.ImmutableMap +import java.io.File +import java.nio.file.Paths +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.attributes.Attribute +import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +class FirebaseJavaLibraryPlugin : Plugin { + + override fun apply(project: Project) { + project.apply(ImmutableMap.of("plugin", "java-library")) + project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")) + project.extensions.getByType(GoogleJavaFormatExtension::class.java).toolVersion = "1.10.0" + val firebaseLibrary = + project.extensions.create( + "firebaseLibrary", + FirebaseLibraryExtension::class.java, + project, + LibraryType.JAVA + ) + + // reduce the likelihood of kotlin module files colliding. + project.tasks.withType(KotlinCompile::class.java) { + kotlinOptions.freeCompilerArgs = ImmutableList.of("-module-name", kotlinModuleName(project)) + } + setupStaticAnalysis(project, firebaseLibrary) + setupApiInformationAnalysis(project) + configurePublishing(project, firebaseLibrary) + project.tasks.register("kotlindoc") + } + + private fun setupApiInformationAnalysis(project: Project) { + val mainSourceSet = + project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets.getByName("main") + val outputFile = + project.rootProject.file( + Paths.get( + project.rootProject.buildDir.path, + "apiinfo", + project.path.substring(1).replace(":", "_") + ) + ) + val outputApiFile = File(outputFile.absolutePath + "_api.txt") + val apiTxt = + if (project.file("api.txt").exists()) project.file("api.txt") + else project.file(project.rootDir.toString() + "/empty-api.txt") + val apiInfo = + project.tasks.register("apiInformation", ApiInformationTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + apiTxtFile.set(apiTxt) + baselineFile.set(project.file("baseline.txt")) + this.outputFile.set(outputFile) + this.outputApiFile.set(outputApiFile) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + val generateApiTxt = + project.tasks.register("generateApiTxtFile", GenerateApiTxtTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + apiTxtFile.set(project.file("api.txt")) + baselineFile.set(project.file("baseline.txt")) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + val docStubs = + project.tasks.register("docStubs", GenerateStubsTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + } + project.tasks.getByName("check").dependsOn(docStubs) + project.afterEvaluate { + val classpath = + configurations + .getByName("runtimeClasspath") + .incoming + .artifactView { + attributes { attribute(Attribute.of("artifactType", String::class.java), "jar") } + } + .artifacts + .artifactFiles + apiInfo.configure { classPath = classpath } + generateApiTxt.configure { classPath = classpath } + docStubs.configure { classPath = classpath } + } + } + private fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) { + project.apply(ImmutableMap.of("plugin", "maven-publish")) + val publishing = project.extensions.getByType(PublishingExtension::class.java) + publishing.repositories { + maven { + val s = project.rootProject.buildDir.toString() + "/m2repository" + val file = File(s) + url = file.toURI() + name = "BuildDir" + } + } + publishing.publications { + create("mavenAar", MavenPublication::class.java) { + from(project.components.findByName(firebaseLibrary.type.componentName)) + project.afterEvaluate { + artifactId = firebaseLibrary.artifactId.get() + groupId = firebaseLibrary.groupId.get() + firebaseLibrary.applyPomCustomization(pom) + } + } + } + } +} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java deleted file mode 100644 index 03c239cf69e..00000000000 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.gradle.plugins; - -import static com.google.firebase.gradle.plugins.ClosureUtil.closureOf; - -import com.android.build.gradle.LibraryExtension; -import com.android.build.gradle.api.AndroidSourceSet; -import com.android.build.gradle.internal.dsl.BuildType; -import com.android.build.gradle.internal.dsl.TestOptions; -import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.firebase.gradle.plugins.ci.Coverage; -import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer; -import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin; -import java.io.File; -import java.nio.file.Paths; -import kotlin.Unit; -import org.gradle.api.JavaVersion; -import org.gradle.api.NamedDomainObjectContainer; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.attributes.Attribute; -import org.gradle.api.file.FileCollection; -import org.gradle.api.publish.PublishingExtension; -import org.gradle.api.publish.maven.MavenPublication; -import org.gradle.api.publish.tasks.GenerateModuleMetadata; -import org.gradle.api.tasks.TaskProvider; -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile; - -public class FirebaseLibraryPlugin implements Plugin { - - @Override - public void apply(Project project) { - project.apply(ImmutableMap.of("plugin", "com.android.library")); - project.apply(ImmutableMap.of("plugin", LicenseResolverPlugin.class)); - project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")); - project.getExtensions().getByType(GoogleJavaFormatExtension.class).setToolVersion("1.10.0"); - - FirebaseLibraryExtension firebaseLibrary = - project - .getExtensions() - .create( - "firebaseLibrary", FirebaseLibraryExtension.class, project, LibraryType.ANDROID); - - LibraryExtension android = project.getExtensions().getByType(LibraryExtension.class); - - android.compileOptions( - options -> { - options.setSourceCompatibility(JavaVersion.VERSION_1_8); - options.setTargetCompatibility(JavaVersion.VERSION_1_8); - }); - - // In the case of and android library signing config only affects instrumentation test APK. - // We need it signed with default debug credentials in order for FTL to accept the APK. - android.buildTypes( - (NamedDomainObjectContainer types) -> - types - .getByName("release") - .setSigningConfig(types.getByName("debug").getSigningConfig())); - android.defaultConfig( - cfg -> { - cfg.buildConfigField("String", "VERSION_NAME", "\"" + project.getVersion() + "\""); - }); - - // see https://github.com/robolectric/robolectric/issues/5456 - android.testOptions( - (TestOptions options) -> - options - .getUnitTests() - .all( - closureOf( - test -> { - test.systemProperty("robolectric.dependency.repo.id", "central"); - test.systemProperty( - "robolectric.dependency.repo.url", "https://repo1.maven.org/maven2"); - test.systemProperty("javax.net.ssl.trustStoreType", "JKS"); - }))); - - // skip debug tests in CI - // TODO(vkryachko): provide ability for teams to control this if needed - if (System.getenv().containsKey("FIREBASE_CI")) { - android.setTestBuildType("release"); - project - .getTasks() - .all( - task -> { - if ("testDebugUnitTest".equals(task.getName())) { - task.setEnabled(false); - } - }); - } - - setupApiInformationAnalysis(project, android); - android.testServer(new FirebaseTestServer(project, firebaseLibrary.testLab, android)); - - setupStaticAnalysis(project, firebaseLibrary); - - configurePublishing(project, firebaseLibrary, android); - - // reduce the likelihood of kotlin module files colliding. - project - .getTasks() - .withType( - KotlinCompile.class, - kotlin -> - kotlin - .getKotlinOptions() - .setFreeCompilerArgs( - ImmutableList.of("-module-name", kotlinModuleName(project)))); - - project.getPluginManager().apply(DackkaPlugin.class); - project.getPluginManager().apply(GitSubmodulePlugin.class); - project.getTasks().getByName("preBuild").dependsOn("updateGitSubmodules"); - } - - private static void setupApiInformationAnalysis(Project project, LibraryExtension android) { - 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"); - - File apiTxt = - project.file("api.txt").exists() - ? project.file("api.txt") - : project.file(project.getRootDir() + "/empty-api.txt"); - TaskProvider apiInfo = - project - .getTasks() - .register( - "apiInformation", - ApiInformationTask.class, - task -> { - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs())); - task.getApiTxtFile().set(apiTxt); - task.getBaselineFile().set(project.file("baseline.txt")); - task.getOutputFile().set(outputFile); - task.getOutputApiFile().set(outputApiFile); - task.getUpdateBaseline().set(project.hasProperty("updateBaseline")); - }); - - TaskProvider generateApiTxt = - project - .getTasks() - .register( - "generateApiTxtFile", - GenerateApiTxtTask.class, - task -> { - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs())); - task.getApiTxtFile().set(project.file("api.txt")); - task.getBaselineFile().set(project.file("baseline.txt")); - task.getUpdateBaseline().set(project.hasProperty("updateBaseline")); - }); - - TaskProvider docStubs = - project - .getTasks() - .register( - "docStubs", - GenerateStubsTask.class, - task -> - task.getSources() - .value(project.provider(() -> mainSourceSet.getJava().getSrcDirs()))); - 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), - "android-classes"))) - .getArtifacts() - .getArtifactFiles(); - apiInfo.configure(t -> t.setClassPath(jars)); - generateApiTxt.configure(t -> t.setClassPath(jars)); - docStubs.configure(t -> t.setClassPath(jars)); - } - }); - } - - private static void setupStaticAnalysis(Project project, FirebaseLibraryExtension library) { - project.afterEvaluate( - p -> - project - .getConfigurations() - .all( - c -> { - if ("lintChecks".equals(c.getName())) { - for (String checkProject : - library.staticAnalysis.androidLintCheckProjects) { - project - .getDependencies() - .add("lintChecks", project.project(checkProject)); - } - } - })); - - project.getTasks().register("firebaseLint", task -> task.dependsOn("lint")); - Coverage.apply(library); - } - - private static String kotlinModuleName(Project project) { - - String fullyQualifiedProjectPath = project.getPath().replaceAll(":", "-"); - - return project.getRootProject().getName() + fullyQualifiedProjectPath; - } - - private static void configurePublishing( - Project project, FirebaseLibraryExtension firebaseLibrary, LibraryExtension android) { - android.publishing( - p -> { - p.singleVariant( - "release", - v -> { - v.withSourcesJar(); - return Unit.INSTANCE; - }); - }); - project - .getTasks() - .withType( - GenerateModuleMetadata.class, - task -> { - task.setEnabled(false); - }); - project.afterEvaluate( - p -> { - project.apply(ImmutableMap.of("plugin", "maven-publish")); - PublishingExtension publishing = - project.getExtensions().getByType(PublishingExtension.class); - publishing.repositories( - repos -> - repos.maven( - repo -> { - String s = project.getRootProject().getBuildDir() + "/m2repository"; - File file = new File(s); - repo.setUrl(file.toURI()); - repo.setName("BuildDir"); - })); - publishing.publications( - publications -> - publications.create( - "mavenAar", - MavenPublication.class, - publication -> { - publication.from( - project - .getComponents() - .findByName(firebaseLibrary.type.getComponentName())); - publication.setArtifactId(firebaseLibrary.artifactId.get()); - publication.setGroupId(firebaseLibrary.groupId.get()); - firebaseLibrary.applyPomCustomization(publication.getPom()); - })); - }); - } -} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt new file mode 100644 index 00000000000..2114b633ae5 --- /dev/null +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -0,0 +1,163 @@ +package com.google.firebase.gradle.plugins + +import com.android.build.gradle.LibraryExtension +import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension +import com.google.common.collect.ImmutableList +import com.google.common.collect.ImmutableMap +import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer +import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin +import org.gradle.api.JavaVersion +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.attributes.Attribute +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.tasks.GenerateModuleMetadata +import org.gradle.kotlin.dsl.getByType +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import java.io.File +import java.nio.file.Paths + +class FirebaseLibraryPlugin : Plugin { + + override fun apply(project: Project) { + project.apply(ImmutableMap.of("plugin", "com.android.library")) + project.apply(ImmutableMap.of("plugin", LicenseResolverPlugin::class.java)) + project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")) + project.extensions.getByType(GoogleJavaFormatExtension::class.java).toolVersion = "1.10.0" + val firebaseLibrary = + project.extensions.create( + "firebaseLibrary", + FirebaseLibraryExtension::class.java, + project, + LibraryType.ANDROID + ) + val android = project.extensions.getByType() + android.compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + // In the case of and android library signing config only affects instrumentation test APK. + // We need it signed with default debug credentials in order for FTL to accept the APK. + android.buildTypes { getByName("release").signingConfig = getByName("debug").signingConfig } + + android.defaultConfig { + buildConfigField("String", "VERSION_NAME", "\"" + project.version + "\"") + } + + // see https://github.com/robolectric/robolectric/issues/5456 + android.testOptions { + unitTests.all { + it.systemProperty("robolectric.dependency.repo.id", "central") + it.systemProperty("robolectric.dependency.repo.url", "https://repo1.maven.org/maven2") + it.systemProperty("javax.net.ssl.trustStoreType", "JKS") + } + } + + setupApiInformationAnalysis(project, android) + android.testServer(FirebaseTestServer(project, firebaseLibrary.testLab, android)) + setupStaticAnalysis(project, firebaseLibrary) + configurePublishing(project, firebaseLibrary, android) + + // reduce the likelihood of kotlin module files colliding. + project.tasks.withType(KotlinCompile::class.java) { + kotlinOptions.freeCompilerArgs = ImmutableList.of("-module-name", kotlinModuleName(project)) + } + + project.pluginManager.apply(DackkaPlugin::class.java) + project.pluginManager.apply(GitSubmodulePlugin::class.java) + project.tasks.getByName("preBuild").dependsOn("updateGitSubmodules") + } + + private fun setupApiInformationAnalysis(project: Project, android: LibraryExtension) { + val mainSourceSet = android.sourceSets.getByName("main") + val outputFile = + project.rootProject.file( + Paths.get( + project.rootProject.buildDir.path, + "apiinfo", + project.path.substring(1).replace(":", "_") + ) + ) + val outputApiFile = File(outputFile.absolutePath + "_api.txt") + val apiTxt = + if (project.file("api.txt").exists()) project.file("api.txt") + else project.file(project.rootDir.toString() + "/empty-api.txt") + val apiInfo = + project.tasks.register("apiInformation", ApiInformationTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + apiTxtFile.set(apiTxt) + baselineFile.set(project.file("baseline.txt")) + this.outputFile.set(outputFile) + this.outputApiFile.set(outputApiFile) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + + val generateApiTxt = + project.tasks.register("generateApiTxtFile", GenerateApiTxtTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + apiTxtFile.set(project.file("api.txt")) + baselineFile.set(project.file("baseline.txt")) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + + val docStubs = + project.tasks.register("docStubs", GenerateStubsTask::class.java) { + sources.value(project.provider { mainSourceSet.java.srcDirs }) + } + + project.tasks.getByName("check").dependsOn(docStubs) + android.libraryVariants.all { + if (name == "release") { + val jars = + compileConfiguration.incoming + .artifactView { + attributes { + attribute(Attribute.of("artifactType", String::class.java), "android-classes") + } + } + .artifacts + .artifactFiles + apiInfo.configure { classPath = jars } + generateApiTxt.configure { classPath = jars } + docStubs.configure { classPath = jars } + } + } + } + + private fun configurePublishing( + project: Project, + firebaseLibrary: FirebaseLibraryExtension, + android: LibraryExtension + ) { + android.publishing { singleVariant("release") { withSourcesJar() } } + project.tasks.withType( + GenerateModuleMetadata::class.java, + ) { + isEnabled = false + } + + project.afterEvaluate { + project.apply(ImmutableMap.of("plugin", "maven-publish")) + val publishing = project.extensions.getByType(PublishingExtension::class.java) + publishing.repositories { + maven { + val s = project.rootProject.buildDir.toString() + "/m2repository" + val file = File(s) + url = file.toURI() + name = "BuildDir" + } + } + + publishing.publications { + create("mavenAar", MavenPublication::class.java) { + from(project.components.findByName(firebaseLibrary.type.componentName)) + artifactId = firebaseLibrary.artifactId.get() + groupId = firebaseLibrary.groupId.get() + firebaseLibrary.applyPomCustomization(pom) + } + } + } + } +} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt index 219ed8b07ba..081e1e0e254 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt @@ -14,6 +14,7 @@ package com.google.firebase.gradle.plugins +import com.google.firebase.gradle.plugins.ci.Coverage import java.io.File import org.gradle.api.Project import org.gradle.api.provider.Provider @@ -26,7 +27,6 @@ fun Copy.fromDirectory(directory: Provider) = * Creates a file at the buildDir for the given [Project]. * * Syntax sugar for: - * * ``` * project.file("${project.buildDir}/$path) * ``` @@ -37,7 +37,6 @@ fun Project.fileFromBuildDir(path: String) = file("$buildDir/$path") * Maps a file provider to another file provider as a sub directory. * * Syntax sugar for: - * * ``` * fileProvider.map { project.file("${it.path}/$path") } * ``` @@ -56,3 +55,22 @@ fun Project.childFile(provider: Provider, childPath: String) = * ``` */ fun File.listFilesOrEmpty() = listFiles().orEmpty() + +fun kotlinModuleName(project: Project): String { + val fullyQualifiedProjectPath = project.path.replace(":".toRegex(), "-") + return project.rootProject.name + fullyQualifiedProjectPath +} + +fun setupStaticAnalysis(project: Project, library: FirebaseLibraryExtension) { + project.afterEvaluate { + configurations.all { + if ("lintChecks" == name) { + for (checkProject in library.staticAnalysis.androidLintCheckProjects) { + project.dependencies.add("lintChecks", project.project(checkProject!!)) + } + } + } + } + project.tasks.register("firebaseLint") { dependsOn("lint") } + Coverage.apply(library) +} From 1fbd1bb221492ceec6a06e01532e1430a1a90d03 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Tue, 7 Feb 2023 14:07:58 -0600 Subject: [PATCH 02/11] Refactor shared logic out --- .../plugins/FirebaseJavaLibraryPlugin.kt | 44 ++++--------------- .../gradle/plugins/FirebaseLibraryPlugin.kt | 41 +++-------------- .../firebase/gradle/plugins/GradleUtils.kt | 41 +++++++++++++++++ 3 files changed, 55 insertions(+), 71 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt index 5271001367a..92dc2652e94 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -4,13 +4,13 @@ import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap import java.io.File -import java.nio.file.Paths import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.attributes.Attribute import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication +import org.gradle.kotlin.dsl.getPlugin import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class FirebaseJavaLibraryPlugin : Plugin { @@ -38,40 +38,13 @@ class FirebaseJavaLibraryPlugin : Plugin { } private fun setupApiInformationAnalysis(project: Project) { - val mainSourceSet = - project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets.getByName("main") - val outputFile = - project.rootProject.file( - Paths.get( - project.rootProject.buildDir.path, - "apiinfo", - project.path.substring(1).replace(":", "_") - ) - ) - val outputApiFile = File(outputFile.absolutePath + "_api.txt") - val apiTxt = - if (project.file("api.txt").exists()) project.file("api.txt") - else project.file(project.rootDir.toString() + "/empty-api.txt") - val apiInfo = - project.tasks.register("apiInformation", ApiInformationTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - apiTxtFile.set(apiTxt) - baselineFile.set(project.file("baseline.txt")) - this.outputFile.set(outputFile) - this.outputApiFile.set(outputApiFile) - updateBaseline.set(project.hasProperty("updateBaseline")) - } - val generateApiTxt = - project.tasks.register("generateApiTxtFile", GenerateApiTxtTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - apiTxtFile.set(project.file("api.txt")) - baselineFile.set(project.file("baseline.txt")) - updateBaseline.set(project.hasProperty("updateBaseline")) - } - val docStubs = - project.tasks.register("docStubs", GenerateStubsTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - } + val srcDirs = + project.convention.getPlugin().sourceSets.getByName("main").java.srcDirs + + val apiInfo = getApiInfo(project, srcDirs) + val generateApiTxt = getGenerateApiTxt(project, srcDirs) + val docStubs = getDocStubs(project, srcDirs) + project.tasks.getByName("check").dependsOn(docStubs) project.afterEvaluate { val classpath = @@ -88,6 +61,7 @@ class FirebaseJavaLibraryPlugin : Plugin { docStubs.configure { classPath = classpath } } } + private fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) { project.apply(ImmutableMap.of("plugin", "maven-publish")) val publishing = project.extensions.getByType(PublishingExtension::class.java) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index 2114b633ae5..951bfca2e3f 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -6,6 +6,7 @@ import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin +import java.io.File import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project @@ -15,8 +16,6 @@ import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.tasks.GenerateModuleMetadata import org.gradle.kotlin.dsl.getByType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import java.io.File -import java.nio.file.Paths class FirebaseLibraryPlugin : Plugin { @@ -71,41 +70,11 @@ class FirebaseLibraryPlugin : Plugin { } private fun setupApiInformationAnalysis(project: Project, android: LibraryExtension) { - val mainSourceSet = android.sourceSets.getByName("main") - val outputFile = - project.rootProject.file( - Paths.get( - project.rootProject.buildDir.path, - "apiinfo", - project.path.substring(1).replace(":", "_") - ) - ) - val outputApiFile = File(outputFile.absolutePath + "_api.txt") - val apiTxt = - if (project.file("api.txt").exists()) project.file("api.txt") - else project.file(project.rootDir.toString() + "/empty-api.txt") - val apiInfo = - project.tasks.register("apiInformation", ApiInformationTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - apiTxtFile.set(apiTxt) - baselineFile.set(project.file("baseline.txt")) - this.outputFile.set(outputFile) - this.outputApiFile.set(outputApiFile) - updateBaseline.set(project.hasProperty("updateBaseline")) - } + val srcDirs = android.sourceSets.getByName("main").java.srcDirs - val generateApiTxt = - project.tasks.register("generateApiTxtFile", GenerateApiTxtTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - apiTxtFile.set(project.file("api.txt")) - baselineFile.set(project.file("baseline.txt")) - updateBaseline.set(project.hasProperty("updateBaseline")) - } - - val docStubs = - project.tasks.register("docStubs", GenerateStubsTask::class.java) { - sources.value(project.provider { mainSourceSet.java.srcDirs }) - } + val apiInfo = getApiInfo(project, srcDirs) + val generateApiTxt = getGenerateApiTxt(project, srcDirs) + val docStubs = getDocStubs(project, srcDirs) project.tasks.getByName("check").dependsOn(docStubs) android.libraryVariants.all { diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt index 081e1e0e254..040be41bdb6 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt @@ -16,9 +16,12 @@ package com.google.firebase.gradle.plugins import com.google.firebase.gradle.plugins.ci.Coverage import java.io.File +import java.nio.file.Paths import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy +import org.gradle.api.tasks.TaskProvider +import org.gradle.kotlin.dsl.register fun Copy.fromDirectory(directory: Provider) = from(directory) { into(directory.map { it.name }) } @@ -74,3 +77,41 @@ fun setupStaticAnalysis(project: Project, library: FirebaseLibraryExtension) { project.tasks.register("firebaseLint") { dependsOn("lint") } Coverage.apply(library) } + +fun getApiInfo(project: Project, srcDirs: Set): TaskProvider { + val outputFile = + project.rootProject.file( + Paths.get( + project.rootProject.buildDir.path, + "apiinfo", + project.path.substring(1).replace(":", "_") + ) + ) + val outputApiFile = File(outputFile.absolutePath + "_api.txt") + val apiTxt = + if (project.file("api.txt").exists()) project.file("api.txt") + else project.file(project.rootDir.toString() + "/empty-api.txt") + val apiInfo = + project.tasks.register("apiInformation") { + sources.value(project.provider { srcDirs }) + apiTxtFile.set(apiTxt) + baselineFile.set(project.file("baseline.txt")) + this.outputFile.set(outputFile) + this.outputApiFile.set(outputApiFile) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + return apiInfo +} + +fun getGenerateApiTxt(project: Project, srcDirs: Set) = + project.tasks.register("generateApiTxtFile") { + sources.value(project.provider { srcDirs }) + apiTxtFile.set(project.file("api.txt")) + baselineFile.set(project.file("baseline.txt")) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + +fun getDocStubs(project: Project, srcDirs: Set) = + project.tasks.register("docStubs") { + sources.value(project.provider { srcDirs }) + } From a0d3709452aebde7f43cedcbe7edd9fdc4f9cd7b Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Tue, 7 Feb 2023 16:06:51 -0600 Subject: [PATCH 03/11] Add copyright notices --- .../gradle/plugins/FirebaseJavaLibraryPlugin.kt | 14 ++++++++++++++ .../gradle/plugins/FirebaseLibraryPlugin.kt | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt index 92dc2652e94..ddd56509c86 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -1,3 +1,17 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package com.google.firebase.gradle.plugins import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index 951bfca2e3f..ec752386bb2 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -1,3 +1,17 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package com.google.firebase.gradle.plugins import com.android.build.gradle.LibraryExtension From a603f737051f410e51d1cb858bfc29b86a08190c Mon Sep 17 00:00:00 2001 From: Yifan Yang Date: Thu, 9 Feb 2023 14:51:56 -0800 Subject: [PATCH 04/11] debug api info --- .../firebase/gradle/plugins/FirebaseLibraryPlugin.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index ec752386bb2..dbe9bd60e48 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -86,8 +86,12 @@ class FirebaseLibraryPlugin : Plugin { private fun setupApiInformationAnalysis(project: Project, android: LibraryExtension) { val srcDirs = android.sourceSets.getByName("main").java.srcDirs - val apiInfo = getApiInfo(project, srcDirs) - val generateApiTxt = getGenerateApiTxt(project, srcDirs) + val mainSourceSets = android.sourceSets.getByName("main") + val getKotlinDirectories = mainSourceSets::class.java.getDeclaredMethod("getKotlinDirectories") + val kotlinSrcDirs = getKotlinDirectories.invoke(mainSourceSets) + + val apiInfo = getApiInfo(project, kotlinSrcDirs as Set) + val generateApiTxt = getGenerateApiTxt(project, kotlinSrcDirs as Set) val docStubs = getDocStubs(project, srcDirs) project.tasks.getByName("check").dependsOn(docStubs) From 9bdaf57fa4ca0f9e1e19813984ac5ad5992574fc Mon Sep 17 00:00:00 2001 From: Daymon Date: Fri, 10 Feb 2023 12:56:57 -0600 Subject: [PATCH 05/11] Added util method for more idiomatic Plugin application --- .../com/google/firebase/gradle/plugins/GradleUtils.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt index 040be41bdb6..1fedc5b3f11 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt @@ -21,6 +21,7 @@ import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider +import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.register fun Copy.fromDirectory(directory: Provider) = @@ -115,3 +116,13 @@ fun getDocStubs(project: Project, srcDirs: Set) = project.tasks.register("docStubs") { sources.value(project.provider { srcDirs }) } + +/** + * Syntax sugar for: + * + * ```kotlin + * pluginManager.apply(T::class) + * ``` + */ +inline fun org.gradle.api.plugins.PluginManager.`apply`(): Unit = + `apply`(T::class) From a0c2e3cfd858616615845e2df2db9ad1d9d90938 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Mon, 13 Feb 2023 11:36:46 -0600 Subject: [PATCH 06/11] Resolve comments --- .../plugins/FirebaseJavaLibraryPlugin.kt | 29 ++++---- .../gradle/plugins/FirebaseLibraryPlugin.kt | 69 +++++++++---------- 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt index ddd56509c86..6554ee94ddd 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -15,40 +15,43 @@ package com.google.firebase.gradle.plugins import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension +import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatPlugin import com.google.common.collect.ImmutableList import com.google.common.collect.ImmutableMap +import com.google.firebase.gradle.plugins.LibraryType.JAVA import java.io.File import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.attributes.Attribute +import org.gradle.api.plugins.JavaLibraryPlugin import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication -import org.gradle.kotlin.dsl.getPlugin +import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class FirebaseJavaLibraryPlugin : Plugin { override fun apply(project: Project) { - project.apply(ImmutableMap.of("plugin", "java-library")) - project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")) - project.extensions.getByType(GoogleJavaFormatExtension::class.java).toolVersion = "1.10.0" - val firebaseLibrary = - project.extensions.create( - "firebaseLibrary", - FirebaseLibraryExtension::class.java, - project, - LibraryType.JAVA - ) + project.apply() + project.apply() + project.extensions.getByType().toolVersion = "1.10.0" + + setupFirebaseLibraryExtension(project) // reduce the likelihood of kotlin module files colliding. - project.tasks.withType(KotlinCompile::class.java) { + project.tasks.withType { kotlinOptions.freeCompilerArgs = ImmutableList.of("-module-name", kotlinModuleName(project)) } + } + + private fun setupFirebaseLibraryExtension(project: Project) { + val firebaseLibrary = + project.extensions.create("firebaseLibrary", project, JAVA) + setupStaticAnalysis(project, firebaseLibrary) setupApiInformationAnalysis(project) configurePublishing(project, firebaseLibrary) - project.tasks.register("kotlindoc") } private fun setupApiInformationAnalysis(project: Project) { diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index dbe9bd60e48..daba67287ef 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -15,9 +15,10 @@ package com.google.firebase.gradle.plugins import com.android.build.gradle.LibraryExtension +import com.android.build.gradle.LibraryPlugin import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension -import com.google.common.collect.ImmutableList -import com.google.common.collect.ImmutableMap +import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatPlugin +import com.google.firebase.gradle.plugins.LibraryType.ANDROID import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin import java.io.File @@ -27,24 +28,37 @@ import org.gradle.api.Project import org.gradle.api.attributes.Attribute import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.api.publish.tasks.GenerateModuleMetadata +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class FirebaseLibraryPlugin : Plugin { override fun apply(project: Project) { - project.apply(ImmutableMap.of("plugin", "com.android.library")) - project.apply(ImmutableMap.of("plugin", LicenseResolverPlugin::class.java)) - project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format")) - project.extensions.getByType(GoogleJavaFormatExtension::class.java).toolVersion = "1.10.0" + project.apply() + project.apply() + project.apply() + project.extensions.getByType().toolVersion = "1.10.0" + + setupAndroidLibraryExtension(project) + + // reduce the likelihood of kotlin module files colliding. + project.tasks.withType { + kotlinOptions.freeCompilerArgs = listOf("-module-name", kotlinModuleName(project)) + } + + project.pluginManager.apply(DackkaPlugin::class.java) + project.pluginManager.apply(GitSubmodulePlugin::class.java) + project.tasks.getByName("preBuild").dependsOn("updateGitSubmodules") + } + + private fun setupAndroidLibraryExtension(project: Project) { val firebaseLibrary = - project.extensions.create( - "firebaseLibrary", - FirebaseLibraryExtension::class.java, - project, - LibraryType.ANDROID - ) + project.extensions.create("firebaseLibrary", project, ANDROID) val android = project.extensions.getByType() android.compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 @@ -60,27 +74,16 @@ class FirebaseLibraryPlugin : Plugin { } // see https://github.com/robolectric/robolectric/issues/5456 - android.testOptions { - unitTests.all { - it.systemProperty("robolectric.dependency.repo.id", "central") - it.systemProperty("robolectric.dependency.repo.url", "https://repo1.maven.org/maven2") - it.systemProperty("javax.net.ssl.trustStoreType", "JKS") - } + android.testOptions.unitTests.all { + it.systemProperty("robolectric.dependency.repo.id", "central") + it.systemProperty("robolectric.dependency.repo.url", "https://repo1.maven.org/maven2") + it.systemProperty("javax.net.ssl.trustStoreType", "JKS") } setupApiInformationAnalysis(project, android) android.testServer(FirebaseTestServer(project, firebaseLibrary.testLab, android)) setupStaticAnalysis(project, firebaseLibrary) configurePublishing(project, firebaseLibrary, android) - - // reduce the likelihood of kotlin module files colliding. - project.tasks.withType(KotlinCompile::class.java) { - kotlinOptions.freeCompilerArgs = ImmutableList.of("-module-name", kotlinModuleName(project)) - } - - project.pluginManager.apply(DackkaPlugin::class.java) - project.pluginManager.apply(GitSubmodulePlugin::class.java) - project.tasks.getByName("preBuild").dependsOn("updateGitSubmodules") } private fun setupApiInformationAnalysis(project: Project, android: LibraryExtension) { @@ -91,7 +94,7 @@ class FirebaseLibraryPlugin : Plugin { val kotlinSrcDirs = getKotlinDirectories.invoke(mainSourceSets) val apiInfo = getApiInfo(project, kotlinSrcDirs as Set) - val generateApiTxt = getGenerateApiTxt(project, kotlinSrcDirs as Set) + val generateApiTxt = getGenerateApiTxt(project, kotlinSrcDirs) val docStubs = getDocStubs(project, srcDirs) project.tasks.getByName("check").dependsOn(docStubs) @@ -118,15 +121,11 @@ class FirebaseLibraryPlugin : Plugin { firebaseLibrary: FirebaseLibraryExtension, android: LibraryExtension ) { - android.publishing { singleVariant("release") { withSourcesJar() } } - project.tasks.withType( - GenerateModuleMetadata::class.java, - ) { - isEnabled = false - } + android.publishing.singleVariant("release") { withSourcesJar() } + project.tasks.withType { isEnabled = false } project.afterEvaluate { - project.apply(ImmutableMap.of("plugin", "maven-publish")) + project.apply() val publishing = project.extensions.getByType(PublishingExtension::class.java) publishing.repositories { maven { From ea5151a1d28a37a5f13a09cb90a85f2981b0bfb3 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Mon, 13 Feb 2023 11:59:25 -0600 Subject: [PATCH 07/11] Simplify publishing --- .../plugins/FirebaseJavaLibraryPlugin.kt | 23 ++++++++----------- .../gradle/plugins/FirebaseLibraryPlugin.kt | 18 ++++----------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt index 6554ee94ddd..863c8708422 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -27,6 +27,7 @@ import org.gradle.api.plugins.JavaLibraryPlugin import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -80,24 +81,18 @@ class FirebaseJavaLibraryPlugin : Plugin { } private fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) { - project.apply(ImmutableMap.of("plugin", "maven-publish")) - val publishing = project.extensions.getByType(PublishingExtension::class.java) - publishing.repositories { - maven { + project.apply() + project.extensions.configure { + repositories.maven { val s = project.rootProject.buildDir.toString() + "/m2repository" - val file = File(s) - url = file.toURI() + url = File(s).toURI() name = "BuildDir" } - } - publishing.publications { - create("mavenAar", MavenPublication::class.java) { + publications.create("mavenAar") { from(project.components.findByName(firebaseLibrary.type.componentName)) - project.afterEvaluate { - artifactId = firebaseLibrary.artifactId.get() - groupId = firebaseLibrary.groupId.get() - firebaseLibrary.applyPomCustomization(pom) - } + artifactId = firebaseLibrary.artifactId.get() + groupId = firebaseLibrary.groupId.get() + firebaseLibrary.applyPomCustomization(pom) } } } diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index daba67287ef..92ec9f4165f 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -30,10 +30,7 @@ import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.api.publish.tasks.GenerateModuleMetadata -import org.gradle.kotlin.dsl.apply -import org.gradle.kotlin.dsl.create -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.withType +import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class FirebaseLibraryPlugin : Plugin { @@ -126,18 +123,13 @@ class FirebaseLibraryPlugin : Plugin { project.afterEvaluate { project.apply() - val publishing = project.extensions.getByType(PublishingExtension::class.java) - publishing.repositories { - maven { + project.extensions.configure { + repositories.maven { val s = project.rootProject.buildDir.toString() + "/m2repository" - val file = File(s) - url = file.toURI() + url = File(s).toURI() name = "BuildDir" } - } - - publishing.publications { - create("mavenAar", MavenPublication::class.java) { + publications.create("mavenAar") { from(project.components.findByName(firebaseLibrary.type.componentName)) artifactId = firebaseLibrary.artifactId.get() groupId = firebaseLibrary.groupId.get() From 181c2a803a59c6142aa5e4c12ecd30c9a40d7f18 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Tue, 14 Feb 2023 16:24:52 -0600 Subject: [PATCH 08/11] Refactor plugin base class --- .../plugins/BaseFirebaseLibraryPlugin.kt | 94 +++++++++++++++++++ .../plugins/FirebaseJavaLibraryPlugin.kt | 25 +---- .../gradle/plugins/FirebaseLibraryPlugin.kt | 28 ++---- .../firebase/gradle/plugins/GradleUtils.kt | 63 ------------- 4 files changed, 101 insertions(+), 109 deletions(-) create mode 100644 buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt new file mode 100644 index 00000000000..a598c034e41 --- /dev/null +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt @@ -0,0 +1,94 @@ +package com.google.firebase.gradle.plugins + +import com.google.firebase.gradle.plugins.ci.Coverage +import java.io.File +import java.nio.file.Paths +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.publish.maven.plugins.MavenPublishPlugin +import org.gradle.api.tasks.TaskProvider +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.register + +abstract class BaseFirebaseLibraryPlugin : Plugin { + + protected fun kotlinModuleName(project: Project): String { + val fullyQualifiedProjectPath = project.path.replace(":".toRegex(), "-") + return project.rootProject.name + fullyQualifiedProjectPath + } + + protected fun setupStaticAnalysis(project: Project, library: FirebaseLibraryExtension) { + project.afterEvaluate { + configurations.all { + if ("lintChecks" == name) { + for (checkProject in library.staticAnalysis.androidLintCheckProjects) { + project.dependencies.add("lintChecks", project.project(checkProject!!)) + } + } + } + } + project.tasks.register("firebaseLint") { dependsOn("lint") } + Coverage.apply(library) + } + + protected fun getApiInfo(project: Project, srcDirs: Set): TaskProvider { + val outputFile = + project.rootProject.file( + Paths.get( + project.rootProject.buildDir.path, + "apiinfo", + project.path.substring(1).replace(":", "_") + ) + ) + val outputApiFile = File(outputFile.absolutePath + "_api.txt") + val apiTxt = + if (project.file("api.txt").exists()) project.file("api.txt") + else project.file(project.rootDir.toString() + "/empty-api.txt") + val apiInfo = + project.tasks.register("apiInformation") { + sources.value(project.provider { srcDirs }) + apiTxtFile.set(apiTxt) + baselineFile.set(project.file("baseline.txt")) + this.outputFile.set(outputFile) + this.outputApiFile.set(outputApiFile) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + return apiInfo + } + + protected fun getGenerateApiTxt(project: Project, srcDirs: Set) = + project.tasks.register("generateApiTxtFile") { + sources.value(project.provider { srcDirs }) + apiTxtFile.set(project.file("api.txt")) + baselineFile.set(project.file("baseline.txt")) + updateBaseline.set(project.hasProperty("updateBaseline")) + } + + protected fun getDocStubs(project: Project, srcDirs: Set) = + project.tasks.register("docStubs") { + sources.value(project.provider { srcDirs }) + } + + protected fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) { + project.afterEvaluate { + project.apply() + project.extensions.configure { + repositories.maven { + val s = project.rootProject.buildDir.toString() + "/m2repository" + url = File(s).toURI() + name = "BuildDir" + } + publications.create("mavenAar") { + from(project.components.findByName(firebaseLibrary.type.componentName)) + artifactId = firebaseLibrary.artifactId.get() + groupId = firebaseLibrary.groupId.get() + firebaseLibrary.applyPomCustomization(pom) + } + } + } + } +} diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt index 863c8708422..2ffec857609 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.kt @@ -17,21 +17,15 @@ package com.google.firebase.gradle.plugins import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatPlugin import com.google.common.collect.ImmutableList -import com.google.common.collect.ImmutableMap import com.google.firebase.gradle.plugins.LibraryType.JAVA -import java.io.File -import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.attributes.Attribute import org.gradle.api.plugins.JavaLibraryPlugin import org.gradle.api.plugins.JavaPluginConvention -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.kotlin.dsl.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -class FirebaseJavaLibraryPlugin : Plugin { +class FirebaseJavaLibraryPlugin : BaseFirebaseLibraryPlugin() { override fun apply(project: Project) { project.apply() @@ -79,21 +73,4 @@ class FirebaseJavaLibraryPlugin : Plugin { docStubs.configure { classPath = classpath } } } - - private fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) { - project.apply() - project.extensions.configure { - repositories.maven { - val s = project.rootProject.buildDir.toString() + "/m2repository" - url = File(s).toURI() - name = "BuildDir" - } - publications.create("mavenAar") { - from(project.components.findByName(firebaseLibrary.type.componentName)) - artifactId = firebaseLibrary.artifactId.get() - groupId = firebaseLibrary.groupId.get() - firebaseLibrary.applyPomCustomization(pom) - } - } - } } diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index 92ec9f4165f..126e5acedab 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -23,17 +23,16 @@ import com.google.firebase.gradle.plugins.ci.device.FirebaseTestServer import com.google.firebase.gradle.plugins.license.LicenseResolverPlugin import java.io.File import org.gradle.api.JavaVersion -import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.attributes.Attribute -import org.gradle.api.publish.PublishingExtension -import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.publish.maven.plugins.MavenPublishPlugin import org.gradle.api.publish.tasks.GenerateModuleMetadata -import org.gradle.kotlin.dsl.* +import org.gradle.kotlin.dsl.apply +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -class FirebaseLibraryPlugin : Plugin { +class FirebaseLibraryPlugin : BaseFirebaseLibraryPlugin() { override fun apply(project: Project) { project.apply() @@ -121,21 +120,6 @@ class FirebaseLibraryPlugin : Plugin { android.publishing.singleVariant("release") { withSourcesJar() } project.tasks.withType { isEnabled = false } - project.afterEvaluate { - project.apply() - project.extensions.configure { - repositories.maven { - val s = project.rootProject.buildDir.toString() + "/m2repository" - url = File(s).toURI() - name = "BuildDir" - } - publications.create("mavenAar") { - from(project.components.findByName(firebaseLibrary.type.componentName)) - artifactId = firebaseLibrary.artifactId.get() - groupId = firebaseLibrary.groupId.get() - firebaseLibrary.applyPomCustomization(pom) - } - } - } + configurePublishing(project, firebaseLibrary) } } diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt index 1fedc5b3f11..47c55b479bc 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/GradleUtils.kt @@ -14,15 +14,11 @@ package com.google.firebase.gradle.plugins -import com.google.firebase.gradle.plugins.ci.Coverage import java.io.File -import java.nio.file.Paths import org.gradle.api.Project import org.gradle.api.provider.Provider import org.gradle.api.tasks.Copy -import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.apply -import org.gradle.kotlin.dsl.register fun Copy.fromDirectory(directory: Provider) = from(directory) { into(directory.map { it.name }) } @@ -53,73 +49,14 @@ fun Project.childFile(provider: Provider, childPath: String) = * any children. * * Syntax sugar for: - * * ``` * listFiles().orEmpty() * ``` */ fun File.listFilesOrEmpty() = listFiles().orEmpty() -fun kotlinModuleName(project: Project): String { - val fullyQualifiedProjectPath = project.path.replace(":".toRegex(), "-") - return project.rootProject.name + fullyQualifiedProjectPath -} - -fun setupStaticAnalysis(project: Project, library: FirebaseLibraryExtension) { - project.afterEvaluate { - configurations.all { - if ("lintChecks" == name) { - for (checkProject in library.staticAnalysis.androidLintCheckProjects) { - project.dependencies.add("lintChecks", project.project(checkProject!!)) - } - } - } - } - project.tasks.register("firebaseLint") { dependsOn("lint") } - Coverage.apply(library) -} - -fun getApiInfo(project: Project, srcDirs: Set): TaskProvider { - val outputFile = - project.rootProject.file( - Paths.get( - project.rootProject.buildDir.path, - "apiinfo", - project.path.substring(1).replace(":", "_") - ) - ) - val outputApiFile = File(outputFile.absolutePath + "_api.txt") - val apiTxt = - if (project.file("api.txt").exists()) project.file("api.txt") - else project.file(project.rootDir.toString() + "/empty-api.txt") - val apiInfo = - project.tasks.register("apiInformation") { - sources.value(project.provider { srcDirs }) - apiTxtFile.set(apiTxt) - baselineFile.set(project.file("baseline.txt")) - this.outputFile.set(outputFile) - this.outputApiFile.set(outputApiFile) - updateBaseline.set(project.hasProperty("updateBaseline")) - } - return apiInfo -} - -fun getGenerateApiTxt(project: Project, srcDirs: Set) = - project.tasks.register("generateApiTxtFile") { - sources.value(project.provider { srcDirs }) - apiTxtFile.set(project.file("api.txt")) - baselineFile.set(project.file("baseline.txt")) - updateBaseline.set(project.hasProperty("updateBaseline")) - } - -fun getDocStubs(project: Project, srcDirs: Set) = - project.tasks.register("docStubs") { - sources.value(project.provider { srcDirs }) - } - /** * Syntax sugar for: - * * ```kotlin * pluginManager.apply(T::class) * ``` From fcc015ef8c94ffffdbf67c6a4d93702d473518cf Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Tue, 14 Feb 2023 16:27:02 -0600 Subject: [PATCH 09/11] Add copyright notice --- .../gradle/plugins/BaseFirebaseLibraryPlugin.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt index a598c034e41..676b7bdfec4 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt @@ -1,3 +1,16 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. package com.google.firebase.gradle.plugins import com.google.firebase.gradle.plugins.ci.Coverage From c3ae81427f263df243847b430155c66fd84d4ef7 Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Fri, 17 Feb 2023 13:51:47 -0600 Subject: [PATCH 10/11] Adjust leftover plugin apply --- .../google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt index 126e5acedab..c99a536d472 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.kt @@ -47,8 +47,8 @@ class FirebaseLibraryPlugin : BaseFirebaseLibraryPlugin() { kotlinOptions.freeCompilerArgs = listOf("-module-name", kotlinModuleName(project)) } - project.pluginManager.apply(DackkaPlugin::class.java) - project.pluginManager.apply(GitSubmodulePlugin::class.java) + project.apply() + project.apply() project.tasks.getByName("preBuild").dependsOn("updateGitSubmodules") } From c7a53f660b745d61d45901df4cd53504cbc0a0ed Mon Sep 17 00:00:00 2001 From: Emily Ploszaj Date: Fri, 17 Feb 2023 15:28:31 -0600 Subject: [PATCH 11/11] Use takeIf --- .../firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt index 676b7bdfec4..0815b135053 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/BaseFirebaseLibraryPlugin.kt @@ -59,8 +59,7 @@ abstract class BaseFirebaseLibraryPlugin : Plugin { ) val outputApiFile = File(outputFile.absolutePath + "_api.txt") val apiTxt = - if (project.file("api.txt").exists()) project.file("api.txt") - else project.file(project.rootDir.toString() + "/empty-api.txt") + project.file("api.txt").takeIf { it.exists() } ?: project.rootProject.file("empty-api.txt") val apiInfo = project.tasks.register("apiInformation") { sources.value(project.provider { srcDirs })