Ignores ExperimentalMaterialApi in MaterialImportDetector
This is needed to use pull refresh APIs - when pull refresh is added to m3 we can remove this exception as well.
Fixes: b/293381183
Test: MaterialImportDetectorTest
Change-Id: I5135418e75345ded43f6923435ea1ebee59c44bf
diff --git a/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt b/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
index 33c73a5..b7ee362 100644
--- a/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
+++ b/compose/material3/material3-lint/src/main/java/androidx/compose/material3/lint/MaterialImportDetector.kt
@@ -53,6 +53,7 @@
) {
// Ignore explicitly allowed imports
if (AllowlistedSubpackages.any { importString.contains(it) }) return
+ if (AllowlistedImports.any { importString == it }) return
context.report(
UsingMaterialAndMaterial3Libraries,
@@ -94,3 +95,8 @@
// ignore
"$MaterialPackage.pullrefresh"
)
+
+// TODO: b/261760718 - remove this when pullrefresh is added to m3
+private val AllowlistedImports = listOf(
+ "$MaterialPackage.ExperimentalMaterialApi"
+)
diff --git a/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt b/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
index 065d628..5bdd89c 100644
--- a/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
+++ b/compose/material3/material3-lint/src/test/java/androidx/compose/material3/lint/MaterialImportDetectorTest.kt
@@ -65,6 +65,43 @@
"""
)
+ private val ExperimentalMaterialApiStub = bytecodeStub(
+ filename = "ExperimentalMaterialApi.kt",
+ filepath = "androidx/compose/material",
+ checksum = 0x6caaf88f,
+ """
+ package androidx.compose.material
+
+ @RequiresOptIn(
+ "This material API is experimental and is likely to change or to be removed in" +
+ " the future."
+ )
+ @Retention(AnnotationRetention.BINARY)
+ annotation class ExperimentalMaterialApi
+ """,
+"""
+ META-INF/main.kotlin_module:
+ H4sIAAAAAAAA/2NgYGBmYGBgBGIOBijgUuWSTMxLKcrPTKnQS87PLcgvTtXL
+ TSxJLcpMzBHicCotKcnP8y7hMuNSxalMr6A0J6coNa0otThDiDcAyAmCcID6
+ dLgUcOsryiwoyEkV4ggC00DValxSOFUbI7mGl4s5LT9fiC0ktbjEu0SJQYsB
+ ANpB3LXcAAAA
+ """,
+ """
+ androidx/compose/material/ExperimentalMaterialApi.class:
+ H4sIAAAAAAAA/5VSwW4TMRB93pAmpEDTAiVpKDUcyq3bFm6ctgjQSimtEoRU
+ 5eQkQ+Nmd52uvVF6y41/4oAijnwUYlY0JBJFiMv4zbxnzxvb3398+QrgJZ4J
+ HKiknxrdn/g9E4+MJT9WjlKtIv/NZMQgpsSp6Pi6GIx0CUKgeqHGyo9Ucu6f
+ dC+o50ooCOwsqipJjFNOm8QPfsMSigKbzaFxkU78Fl1mOiV7MnJh8kqgFJO1
+ 6pwEzj4MtJVzIzI4DSXntORHsu28FukhRVfSGdkbcFuSJs2TLsmUYjMmFiXS
+ DUh+ylyW0p7A9rz9ksMWOT6VEbsojlWUsYfnN+gWkyzvWDkK3wetMwHZvHH+
+ Ze3uPySnJtK9q9zG62bQbgusz20ck1N95RRzXjwu8PuJPJTzAAEx5PpE59k+
+ o/6BQH02LVe8mlfxqo3yt89ebTY99PbF0WyaCw4FXjT/+/G5Ozfb+gu7N3QC
+ lbbJ0h691RHfYr2V8VwxfdRWdyNaXKAVaFxzYTL+g91li7jFrVby8VDADkcP
+ TyB5fcd5hblVwh3cxb1fcA1VrKOIjQ4KIe6HeBDiITYZ4lGIGuodCIstNDrw
+ LB5bbOMpH7bKu/lLo2xx+yc4GLrsGQMAAA==
+ """
+ )
+
private val Material3ButtonStub = bytecodeStub(
filename = "Button.kt",
filepath = "androidx/compose/material3",
@@ -187,6 +224,7 @@
package foo
import androidx.compose.material.Button
+ import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material3.Button
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material.icons.Icons
@@ -196,6 +234,7 @@
"""
),
MaterialButtonStub,
+ ExperimentalMaterialApiStub,
Material3ButtonStub,
RippleStub,
IconsStub,
@@ -229,6 +268,7 @@
"""
),
MaterialButtonStub,
+ ExperimentalMaterialApiStub,
Material3ButtonStub,
RippleStub,
IconsStub,