Merge "Fix crash in RequiresPermissionChecker.java" into tm-qpr-dev

This commit is contained in:
Kevin Liu
2023-02-10 14:28:31 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 2 deletions

View File

@@ -412,11 +412,11 @@ public final class RequiresPermissionChecker extends BugChecker
private static ParsedRequiresPermission parseRequiresPermissionRecursively(
MethodInvocationTree tree, VisitorState state) {
if (ENFORCE_VIA_CONTEXT.matches(tree, state)) {
if (ENFORCE_VIA_CONTEXT.matches(tree, state) && tree.getArguments().size() > 0) {
final ParsedRequiresPermission res = new ParsedRequiresPermission();
res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(0))));
return res;
} else if (ENFORCE_VIA_CHECKER.matches(tree, state)) {
} else if (ENFORCE_VIA_CHECKER.matches(tree, state) && tree.getArguments().size() > 1) {
final ParsedRequiresPermission res = new ParsedRequiresPermission();
res.allOf.add(String.valueOf(ASTHelpers.constValue(tree.getArguments().get(1))));
return res;

View File

@@ -415,4 +415,27 @@ public class RequiresPermissionCheckerTest {
"}")
.doTest();
}
@Test
public void testInvalidFunctions() {
compilationHelper
.addSourceFile("/android/annotation/RequiresPermission.java")
.addSourceFile("/android/annotation/SuppressLint.java")
.addSourceFile("/android/content/Context.java")
.addSourceLines("Example.java",
"import android.annotation.RequiresPermission;",
"import android.annotation.SuppressLint;",
"import android.content.Context;",
"class Foo extends Context {",
" private static final String RED = \"red\";",
" public void checkPermission() {",
" }",
" @RequiresPermission(RED)",
" // BUG: Diagnostic contains:",
" public void exampleScoped(Context context) {",
" checkPermission();",
" }",
"}")
.doTest();
}
}