gpt4 book ai didi

android-lint - 为 Android-Lint 编写自定义规则

转载 作者:行者123 更新时间:2023-12-01 14:33:09 29 4
gpt4 key购买 nike

Q (tldr;): 我如何使用 android-lint 中的 JavaScanner 检查特定函数调用是否具有特定作为参数的字符串已被 try/catch block 包围。

详细信息:我已经完成了官方网站上的 android-lint 教程,并浏览了现有的 lint-checks 的源代码。但是,我似乎无法掌握这种基于 AST 的 JavaScanner 解析的工作流程。我想要实现的是捕获一个设置特定属性的函数,并用 try/catch block 包围它。例如:

MyPropertySettings.set("SOME_PROPERTY", "SOME_VAL"); 

不应触发 lint 规则但是:

MyPropertySettings.set("SOME_SENSITIVE_PROPERTY", "SOME_VAL"); 

应该是因为它没有被带有 SetPropertyException 的 try/catch block 包围。我不想将 try/catch 引入函数本身,因为它只会在极少数情况下抛出异常(并且函数的内部结构基于一些反射魔咒)。

对于这个问题,即使是工作流程/提示也可以。如果我能掌握前几步,我可能会更好地掌握它。

更新:

经过更多研究,我发现我需要在 getApplicableMethodNames() 中设置上面的 set 函数,然后以某种方式读取该函数的属性来决定如果检查适用。那部分应该很容易。

周围的 try/catch 会更困难,我想我需要做一些“流分析”。现在的问题是怎样。

最佳答案

嗯,除了 getApplicableMethodNames() 方法,您还需要覆盖 visitMethod() 函数。您将获得 MethodInvocationNode。只需使用 node.astArguments() 函数获取调用中传递的参数。这将返回一个参数列表,您可以使用 StrictListAccessor 对其进行迭代。检查传递的参数,如果它符合您的条件,则运行一个循环并继续计算调用节点的父节点,直到找到 try 节点。如果它是一个 try 节点,那么您可以使用 node.astCatches() 获取捕获列表。扫描列表并找到适当的异常。如果没有找到,则报告。

关于android-lint - 为 Android-Lint 编写自定义规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746888/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com