Merge remote-tracking branch 'aosp/metalava-main' into 'aosp/main' am: 7235bb6d2a
Original change: https://android-review.googlesource.com/c/platform/tools/metalava/+/3272611
Change-Id: I77495e97c5d1b361730fa29c5e504d3eaba6416a
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/metalava/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt b/metalava/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
index 552fc8e..70925b4 100644
--- a/metalava/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
+++ b/metalava/src/main/java/com/android/tools/metalava/AndroidApiChecks.kt
@@ -212,9 +212,10 @@
}
}
for (item in permissions) {
- var perm = item
- if (perm.indexOf('.') >= 0) perm = perm.substring(perm.lastIndexOf('.') + 1)
- val mentioned = text.contains(perm)
+ val perm = item.substringAfterLast('.')
+ // Search for the permission name as a whole word.
+ val regex = Regex("""\b\Q$perm\E\b""")
+ val mentioned = text.contains(regex)
if (mentioned && !conditional) {
reporter.report(
Issues.REQUIRES_PERMISSION,
diff --git a/metalava/src/test/java/com/android/tools/metalava/AndroidApiChecksTest.kt b/metalava/src/test/java/com/android/tools/metalava/AndroidApiChecksTest.kt
index 3fab285..ff1d791 100644
--- a/metalava/src/test/java/com/android/tools/metalava/AndroidApiChecksTest.kt
+++ b/metalava/src/test/java/com/android/tools/metalava/AndroidApiChecksTest.kt
@@ -149,6 +149,55 @@
}
@Test
+ fun `Document Permissions ignore when permission is subset of a word`() {
+ check(
+ sourceFiles =
+ arrayOf(
+ java(
+ """
+ package android;
+
+ public abstract class Manifest {
+ public static final class permission {
+ public static final String PERMISSION = "android.permission.PERMISSION";
+ }
+ }
+ """
+ ),
+ requiresPermissionSource,
+ java(
+ """
+ package android.pkg;
+
+ import android.Manifest;
+ import android.annotation.RequiresPermission;
+
+ public class PermissionTest {
+ /**
+ * While this contains the name of the permission it is not actually
+ * referring to the permission ARG_PERMISSION.
+ */
+ @RequiresPermission(Manifest.permission.PERMISSION)
+ public void test0() {
+ }
+
+ /**
+ * While this contains the name of the permission it is not actually
+ * referring to the permission PERMISSION_ARG.
+ */
+ @RequiresPermission(Manifest.permission.PERMISSION)
+ public void test0() {
+ }
+ }
+ """
+ ),
+ ),
+ extraArguments =
+ arrayOf(ARG_WARNING, Issues.CONDITIONAL_REQUIRES_PERMISSION_NOT_EXPLAINED.name),
+ )
+ }
+
+ @Test
fun `Document Intent Actions`() {
check(
expectedFail = DefaultLintErrorMessage,