Skip to content

Commit 405f5be

Browse files
committed
Converty library plugins to kotlin
1 parent 7b7a6b1 commit 405f5be

File tree

5 files changed

+296
-496
lines changed

5 files changed

+296
-496
lines changed

buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseJavaLibraryPlugin.java

Lines changed: 0 additions & 207 deletions
This file was deleted.
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package com.google.firebase.gradle.plugins
2+
3+
import com.github.sherter.googlejavaformatgradleplugin.GoogleJavaFormatExtension
4+
import com.google.common.collect.ImmutableList
5+
import com.google.common.collect.ImmutableMap
6+
import java.io.File
7+
import java.nio.file.Paths
8+
import org.gradle.api.Plugin
9+
import org.gradle.api.Project
10+
import org.gradle.api.attributes.Attribute
11+
import org.gradle.api.plugins.JavaPluginConvention
12+
import org.gradle.api.publish.PublishingExtension
13+
import org.gradle.api.publish.maven.MavenPublication
14+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
15+
16+
class FirebaseJavaLibraryPlugin : Plugin<Project> {
17+
18+
override fun apply(project: Project) {
19+
project.apply(ImmutableMap.of("plugin", "java-library"))
20+
project.apply(ImmutableMap.of("plugin", "com.github.sherter.google-java-format"))
21+
project.extensions.getByType(GoogleJavaFormatExtension::class.java).toolVersion = "1.10.0"
22+
val firebaseLibrary =
23+
project.extensions.create(
24+
"firebaseLibrary",
25+
FirebaseLibraryExtension::class.java,
26+
project,
27+
LibraryType.JAVA
28+
)
29+
30+
// reduce the likelihood of kotlin module files colliding.
31+
project.tasks.withType(KotlinCompile::class.java) {
32+
kotlinOptions.freeCompilerArgs = ImmutableList.of("-module-name", kotlinModuleName(project))
33+
}
34+
setupStaticAnalysis(project, firebaseLibrary)
35+
setupApiInformationAnalysis(project)
36+
configurePublishing(project, firebaseLibrary)
37+
project.tasks.register("kotlindoc")
38+
}
39+
40+
private fun setupApiInformationAnalysis(project: Project) {
41+
val mainSourceSet =
42+
project.convention.getPlugin(JavaPluginConvention::class.java).sourceSets.getByName("main")
43+
val outputFile =
44+
project.rootProject.file(
45+
Paths.get(
46+
project.rootProject.buildDir.path,
47+
"apiinfo",
48+
project.path.substring(1).replace(":", "_")
49+
)
50+
)
51+
val outputApiFile = File(outputFile.absolutePath + "_api.txt")
52+
val apiTxt =
53+
if (project.file("api.txt").exists()) project.file("api.txt")
54+
else project.file(project.rootDir.toString() + "/empty-api.txt")
55+
val apiInfo =
56+
project.tasks.register("apiInformation", ApiInformationTask::class.java) {
57+
sources.value(project.provider { mainSourceSet.java.srcDirs })
58+
apiTxtFile.set(apiTxt)
59+
baselineFile.set(project.file("baseline.txt"))
60+
this.outputFile.set(outputFile)
61+
this.outputApiFile.set(outputApiFile)
62+
updateBaseline.set(project.hasProperty("updateBaseline"))
63+
}
64+
val generateApiTxt =
65+
project.tasks.register("generateApiTxtFile", GenerateApiTxtTask::class.java) {
66+
sources.value(project.provider { mainSourceSet.java.srcDirs })
67+
apiTxtFile.set(project.file("api.txt"))
68+
baselineFile.set(project.file("baseline.txt"))
69+
updateBaseline.set(project.hasProperty("updateBaseline"))
70+
}
71+
val docStubs =
72+
project.tasks.register("docStubs", GenerateStubsTask::class.java) {
73+
sources.value(project.provider { mainSourceSet.java.srcDirs })
74+
}
75+
project.tasks.getByName("check").dependsOn(docStubs)
76+
project.afterEvaluate {
77+
val classpath =
78+
configurations
79+
.getByName("runtimeClasspath")
80+
.incoming
81+
.artifactView {
82+
attributes { attribute(Attribute.of("artifactType", String::class.java), "jar") }
83+
}
84+
.artifacts
85+
.artifactFiles
86+
apiInfo.configure { classPath = classpath }
87+
generateApiTxt.configure { classPath = classpath }
88+
docStubs.configure { classPath = classpath }
89+
}
90+
}
91+
private fun configurePublishing(project: Project, firebaseLibrary: FirebaseLibraryExtension) {
92+
project.apply(ImmutableMap.of("plugin", "maven-publish"))
93+
val publishing = project.extensions.getByType(PublishingExtension::class.java)
94+
publishing.repositories {
95+
maven {
96+
val s = project.rootProject.buildDir.toString() + "/m2repository"
97+
val file = File(s)
98+
url = file.toURI()
99+
name = "BuildDir"
100+
}
101+
}
102+
publishing.publications {
103+
create("mavenAar", MavenPublication::class.java) {
104+
from(project.components.findByName(firebaseLibrary.type.componentName))
105+
project.afterEvaluate {
106+
artifactId = firebaseLibrary.artifactId.get()
107+
groupId = firebaseLibrary.groupId.get()
108+
firebaseLibrary.applyPomCustomization(pom)
109+
}
110+
}
111+
}
112+
}
113+
}

0 commit comments

Comments
 (0)