Java IntelliJ中的简单自定义重构
这个问题是一个后续问题 比如说我有一些课上的食物Java IntelliJ中的简单自定义重构,java,intellij-idea,refactoring,automated-refactoring,law-of-demeter,Java,Intellij Idea,Refactoring,Automated Refactoring,Law Of Demeter,这个问题是一个后续问题 比如说我有一些课上的食物 class Foo { protected String x = "x"; public String getX() { return x; } } 我有一个使用Foo并违反LoD()的程序 我可以分两步重构此代码以使用LoD ⌥⌘mbar.getFoo().getX()->getFooX(bar)(提取到方法,同时查找和替换引用) F6getFooX(bar)->bar.getFo
class Foo {
protected String x = "x";
public String getX() {
return x;
}
}
我有一个使用Foo并违反LoD()的程序
我可以分两步重构此代码以使用LoD
bar.getFoo().getX()
->getFooX(bar)
(提取到方法,同时查找和替换引用)getFooX(bar)
->bar.getFooX()
(移动到实例方法,同时查找和替换发生)Bar
的程序不再违反LoD
class Bar {
protected Foo foo;
public Bar() {
this.foo = new Foo();
}
public Foo getFoo() {
return foo;
}
public String getFooX() {
return foo.getX();
}
}
public static void main(String [] args) {
Bar bar = new Bar();
String x = bar.getFooX();
}
我想知道是否有一种方法可以在IntelliJ中创建一个自定义重构方法,将这两个步骤合并为一个步骤
编辑
我收到了JetBrains的回复,其中有一个指向预先存在的功能请求的链接。如果你觉得这有用,请投票表决
你好,迈克尔
似乎我们在YouTrack中也有类似的要求:
. 请随意投票
并留下评论
向你问好,亚罗斯拉夫·贝德罗夫·杰特布拉恩斯
编辑
至少有一种方法可以检查德米特法的问题。
它包含一个只查找LoD冲突的检查配置文件。您可以。将
getFooX()
方法添加到Bar
后,我将使用编辑查找用以下表达式在结构上替换:
搜索模板:
$instance$.getFoo().getX()
$instance$.getFooX()
替换模板:
$instance$.getFoo().getX()
$instance$.getFooX()
这项工作做得很好。也许您可以向
$instance$
变量添加一些约束以缩小搜索范围,但这只有在您有多个具有该方法名称的类时才有用。我想知道是否可以在当前IDEA版本(v14)中一步完成,我没有找到任何合适的单个命令。如果这个函数真的缺失,提交一个功能请求可能是个好主意。@erkfel I目前正在审核中。链接看起来还没有激活,但应该在这里:@erkfel查看我的编辑和签出