Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4daa2f13 authored by Kevin Liu's avatar Kevin Liu Committed by Android (Google) Code Review
Browse files

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

parents 1b269523 406dc08c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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;
+23 −0
Original line number Diff line number Diff line
@@ -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();
    }
}