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

  • ⌥⌘m
    bar.getFoo().getX()
    ->
    getFooX(bar)
    (提取到方法,同时查找和替换引用)
  • F6
    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查看我的编辑和签出