Skip to content
Snippets Groups Projects
Commit 874eeceb authored by Tor Norbye's avatar Tor Norbye Committed by android-build-merger
Browse files

Merge "72967236: @RequiresPermission support for carrier-privileged APIs"

am: 2545ce87

Change-Id: I4f509e3da88aec4dbb4b78b02cb60082a8bf5481
parents aa5213c1 2545ce87
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,7 @@ const val ANDROID_NONNULL = "android.annotation.NonNull" ...@@ -37,6 +37,7 @@ const val ANDROID_NONNULL = "android.annotation.NonNull"
const val ANDROIDX_VISIBLE_FOR_TESTING = "androidx.annotation.VisibleForTesting" const val ANDROIDX_VISIBLE_FOR_TESTING = "androidx.annotation.VisibleForTesting"
const val ANDROID_SUPPORT_VISIBLE_FOR_TESTING = "android.support.annotation.VisibleForTesting" const val ANDROID_SUPPORT_VISIBLE_FOR_TESTING = "android.support.annotation.VisibleForTesting"
const val ATTR_OTHERWISE = "otherwise" const val ATTR_OTHERWISE = "otherwise"
const val CARRIER_PRIVILEGES_MARKER = "carrier privileges"
const val ENV_VAR_METALAVA_TESTS_RUNNING = "METALAVA_TESTS_RUNNING" const val ENV_VAR_METALAVA_TESTS_RUNNING = "METALAVA_TESTS_RUNNING"
const val ENV_VAR_METALAVA_DUMP_ARGV = "METALAVA_DUMP_ARGV" const val ENV_VAR_METALAVA_DUMP_ARGV = "METALAVA_DUMP_ARGV"
......
...@@ -5,6 +5,7 @@ import com.android.sdklib.SdkVersionInfo ...@@ -5,6 +5,7 @@ import com.android.sdklib.SdkVersionInfo
import com.android.sdklib.repository.AndroidSdkHandler import com.android.sdklib.repository.AndroidSdkHandler
import com.android.tools.lint.LintCliClient import com.android.tools.lint.LintCliClient
import com.android.tools.lint.checks.ApiLookup import com.android.tools.lint.checks.ApiLookup
import com.android.tools.lint.detector.api.editDistance
import com.android.tools.lint.helpers.DefaultJavaEvaluator import com.android.tools.lint.helpers.DefaultJavaEvaluator
import com.android.tools.metalava.doclava1.Errors import com.android.tools.metalava.doclava1.Errors
import com.android.tools.metalava.model.AnnotationAttributeValue import com.android.tools.metalava.model.AnnotationAttributeValue
...@@ -311,13 +312,26 @@ class DocAnalyzer( ...@@ -311,13 +312,26 @@ class DocAnalyzer(
resolved resolved
else { else {
val v: Any = value.value() ?: value.toSource() val v: Any = value.value() ?: value.toSource()
if (v == CARRIER_PRIVILEGES_MARKER) {
// TODO: Warn if using allOf with carrier
sb.append("{@link android.telephony.TelephonyManager#hasCarrierPrivileges carrier privileges}")
continue
}
findPermissionField(codebase, v) findPermissionField(codebase, v)
} }
if (field == null) { if (field == null) {
reporter.report( val v = value.value()?.toString() ?: value.toSource()
Errors.MISSING_PERMISSION, item, if (editDistance(CARRIER_PRIVILEGES_MARKER, v, 3) < 3) {
"Cannot find permission field for $value required by $item (may be hidden or removed)" reporter.report(
) Errors.MISSING_PERMISSION, item,
"Unrecognized permission `$v`; did you mean `$CARRIER_PRIVILEGES_MARKER`?"
)
} else {
reporter.report(
Errors.MISSING_PERMISSION, item,
"Cannot find permission field for $value required by $item (may be hidden or removed)"
)
}
sb.append(value.toSource()) sb.append(value.toSource())
} else { } else {
if (filterReference.test(field)) { if (filterReference.test(field)) {
......
...@@ -152,6 +152,7 @@ class DocAnalyzerTest : DriverTest() { ...@@ -152,6 +152,7 @@ class DocAnalyzerTest : DriverTest() {
@Test @Test
fun `Document Permissions`() { fun `Document Permissions`() {
check( check(
docStubs = true,
sourceFiles = *arrayOf( sourceFiles = *arrayOf(
java( java(
""" """
...@@ -180,6 +181,15 @@ class DocAnalyzerTest : DriverTest() { ...@@ -180,6 +181,15 @@ class DocAnalyzerTest : DriverTest() {
@RequiresPermission(value=Manifest.permission.WATCH_APPOPS, conditional=true) // b/73559440 @RequiresPermission(value=Manifest.permission.WATCH_APPOPS, conditional=true) // b/73559440
public void test5() { public void test5() {
} }
@RequiresPermission(anyOf = {Manifest.permission.ACCESS_COARSE_LOCATION, "carrier privileges"})
public void test6() {
}
// Typo in marker
@RequiresPermission(anyOf = {Manifest.permission.ACCESS_COARSE_LOCATION, "carier priviliges"})
public void test6() {
}
} }
""" """
), ),
...@@ -201,6 +211,7 @@ class DocAnalyzerTest : DriverTest() { ...@@ -201,6 +211,7 @@ class DocAnalyzerTest : DriverTest() {
), ),
checkCompilation = false, // needs androidx.annotations in classpath checkCompilation = false, // needs androidx.annotations in classpath
checkDoclava1 = false, checkDoclava1 = false,
warnings = "src/test/pkg/PermissionTest.java:31: lint: Unrecognized permission `carier priviliges`; did you mean `carrier privileges`? [MissingPermission]",
stubs = arrayOf( stubs = arrayOf(
""" """
package test.pkg; package test.pkg;
...@@ -230,6 +241,16 @@ class DocAnalyzerTest : DriverTest() { ...@@ -230,6 +241,16 @@ class DocAnalyzerTest : DriverTest() {
public void test4() { throw new RuntimeException("Stub!"); } public void test4() { throw new RuntimeException("Stub!"); }
@androidx.annotation.RequiresPermission(value=android.Manifest.permission.WATCH_APPOPS, conditional=true) @androidx.annotation.RequiresPermission(value=android.Manifest.permission.WATCH_APPOPS, conditional=true)
public void test5() { throw new RuntimeException("Stub!"); } public void test5() { throw new RuntimeException("Stub!"); }
/**
* Requires {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} or {@link android.telephony.TelephonyManager#hasCarrierPrivileges carrier privileges}
*/
@androidx.annotation.RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, "carrier privileges"})
public void test6() { throw new RuntimeException("Stub!"); }
/**
* Requires {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} or "carier priviliges"
*/
@androidx.annotation.RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, "carier priviliges"})
public void test6() { throw new RuntimeException("Stub!"); }
} }
""" """
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment