我想要的是应用一个就像{ {ObjA}.func1() -> {ObjA}.func2() | for all {ObjA} is {SpecClass}}
一样的变换。也就是说,将SpecClass
类型的所有对象的对A::func1()
的函数调用变换为A::func2()
。
显然,它需要语义信息来完成这一任务。是否有任何现有的工具可以完成这样的任务(或者可能更强大)?或者我需要使用Clang-LibTooling或其他工具来开发一个工具?
改造前:
struct A{
void f();
void g();
};
struct B{
void f();
void g();
};
void foo()
{
A a;
B b;
a.f();
b.f();
}
改造后:
struct A{
void f();
void g();
};
struct B{
void f();
void g();
};
void foo()
{
A a;
B b;
a.g();
b.f();
}
1条答案
按热度按时间pepwfjgg1#
假设我正确地解释了这个问题(即,将其应用于源代码),这在IDE中是很常见的。
例如,Visual Studio可以将成员函数
func1
重命名为func2
,然后将所有调用ObjA.func1()
更改为ObjA.func2()
。如果
func2
已存在,则:1.将
func2
更改为func2dummy
-不使用重构1.将
func1
重命名为func2
-使用重构1.将
func2
改回func1
,将func2dummy
改回func2
-不使用重构其他重构工具,包括基于llvm的重构工具,也可以做同样的事情。