2012-02-15 4 views
3

Может ли затмение сделать это рефакторинг?Поддержка Eclipse для реорганизации затонувших поездов

Скажем, у меня есть класс, который имеет список:

class DomainObject { 
    private List list; 
    public List getList() { return list; } 
} 

Тогда некоторый код, который использует класс нужно сделать это:

domainObject.getList().get(23); 

Я хотел бы реорганизовать к этому (и есть все другие ссылки сделать то же самое):

domainObject.get(23); 

Я попробовал несколько вариантов, но не могу найти способ сделать это (другой ТНА п вручную)

+0

Почему Eclipse знает, что это то, что вы хотите сделать? –

+0

Ну, скажем, я выбрал getList() и сказал 'inline this call' – blank

ответ

7

Попробуйте это:

  1. Пусть DomainObject правильно реализовать List (используя list в качестве делегата)
  2. Пусть getList() возвращение this
  3. Refactor Инлайн-getList()
  4. При необходимости удалить "implements List" снова поддержание метода get()

Другой (проще) вариант:

  1. Refactor-Переименовать getList() в getMyListWithAUniqueNameAcrossTheProject() (пусть Eclipse, обновление всех ссылок)
  2. Поиск замены "getMyListWithAUniqueNameAcrossTheProject()." по ""
  3. Добавить и реализовать DomainObject.get(int)
0

Я думаю, что вы хотите Рефакторинг -> Внесите косвенные n .... Я не совсем уверен, как использовать его, хотя, я думаю, вы должны позвонить, что на List.get, указав вы хотите создать метод в DomainObject ...

Я попытался здесь, но затмение занимает много времени для вычисления его (ищу все ссылки на этот метод, я думаю)

Редактировать: Я нашел an article on the subject, что заставляет меня думать, что это может быть не совсем то, что вы хотите. Однако, если Eclipse достаточно умен, он не объявит метод как статический, я думаю. Он все еще не закончил здесь, но я нашел Bug 187227 Introduce Indirection is extremely slow, что связано с тем, что имя метода, на которое оно применяется, очень распространено, поэтому я думаю, что оно не используется в случае List.get ...