2015-09-28 54 views
1

我尝试在Eclipse IDE(JDT)中执行以下重构步骤,但无法找到所需的重构并且无法记住所有步骤的名称。我检查了SourceMacking的重构,没有找到正确的重构。在Eclipse中重构方法

让我们如以下情形:?

class A { 

    method(B b) { 
     doSomethingWithA(); 
     b.doSomethingWithB(); 
    } 

    [...] 
} 

class B { 
    [...] 
} 


1)制作方法静态(缺少重构的名称):

class A { 

    static method(A a, B b) { 
     a.doSomethingWithA(); 
     b.doSomethingWithB(); 
    } 

    [...] 
} 

class B { 
    [...] 
} 


2)移动方法:

class A { 
    [...] 
} 

class B { 

    static method(A a, B b) { 
     a.doSomethingWithA(); 
     b.doSomethingWithB(); 
    } 

    [...] 
} 


3)转换为实例方法

class A { 
    [...] 
} 

class B { 

    method(A a) { 
     a.doSomethingWithA(); 
     doSomethingWithB(); 
    } 

    [...] 
} 


因此,任何人知道的东西做到这一步一步的在Eclipse或知道重构的名字是受欢迎的。目标是为每一步都提供IDE支持。

回答

1

不幸的是,Eclipse的重构功能并不像其他IDE那样完整(例如Jetbrains的IntelliJ)。我将介绍如何执行IntelliJ和Eclipse所请求的每个重构。

用的IntelliJ

  1. Make Method Static
  2. Move Instance Method
  3. Convert to Instance Method

使用Eclipse

  1. Make方法Static:Eclipse不直接支持它,但我们可以使用其他两个重构实现此目的。

    1.1。 Introduce Indirection

    Eclipse's Introduce Indirection refactoring

    结果

    public static void method(A a, B b) { 
        a.method(b); 
    } 
    
    public void method(B b){ 
        doSomethingWithA(); 
        b.doSomethingWithB(); 
    } 
    

    1.2。Inline

    Eclipse's Inline refactoring

    结果

    public static void method(A a, B b) { 
        a.doSomethingWithA(); 
        b.doSomethingWithB(); 
    } 
    
  2. Move Static Members

  3. 转换为实例方法:现在,这是它得到棘手。如果你想从步骤1到步骤3,你可以使用Eclipse的Move Method,它会处理一切都很好。但是,我不知道使用Eclipse的自动重构从步骤2到步骤3的方法。
0

既然已经了解了重构被称为“转换为实例方法”之后我搜索的Eclipse JDT的bug数据库,我发现一个坏消息:

Bug 10605 Bug 118032 Bug 338449

所以基本上它是Won't-Fix noone关心功能请求,因此我可能会切换到IntelliJ。我必须考虑这个......。

简单的解决方法是创建静态方法,调用从方法,你想成为静态这种静态方法和内联方法调用:

Emond Papegaaij中的Bug 118032一个变通的讨论建议。这在4.3.1中适用于我。

这很有趣,但它不会自动重构,并且首先会挫败重构的目的。添加某人自己的代码引入了失败的可能性,并且需要重新运行测试套件,从而无法安全地重构遗留代码。