Skip to content

Commit 880ee53

Browse files
committed
work
1 parent 922d04b commit 880ee53

File tree

6 files changed

+122
-85
lines changed

6 files changed

+122
-85
lines changed

dataconnect/app/build.gradle.kts

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
import com.android.build.api.variant.AndroidComponentsExtension
2-
import com.google.firebase.example.dataconnect.gradle.GenerateDataConnectSourcesTask
3-
import java.util.Locale
4-
51
plugins {
62
alias(libs.plugins.android.application)
73
alias(libs.plugins.jetbrains.kotlin.android)
@@ -55,13 +51,9 @@ android {
5551
excludes += "/META-INF/{AL2.0,LGPL2.1}"
5652
}
5753
}
58-
sourceSets.getByName("main") {
59-
java.srcDirs("build/generated/sources")
60-
}
6154
}
6255

6356
dependencies {
64-
6557
implementation(libs.androidx.core.ktx)
6658
implementation(libs.androidx.lifecycle.runtime.ktx)
6759
implementation(libs.androidx.lifecycle.viewmodel.compose)
@@ -88,25 +80,3 @@ dependencies {
8880
debugImplementation(libs.androidx.ui.tooling)
8981
debugImplementation(libs.androidx.ui.test.manifest)
9082
}
91-
92-
val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java)
93-
val generateDataConnectSourcesVariantTasks = mutableListOf<TaskProvider<GenerateDataConnectSourcesTask>>()
94-
androidComponents.onVariants { variant ->
95-
val variantNameTitleCase = variant.name.replaceFirstChar { it.titlecase(Locale.US) }
96-
val generateCodeTaskName = "generateDataConnectSources$variantNameTitleCase"
97-
val generateCodeTask = tasks.register<GenerateDataConnectSourcesTask>(generateCodeTaskName) {
98-
inputDirectory.set(layout.projectDirectory.dir("../dataconnect"))
99-
workDirectory.set(layout.buildDirectory.dir("intermediates/dataconnect/${variant.name}"))
100-
}
101-
generateDataConnectSourcesVariantTasks.add(generateCodeTask)
102-
variant.sources.java!!.addGeneratedSourceDirectory(
103-
generateCodeTask,
104-
GenerateDataConnectSourcesTask::outputDirectory,
105-
)
106-
}
107-
108-
tasks.register("generateDataConnectSources") {
109-
generateDataConnectSourcesVariantTasks.forEach {
110-
dependsOn(it)
111-
}
112-
}

dataconnect/buildSrc/build.gradle.kts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,18 @@
1515
*/
1616

1717
plugins {
18-
`kotlin-dsl`
18+
`java-gradle-plugin`
19+
alias(libs.plugins.kotlin.jvm)
20+
}
21+
22+
java {
23+
toolchain {
24+
languageVersion.set(JavaLanguageVersion.of(17))
25+
}
1926
}
2027

2128
dependencies {
29+
compileOnly(libs.android.gradlePlugin.api)
2230
implementation(gradleKotlinDsl())
2331
}
2432

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
1-
dependencyResolutionManagement {
1+
rootProject.name = "buildSrc"
2+
3+
pluginManagement {
24
repositories {
5+
maven { url = uri("") }
6+
gradlePluginPortal()
37
google()
48
mavenCentral()
59
}
610
}
11+
12+
dependencyResolutionManagement {
13+
repositories {
14+
maven { url = uri("") }
15+
google()
16+
mavenCentral()
17+
}
18+
versionCatalogs {
19+
create("libs") {
20+
from(files("../../gradle/libs.versions.toml"))
21+
}
22+
}
23+
24+
}

dataconnect/buildSrc/src/main/kotlin/com/google/firebase/example/dataconnect/gradle/DataConnectGradlePlugin.kt

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,50 @@
1616

1717
package com.google.firebase.example.dataconnect.gradle
1818

19+
import com.android.build.api.variant.AndroidComponentsExtension
1920
import org.gradle.api.Plugin
2021
import org.gradle.api.Project
22+
import org.gradle.api.logging.Logging
23+
import org.gradle.api.tasks.TaskProvider
24+
import org.gradle.kotlin.dsl.register
25+
import java.util.Locale
2126

2227
@Suppress("unused")
2328
abstract class DataConnectGradlePlugin : Plugin<Project> {
24-
override fun apply(project: Project) {
25-
}
29+
30+
private val logger = Logging.getLogger(javaClass)
31+
32+
override fun apply(project: Project) {
33+
val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java)
34+
logger.info("Found AndroidComponentsExtension: ${androidComponents::class.qualifiedName}")
35+
logger.info("Android Gradle Plugin (AGP) Version: ${androidComponents.pluginVersion.version}")
36+
37+
val generateDataConnectSourcesVariantTasks = mutableListOf<TaskProvider<GenerateDataConnectSourcesTask>>()
38+
androidComponents.onVariants { variant ->
39+
val variantNameTitleCase = variant.name.replaceFirstChar { it.titlecase(Locale.US) }
40+
val generateCodeTaskName = "generateDataConnectSources$variantNameTitleCase"
41+
42+
logger.info("Registering Gradle task: $generateCodeTaskName")
43+
val generateCodeTask = project.tasks.register<GenerateDataConnectSourcesTask>(generateCodeTaskName) {
44+
inputDirectory.set(project.layout.projectDirectory.dir("../dataconnect"))
45+
workDirectory.set(project.layout.buildDirectory.dir("intermediates/dataconnect/${variant.name}"))
46+
}
47+
generateDataConnectSourcesVariantTasks.add(generateCodeTask)
48+
49+
variant.sources.java!!.addGeneratedSourceDirectory(
50+
generateCodeTask,
51+
GenerateDataConnectSourcesTask::outputDirectory,
52+
)
53+
}
54+
55+
androidComponents.selector()
56+
57+
val generateDataConnectSourcesTaskName = "generateDataConnectSources"
58+
logger.info("Registering Gradle task: $generateDataConnectSourcesTaskName")
59+
project.tasks.register(generateDataConnectSourcesTaskName) { task ->
60+
generateDataConnectSourcesVariantTasks.forEach {
61+
task.dependsOn(it)
62+
}
63+
}
64+
}
2665
}

dataconnect/buildSrc/src/main/kotlin/com/google/firebase/example/dataconnect/gradle/GenerateDataConnectSourcesTask.kt

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,64 +25,64 @@ import org.gradle.api.tasks.TaskAction
2525

2626
abstract class GenerateDataConnectSourcesTask : DefaultTask() {
2727

28-
@get:InputFiles
29-
abstract val inputDirectory: DirectoryProperty
28+
@get:InputFiles
29+
abstract val inputDirectory: DirectoryProperty
3030

31-
@get:OutputDirectory
32-
abstract val outputDirectory: DirectoryProperty
31+
@get:OutputDirectory
32+
abstract val outputDirectory: DirectoryProperty
3333

34-
@get:Internal
35-
abstract val workDirectory: DirectoryProperty
34+
@get:Internal
35+
abstract val workDirectory: DirectoryProperty
3636

37-
@TaskAction
38-
fun run() {
39-
val inputDirectory = inputDirectory.get().asFile
40-
val outputDirectory = outputDirectory.get().asFile
41-
val workDirectory = workDirectory.get().asFile
37+
@TaskAction
38+
fun run() {
39+
val inputDirectory = inputDirectory.get().asFile
40+
val outputDirectory = outputDirectory.get().asFile
41+
val workDirectory = workDirectory.get().asFile
4242

43-
project.delete(outputDirectory)
44-
project.delete(workDirectory)
43+
project.delete(outputDirectory)
44+
project.delete(workDirectory)
4545

46-
project.copy {
47-
from(inputDirectory)
48-
into(workDirectory)
49-
}
46+
project.copy {
47+
it.from(inputDirectory)
48+
it.into(workDirectory)
49+
}
5050

51-
val connectorYamlFile = workDirectory.resolve("movie-connector/connector.yaml")
52-
val outputFileLineRegex = Regex("""(\s*outputDir:\s*).*""")
53-
val connectorYamlOriginalLines = connectorYamlFile.readLines(Charsets.UTF_8)
54-
val connectorYamlUpdatedLines = connectorYamlOriginalLines.map {
55-
val matchResult = outputFileLineRegex.matchEntire(it)
56-
if (matchResult === null) {
57-
it
58-
} else {
59-
matchResult.groupValues[1] + outputDirectory.absolutePath
60-
}
61-
}
62-
connectorYamlFile.writeText(connectorYamlUpdatedLines.joinToString("") { it + "\n" }, Charsets.UTF_8)
51+
val connectorYamlFile = workDirectory.resolve("movie-connector/connector.yaml")
52+
val outputFileLineRegex = Regex("""(\s*outputDir:\s*).*""")
53+
val connectorYamlOriginalLines = connectorYamlFile.readLines(Charsets.UTF_8)
54+
val connectorYamlUpdatedLines = connectorYamlOriginalLines.map {
55+
val matchResult = outputFileLineRegex.matchEntire(it)
56+
if (matchResult === null) {
57+
it
58+
} else {
59+
matchResult.groupValues[1] + outputDirectory.absolutePath
60+
}
61+
}
62+
connectorYamlFile.writeText(connectorYamlUpdatedLines.joinToString("") { it + "\n" }, Charsets.UTF_8)
6363

64-
val logFile = if (logger.isInfoEnabled) null else workDirectory.resolve("generate.log.txt")
65-
val logFileStream = logFile?.outputStream()
66-
try {
67-
project.exec {
68-
isIgnoreExitValue = false
69-
if (logFileStream !== null) {
70-
standardOutput = logFileStream
71-
errorOutput = logFileStream
64+
val logFile = if (logger.isInfoEnabled) null else workDirectory.resolve("generate.log.txt")
65+
val logFileStream = logFile?.outputStream()
66+
try {
67+
project.exec { execSpec ->
68+
execSpec.isIgnoreExitValue = false
69+
if (logFileStream !== null) {
70+
execSpec.standardOutput = logFileStream
71+
execSpec.errorOutput = logFileStream
72+
}
73+
execSpec.workingDir(workDirectory)
74+
execSpec.executable("firebase")
75+
execSpec.args("--debug")
76+
execSpec.args("dataconnect:sdk:generate")
77+
// Specify a fake project because dataconnect:sdk:generate unnecessarily
78+
// requires one. The actual value does not matter.
79+
execSpec.args("--project", "zzyzx")
80+
}
81+
} catch (e: Exception) {
82+
logFileStream?.close()
83+
logFile?.forEachLine { logger.error(it.trimEnd()) }
84+
} finally {
85+
logFileStream?.close()
7286
}
73-
workingDir(workDirectory)
74-
executable("firebase")
75-
args("--debug")
76-
args("dataconnect:sdk:generate")
77-
// Specify a fake project because dataconnect:sdk:generate unnecessarily
78-
// requires one. The actual value does not matter.
79-
args("--project", "zzyzx")
80-
}
81-
} catch (e: Exception) {
82-
logFileStream?.close()
83-
logFile?.forEachLine { logger.error(it.trimEnd()) }
84-
} finally {
85-
logFileStream?.close()
8687
}
87-
}
8888
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ googleServices = "4.4.2"
1616
composeNavigation = "2.8.4"
1717

1818
[libraries]
19+
android-gradlePlugin-api = { group = "com.android.tools.build", name = "gradle-api", version.ref = "agp" }
1920
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
2021
androidx-lifecycle-runtime-compose-android = { module = "androidx.lifecycle:lifecycle-runtime-compose-android", version.ref = "lifecycle" }
2122
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle" }
@@ -44,3 +45,4 @@ jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref =
4445
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
4546
google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" }
4647
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
48+
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }

0 commit comments

Comments
 (0)