[go: nahoru, domu]

Add support for publishing JS- and JVM-targeted libraries in top-of-tree

Adds workaround for Gradle bug where metadata and pom dependencies are not
ordered the same between builds by sorting the dependencies in-place.

Test: ./gradlew createDiffArchiveForAndroidxCollection
Fixes: 220313866
Bug: 217412416
Change-Id: I96999eaf9720b86bae426cadf1b279c4fdb27619
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/MavenUploadHelperTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/MavenUploadHelperTest.kt
new file mode 100644
index 0000000..81b3e7c
--- /dev/null
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/MavenUploadHelperTest.kt
@@ -0,0 +1,367 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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 androidx.build
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class MavenUploadHelperTest {
+    @Test
+    fun testSortPomDependencies() {
+        /* ktlint-disable max-line-length */
+        val pom = """
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <!-- This module was also published with a richer model, Gradle metadata,  -->
+  <!-- which should be used instead. Do not delete the following line which  -->
+  <!-- is to indicate to Gradle or any Gradle module metadata file consumer  -->
+  <!-- that they should prefer consuming it instead. -->
+  <!-- do_not_remove: published-with-gradle-metadata -->
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>androidx.collection</groupId>
+  <artifactId>collection-jvm</artifactId>
+  <version>1.3.0-alpha01</version>
+  <name>Android Support Library collections</name>
+  <description>Standalone efficient collections.</description>
+  <url>https://developer.android.com/jetpack/androidx/releases/collection#1.3.0-alpha01</url>
+  <inceptionYear>2018</inceptionYear>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <developers>
+    <developer>
+      <name>The Android Open Source Project</name>
+    </developer>
+  </developers>
+  <scm>
+    <connection>scm:git:https://android.googlesource.com/platform/frameworks/support</connection>
+    <url>https://cs.android.com/androidx/platform/frameworks/support</url>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib-common</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.3.0</version>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
+        """
+
+        val expected = """
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <!-- This module was also published with a richer model, Gradle metadata,  -->
+  <!-- which should be used instead. Do not delete the following line which  -->
+  <!-- is to indicate to Gradle or any Gradle module metadata file consumer  -->
+  <!-- that they should prefer consuming it instead. -->
+  <!-- do_not_remove: published-with-gradle-metadata -->
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>androidx.collection</groupId>
+  <artifactId>collection-jvm</artifactId>
+  <version>1.3.0-alpha01</version>
+  <name>Android Support Library collections</name>
+  <description>Standalone efficient collections.</description>
+  <url>https://developer.android.com/jetpack/androidx/releases/collection#1.3.0-alpha01</url>
+  <inceptionYear>2018</inceptionYear>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <developers>
+    <developer>
+      <name>The Android Open Source Project</name>
+    </developer>
+  </developers>
+  <scm>
+    <connection>scm:git:https://android.googlesource.com/platform/frameworks/support</connection>
+    <url>https://cs.android.com/androidx/platform/frameworks/support</url>
+  </scm>
+  <dependencies>
+    <dependency>
+      <groupId>androidx.annotation</groupId>
+      <artifactId>annotation</artifactId>
+      <version>1.3.0</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib-common</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jetbrains.kotlin</groupId>
+      <artifactId>kotlin-stdlib</artifactId>
+      <version>1.6.10</version>
+      <scope>compile</scope>
+    </dependency>
+  </dependencies>
+</project>
+        """
+        /* ktlint-enable max-line-length */
+
+        val actual = sortPomDependencies(pom)
+        assertEquals(expected, actual)
+    }
+
+    @Test
+    fun testSortGradleMetadataDependencies() {
+        /* ktlint-disable max-line-length */
+        val metadata = """
+{
+  "formatVersion": "1.1",
+  "component": {
+    "url": "../../collection/1.3.0-alpha01/collection-1.3.0-alpha01.module",
+    "group": "androidx.collection",
+    "module": "collection",
+    "version": "1.3.0-alpha01",
+    "attributes": {
+      "org.gradle.status": "release"
+    }
+  },
+  "createdBy": {
+    "gradle": {
+      "version": "7.4"
+    }
+  },
+  "variants": [
+    {
+      "name": "jvmApiElements-published",
+      "attributes": {
+        "org.gradle.category": "library",
+        "org.gradle.libraryelements": "jar",
+        "org.gradle.usage": "java-api",
+        "org.jetbrains.kotlin.platform.type": "jvm"
+      },
+      "dependencies": [
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib",
+          "version": {
+            "requires": "1.6.10"
+          }
+        },
+        {
+          "group": "androidx.annotation",
+          "module": "annotation",
+          "version": {
+            "requires": "1.3.0"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib-common",
+          "version": {
+            "requires": "1.6.10"
+          }
+        }
+      ],
+      "files": [
+        {
+          "name": "collection-jvm-1.3.0-alpha01.jar",
+          "url": "collection-jvm-1.3.0-alpha01.jar",
+          "size": 42271,
+          "sha512": "b01746682f5499426492ed56cfa10e863b181f0a94e1c97de935a1d68bc1a8da9b60bbc670a71642e4c4ebde0cedbed42f08f6b305bbfa7270b3b1fa76059fa6",
+          "sha256": "647d39d1ef35b45ff9b4c4b2afd7b0280431223142ededb4ee2d3ff73eb2657a",
+          "sha1": "11cbbdeaa0540d0cef16567781a99cdf7b34b242",
+          "md5": "309042f77be5772d725180056e5e97e9"
+        }
+      ]
+    },
+    {
+      "name": "jvmRuntimeElements-published",
+      "attributes": {
+        "org.gradle.category": "library",
+        "org.gradle.libraryelements": "jar",
+        "org.gradle.usage": "java-runtime",
+        "org.jetbrains.kotlin.platform.type": "jvm"
+      },
+      "dependencies": [
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib",
+          "version": {
+            "requires": "1.6.10"
+          }
+        },
+        {
+          "group": "androidx.annotation",
+          "module": "annotation",
+          "version": {
+            "requires": "1.3.0"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib-common",
+          "version": {
+            "requires": "1.6.10"
+          }
+        }
+      ],
+      "files": [
+        {
+          "name": "collection-jvm-1.3.0-alpha01.jar",
+          "url": "collection-jvm-1.3.0-alpha01.jar",
+          "size": 42271,
+          "sha512": "b01746682f5499426492ed56cfa10e863b181f0a94e1c97de935a1d68bc1a8da9b60bbc670a71642e4c4ebde0cedbed42f08f6b305bbfa7270b3b1fa76059fa6",
+          "sha256": "647d39d1ef35b45ff9b4c4b2afd7b0280431223142ededb4ee2d3ff73eb2657a",
+          "sha1": "11cbbdeaa0540d0cef16567781a99cdf7b34b242",
+          "md5": "309042f77be5772d725180056e5e97e9"
+        }
+      ]
+    }
+  ]
+}
+        """
+
+        val expected = """
+{
+  "formatVersion": "1.1",
+  "component": {
+    "url": "../../collection/1.3.0-alpha01/collection-1.3.0-alpha01.module",
+    "group": "androidx.collection",
+    "module": "collection",
+    "version": "1.3.0-alpha01",
+    "attributes": {
+      "org.gradle.status": "release"
+    }
+  },
+  "createdBy": {
+    "gradle": {
+      "version": "7.4"
+    }
+  },
+  "variants": [
+    {
+      "name": "jvmApiElements-published",
+      "attributes": {
+        "org.gradle.category": "library",
+        "org.gradle.libraryelements": "jar",
+        "org.gradle.usage": "java-api",
+        "org.jetbrains.kotlin.platform.type": "jvm"
+      },
+      "dependencies": [
+        {
+          "group": "androidx.annotation",
+          "module": "annotation",
+          "version": {
+            "requires": "1.3.0"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib",
+          "version": {
+            "requires": "1.6.10"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib-common",
+          "version": {
+            "requires": "1.6.10"
+          }
+        }
+      ],
+      "files": [
+        {
+          "name": "collection-jvm-1.3.0-alpha01.jar",
+          "url": "collection-jvm-1.3.0-alpha01.jar",
+          "size": 42271,
+          "sha512": "b01746682f5499426492ed56cfa10e863b181f0a94e1c97de935a1d68bc1a8da9b60bbc670a71642e4c4ebde0cedbed42f08f6b305bbfa7270b3b1fa76059fa6",
+          "sha256": "647d39d1ef35b45ff9b4c4b2afd7b0280431223142ededb4ee2d3ff73eb2657a",
+          "sha1": "11cbbdeaa0540d0cef16567781a99cdf7b34b242",
+          "md5": "309042f77be5772d725180056e5e97e9"
+        }
+      ]
+    },
+    {
+      "name": "jvmRuntimeElements-published",
+      "attributes": {
+        "org.gradle.category": "library",
+        "org.gradle.libraryelements": "jar",
+        "org.gradle.usage": "java-runtime",
+        "org.jetbrains.kotlin.platform.type": "jvm"
+      },
+      "dependencies": [
+        {
+          "group": "androidx.annotation",
+          "module": "annotation",
+          "version": {
+            "requires": "1.3.0"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib",
+          "version": {
+            "requires": "1.6.10"
+          }
+        },
+        {
+          "group": "org.jetbrains.kotlin",
+          "module": "kotlin-stdlib-common",
+          "version": {
+            "requires": "1.6.10"
+          }
+        }
+      ],
+      "files": [
+        {
+          "name": "collection-jvm-1.3.0-alpha01.jar",
+          "url": "collection-jvm-1.3.0-alpha01.jar",
+          "size": 42271,
+          "sha512": "b01746682f5499426492ed56cfa10e863b181f0a94e1c97de935a1d68bc1a8da9b60bbc670a71642e4c4ebde0cedbed42f08f6b305bbfa7270b3b1fa76059fa6",
+          "sha256": "647d39d1ef35b45ff9b4c4b2afd7b0280431223142ededb4ee2d3ff73eb2657a",
+          "sha1": "11cbbdeaa0540d0cef16567781a99cdf7b34b242",
+          "md5": "309042f77be5772d725180056e5e97e9"
+        }
+      ]
+    }
+  ]
+}
+        """
+        /* ktlint-enable max-line-length */
+
+        val actual = sortGradleMetadataDependencies(metadata)
+        assertEquals(expected, actual)
+    }
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
index 77a0c16..fc05633 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXExtension.kt
@@ -16,7 +16,6 @@
 
 package androidx.build
 
-import androidx.build.Multiplatform.Companion.isMultiplatformEnabled
 import androidx.build.checkapi.shouldConfigureApiTasks
 import groovy.lang.Closure
 import org.gradle.api.GradleException
@@ -186,12 +185,28 @@
 
     var bypassCoordinateValidation = false
 
-    var multiplatform: Boolean
+    /**
+     * Which KMP platforms are published by this project, as a list of artifact suffixes or an empty
+     * list for non-KMP projects.
+     *
+     * Setting this property to a non-empty list also sets the [multiplatform] property to `true`.
+     */
+    var publishPlatforms: List<String> = emptyList()
+        set(value) {
+            multiplatform = value.isNotEmpty()
+            field = value
+        }
+
+    /**
+     * Whether this project uses KMP.
+     *
+     * Consider setting the [publishPlatforms] property instead to ensure KMP artifacts are
+     * published.
+     */
+    var multiplatform: Boolean = false
         set(value) {
             Multiplatform.setEnabledForProject(project, value)
-        }
-        get() {
-            return project.isMultiplatformEnabled()
+            field = value
         }
 
     fun shouldEnforceKotlinStrictApiMode(): Boolean {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
index ec8d670..f96b9a5 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/MavenUploadHelper.kt
@@ -34,6 +34,7 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
 import java.io.File
+import org.gradle.api.publish.maven.tasks.GenerateMavenPom
 
 fun Project.configureMavenArtifactUpload(extension: AndroidXExtension) {
     apply(mapOf("plugin" to "maven-publish"))
@@ -112,6 +113,30 @@
         // Register it as part of release so that we create a Zip file for it
         Release.register(this, extension)
 
+        // Workarounds for https://github.com/gradle/gradle/issues/20011
+        project.tasks.withType(GenerateModuleMetadata::class.java).configureEach { task ->
+            task.doLast {
+                val metadataFile = task.outputFile.asFile.get()
+                val metadata = metadataFile.readText()
+                val sortedMetadata = sortGradleMetadataDependencies(metadata)
+
+                if (metadata != sortedMetadata) {
+                    metadataFile.writeText(sortedMetadata)
+                }
+            }
+        }
+        project.tasks.withType(GenerateMavenPom::class.java).configureEach { task ->
+            task.doLast {
+                val pomFile = task.destination
+                val pom = pomFile.readText()
+                val sortedPom = sortPomDependencies(pom)
+
+                if (pom != sortedPom) {
+                    pomFile.writeText(sortedPom)
+                }
+            }
+        }
+
         // Workaround for https://github.com/gradle/gradle/issues/11717
         project.tasks.withType(GenerateModuleMetadata::class.java).configureEach { task ->
             task.doLast {
@@ -132,6 +157,60 @@
     }
 }
 
+/**
+ * Looks for a dependencies XML element within [pom] and sorts its contents.
+ */
+fun sortPomDependencies(pom: String): String {
+    var sortedPom = pom
+    val regex = "(?s)<dependencies>\\n(.+?)<\\/dependency>\\s+<\\/dependencies>".toRegex()
+
+    var results = regex.findAll(pom)
+    results.forEach { result ->
+        val depsGroup = result.groups[1]
+        if (depsGroup != null) {
+            val depsRange = depsGroup.range
+            val deps = depsGroup.value
+            val sortedDeps = deps
+                .split("</dependency>\n")
+                .sorted()
+                .joinToString("</dependency>\n")
+
+            if (deps != sortedDeps) {
+                sortedPom = sortedPom.replaceRange(depsRange, sortedDeps)
+            }
+        }
+    }
+
+    return sortedPom
+}
+
+/**
+ * Looks for a dependencies JSON element within [metadata] and sorts its contents.
+ */
+fun sortGradleMetadataDependencies(metadata: String): String {
+    var sortedMetadata = metadata
+    val regex = "(?s)\"dependencies\": \\[\\n(.+?)}\\s+]".toRegex()
+
+    var results = regex.findAll(metadata)
+    results.forEach { result ->
+        val depsGroup = result.groups[1]
+        if (depsGroup != null) {
+            val depsRange = depsGroup.range
+            val deps = depsGroup.value
+            val sortedDeps = deps
+                .split("},\n")
+                .sorted()
+                .joinToString("},\n")
+
+            if (deps != sortedDeps) {
+                sortedMetadata = sortedMetadata.replaceRange(depsRange, sortedDeps)
+            }
+        }
+    }
+
+    return sortedMetadata
+}
+
 private fun Project.isMultiplatformPublicationEnabled(): Boolean {
     if (!project.isMultiplatformEnabled())
         return false
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
index ce93935..ccb3d9b 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
@@ -188,15 +188,12 @@
             getGroupReleaseZipTask(project, mavenGroup),
             getGlobalFullZipTask(project)
         )
-        val artifact = Artifact(
-            mavenGroup = mavenGroup,
-            projectName = project.name,
-            version = version.toString()
-        )
+
+        val artifacts = extension.publishedArtifacts
         val publishTask = project.tasks.named("publish")
         zipTasks.forEach {
             it.configure { zipTask ->
-                zipTask.addCandidate(artifact)
+                artifacts.forEach { artifact -> zipTask.addCandidate(artifact) }
 
                 // Add additional artifacts needed for Gradle Plugins
                 if (extension.type == LibraryType.GRADLE_PLUGIN) {
@@ -333,6 +330,30 @@
     }
 }
 
+val AndroidXExtension.publishedArtifacts: List<Artifact>
+    get() {
+        val groupString = mavenGroup?.group!!
+        val versionString = project.version.toString()
+        val artifacts = mutableListOf(
+            Artifact(
+                mavenGroup = groupString,
+                projectName = project.name,
+                version = versionString
+            )
+        )
+
+        // Add platform-specific artifacts, if necessary.
+        artifacts += publishPlatforms.map { suffix ->
+            Artifact(
+                mavenGroup = groupString,
+                projectName = "${project.name}-$suffix",
+                version = versionString
+            )
+        }
+
+        return artifacts
+    }
+
 /**
  * Converts the maven group into a readable task name.
  */
diff --git a/collection/collection/build.gradle b/collection/collection/build.gradle
index f878f54..12369f29 100644
--- a/collection/collection/build.gradle
+++ b/collection/collection/build.gradle
@@ -61,5 +61,5 @@
     mavenGroup = LibraryGroups.COLLECTION
     inceptionYear = "2018"
     description = "Standalone efficient collections."
-    multiplatform = true
+    publishPlatforms = ["jvm"]
 }
diff --git a/collection2/collection2/build.gradle b/collection2/collection2/build.gradle
index ab99a7f..535b1dc 100644
--- a/collection2/collection2/build.gradle
+++ b/collection2/collection2/build.gradle
@@ -16,7 +16,6 @@
 
 
 import androidx.build.Publish
-import androidx.build.RunApiTasks
 import me.champeau.gradle.japicmp.JapicmpTask
 import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
 
@@ -186,6 +185,9 @@
    sourceSets.test.java.srcDir('../../collection/collection/src/test/java')
 }
 
+def targetPlatformsList = ["jvm"]
+if (enableJs) targetPlatformsList += "js"
+
 androidx {
     name = "Android Support Library collections"
     publish = Publish.SNAPSHOT_AND_RELEASE
@@ -193,7 +195,7 @@
     inceptionYear = "2020"
     description = "Standalone efficient collections."
     legacyDisableKotlinStrictApiMode = true // TODO: Re-enable this!
-    multiplatform = true
+    publishPlatforms = targetPlatformsList
 }
 
 repositories {
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 10ad55d..ba3929a 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -283,6 +283,8 @@
 WARNING: An illegal reflective access operation has occurred
 WARNING: Illegal reflective access by org\.robolectric\.util\.ReflectionHelpers\$[0-9]+ \(file:\$CHECKOUT/prebuilts/androidx/external/org/robolectric/shadowapi/[0-9]+\.[0-9]+\.[0-9]+/shadowapi\-[0-9]+\.[0-9]+\.[0-9]+\.jar\) to field java\.io\.FileDescriptor\.fd
 WARNING: Please consider reporting this to the maintainers of org\.robolectric\.util\.ReflectionHelpers\$[0-9]+
+WARNING: Illegal reflective access by org\.jetbrains\.kotlin\.kapt[0-9]+\.util\.ModuleManipulationUtilsKt \(file:\$CHECKOUT/prebuilts/androidx/external/org/jetbrains/kotlin/kotlin\-annotation\-processing\-gradle/[0-9]+\.[0-9]+\.[0-9]+/kotlin\-annotation\-processing\-gradle\-[0-9]+\.[0-9]+\.[0-9]+\.jar\) to constructor com\.sun\.tools\.javac\.util\.Context\(\)
+WARNING: Please consider reporting this to the maintainers of org\.jetbrains\.kotlin\.kapt[0-9]+\.util\.ModuleManipulationUtilsKt
 WARNING: Please consider reporting this to the maintainers of org\.jetbrains\.kotlin\.kapt[0-9]+\.base\.javac\.KaptJavaFileManager
 WARNING: Illegal reflective access by com\.intellij\.util\.ReflectionUtil \(file:\$CHECKOUT/prebuilts/androidx/external/com/google/devsite/dackka/[0-9]+\.[0-9]+\.[0-9]+/dackka\-[0-9]+\.[0-9]+\.[0-9]+\.jar\) to method java\.util\.ResourceBundle\.setParent\(java\.util\.ResourceBundle\)
 WARNING: Please consider reporting this to the maintainers of com\.intellij\.util\.ReflectionUtil
@@ -591,4 +593,10 @@
 w: \[ksp\] \$SUPPORT/room/integration\-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.kt:[0-9]+: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
 # > Task :room:integration-tests:room-testapp-kotlin:kaptWithKaptDebugAndroidTestKotlin
 \$OUT_DIR/androidx/room/integration\-tests/room\-testapp\-kotlin/build/tmp/kapt[0-9]+/stubs/withKaptDebugAndroidTest/androidx/room/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.java:[0-9]+: warning: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
-public abstract androidx\.room\.androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDao jvmDao\(\);
\ No newline at end of file
+public abstract androidx\.room\.androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDao jvmDao\(\);
+# > Task :hilt:integration-tests:hilt-testapp-worker:kaptGenerateStubsDebugUnitTestKotlin
+at org\.jetbrains\.kotlin\.compilerRunner\.GradleCompilerRunner\.runCompilerAsync\(GradleKotlinCompilerRunner\.kt:[0-9]+\)
+at org\.jetbrains\.kotlin\.compilerRunner\.GradleCompilerRunner\.runJvmCompilerAsync\(GradleKotlinCompilerRunner\.kt:[0-9]+\)
+at org\.jetbrains\.kotlin\.gradle\.tasks\.KotlinCompile\.callCompilerAsync\$kotlin_gradle_plugin\(Tasks\.kt:[0-9]+\)
+at org\.jetbrains\.kotlin\.gradle\.tasks\.AbstractKotlinCompile\.executeImpl\(Tasks\.kt:[0-9]+\)
+at org\.jetbrains\.kotlin\.gradle\.tasks\.AbstractKotlinCompile\.execute\(Tasks\.kt:[0-9]+\)