0

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

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

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 它应该返回bc,请求 M2 它应该返回abc并且请求 M3 它应该返回bc

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

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

4

1 回答 1

1

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

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

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

最重要的是,您必须担心被注释掉的代码,但如果这是一个早期阶段的项目,最好不要担心 :)

于 2013-09-19T16:00:01.450 回答