如何计算可以通过不同方法修改的属性

本文关键字:方法 修改 属性 可以通过 何计算 计算 | 更新日期: 2023-09-27 18:31:55

我们有一个包含一组属性和方法的类(当然可以调用其他类方法[不是属性方法])。

我们需要创建一个工具,将类的源代码和一个方法名称作为输入,并且它应该返回方法链上的代码可能修改的类属性列表。例如:

private int a;
private int b;
private int c;
public void M1()
{
    if (a == 2)
    {
        this.M3();
    }
}
public void M2()
{
    a = 3;
    this.M3();
}
public void M3()
{
    if (a == 7)
    {
        b = 1;
    }
    else
    {
        c = 2;
    }
}

在这种情况下,请求 M1 它应该返回 b 和 c,请求 M2 它应该返回 a、b 和 c,请求 M3 它应该返回 bc

我不知道在哪里使用它,因为我以前从未解析过代码......提前谢谢。

编辑:为了清楚起见,我不需要评估不同的路径,如果我检查 M3,我总是会说它会影响 b 和 c,我只关心可能的变化,而不是真实的变化。

如何计算可以通过不同方法修改的属性

我认为您的工具应该以双重方式运行,第一个查询用于确定每个方法中分配给哪些变量以及每个方法中调用了哪些方法。第二个查询将采用方法名称,并跟踪对其他方法的调用,编译从随后跟踪要调用的每个方法分配给哪些变量。

要检测变量的赋值(我建议简化解析中的代码,逐行检查并删除空格)寻找赋值运算符("=",但不是"=="、"*="、"+="等,我认为 -> 和其他人也可以赋值,MSDN 会告诉您全部可能性,如果您知道它们,请尝试正则表达式),然后您需要识别要分配给的变量, 即该运算符左侧的变量名称(在大多数情况下)。为每个方法存储这些变量分配的记录。

要检测代码中的方法调用,您只需在正在检查的方法中查找方法名称,然后递归查看第二个方法以查找其他方法,依此类推......您可以执行与上述相同的操作来检测方法调用,然后使用自己思考的数据结构,以这种方式循环和查找。

最重要的是,您必须担心注释

掉的代码,但如果这是一个早期阶段的项目,最好不要担心:)