diff options
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(); + } } |