diff options
| author | 2023-02-03 19:59:14 +0000 | |
|---|---|---|
| committer | 2023-02-03 19:59:14 +0000 | |
| commit | ede4a8a9d4585d474f70bff710cbaa9ad0274243 (patch) | |
| tree | 478c8b64a4341296a8d4c770c4388920cc309db6 | |
| parent | 30a3877337a12520020fc1cfa079cdaa8c33abce (diff) | |
| parent | a5f2ae0dcb0e382cf2d332d6de5b7bf0c3948f2c (diff) | |
Merge "Fix crash in RequiresPermissionChecker.java"
2 files changed, 25 insertions, 2 deletions
diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java index fa1730728afb..d39d4b466143 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/RequiresPermissionChecker.java @@ -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; diff --git a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java index 388988e5e9bd..38831b193610 100644 --- a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java +++ b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/RequiresPermissionCheckerTest.java @@ -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(); + } } |