TypeDescriptor returnType = method.getReturnType(); if (returnType == null || !returnType.matchesName(ANDROID_CONTENT_SHARED_PREFERENCES_EDITOR)) { return;
continue; // Wrong signature if (!method.getArgumentType(0).matchesName(STATUS_BAR_NOTIFICATION_FQN)) { continue;
@Override public void visitMethod(@NonNull JavaContext context, @Nullable AstVisitor visitor, @NonNull MethodInvocation node) { // Ignore the issue if we never build for any API less than 17. if (context.getMainProject().getMinSdk() >= 17) { return; } // Ignore if the method doesn't fit our description. ResolvedNode resolved = context.resolve(node); if (!(resolved instanceof ResolvedMethod)) { return; } ResolvedMethod method = (ResolvedMethod) resolved; if (!method.getContainingClass().isSubclassOf(WEB_VIEW, false)) { return; } if (method.getArgumentCount() != 2 || !method.getArgumentType(0).matchesName(TYPE_OBJECT) || !method.getArgumentType(1).matchesName(TYPE_STRING)) { return; } String message = "`WebView.addJavascriptInterface` should not be called with minSdkVersion < 17 for security reasons: " + "JavaScript can use reflection to manipulate application"; context.report(ISSUE, node, context.getLocation(node.astName()), message); } }
private static boolean isXmlConstructor(ResolvedMethod method) { // Accept // android.content.Context // android.content.Context,android.util.AttributeSet // android.content.Context,android.util.AttributeSet,int int argumentCount = method.getArgumentCount(); if (argumentCount == 0 || argumentCount > 3) { return false; } if (!method.getArgumentType(0).matchesName(CLASS_CONTEXT)) { return false; } if (argumentCount == 1) { return true; } if (!method.getArgumentType(1).matchesName(CLASS_ATTRIBUTE_SET)) { return false; } //noinspection SimplifiableIfStatement if (argumentCount == 2) { return true; } return method.getArgumentType(2).matchesName("int"); }