使用JavaParser重构java文件

使用JavaParser重构java文件,java,refactoring,static-analysis,javaparser,Java,Refactoring,Static Analysis,Javaparser,您是否可以使用javaparser库:重命名导入的类、方法和字段? 例如: t.someOverloadedMethod(1, 2, false, null) -> t.name1(1, 2, false, null) t.someOverloadedMethod() -> t.name2() package org.example; 导入org.example.Test; 公开课范例{ 公共无效示例(){ 测试t=新测试(); t、 somethod(); t、 随机化场; }

您是否可以使用javaparser库:重命名导入的类、方法和字段? 例如:

t.someOverloadedMethod(1, 2, false, null) -> t.name1(1, 2, false, null)
t.someOverloadedMethod() -> t.name2()
package org.example;
导入org.example.Test;
公开课范例{
公共无效示例(){
测试t=新测试();
t、 somethod();
t、 随机化场;
}
}

package org.example;
导入org.example.Test123;
公开课范例{
公共无效示例(){
Test123t=新的test123);
t、 someOtherMethod();
t、 新名称;
}
}
编辑以添加:
还考虑了方法重载,例如:

t.someOverloadedMethod(1, 2, false, null) -> t.name1(1, 2, false, null)
t.someOverloadedMethod() -> t.name2()

如果JavaParser不构建定义变量作用域的符号表,您就无法可靠地完成这项工作。问题是,您可能试图重命名出现在多个作用域中的变量X。您的方法重载示例就是这种情况的特例。

我只想重新映射导入的内容,而不是本地varsOK,因此您想重命名导入中提到的名为X的实体。你在代码中看到的只是…X。。。您如何知道导入中提到的特定X?没有作用域和符号表就无法完成这项工作。如果您不介意修复由于不考虑作用域而造成的损坏,您可以通过将所有X更改为您希望将其重命名为的任何名称来敲打代码。如果名称X是相对唯一的(“setAseEncyOptionKey”),这可能会很好地工作。如果名称X相当通用(例如,一个自定义的“get”例程添加到一个特殊的导入类中),那么在一个大的Java代码中,这很可能会失败。回到我的要点:没有符号表和作用域,您无法可靠地完成这项工作。我不认为JavaParser提供了这些。我可能错了。不好意思,有没有一个库允许你以这种方式操作java?我认为你可以弯曲java编译器的内部API,代价是在编译器内部学习,然后实现你想要的。可能会很尴尬,因为JavaC不想成为重命名工具。我的公司(Semantic Design)有一个Java前端,其中包括名称解析,这将非常容易实现。但最简单的方法可能是基于Eclipse的Java重构工具,该工具将进行重命名,这可能正是您想要的。(我最初没有提供这一点,因为我认为您希望专门使用JavaParser)