У меня есть библиотека, которая была изменена, чтобы ввести фабричный метод для замены конструктора (причины сейчас не важны, в данном случае это было в основном для улучшенного вывода типов).
Предполагая, что является сценарием рефакторинга Eclipse для него (так что у меня есть хорошее читаемое описание изменения), есть ли способ применить этот сценарий к проектучто только использует этой библиотеки (т.е. она имеет ссылку только на скомпилированную версию библиотеки)?
Например, я начинаю с этого простого класса:
public class MyContainer<T> {
private final T content;
public MyContainer(final T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
Теперь я представляю фабрику (не делая конструктор приватным, но это сейчас не очень актуально), метод фабрики выглядит так:
public static <T> MyContainer<T> holding(T content) {
return new MyContainer<T>(content);
}
Когда я сейчас экспортирую скрипт миграции, он выглядитнапример:
<?xml version="1.0" encoding="UTF-8"?>
<session version="1.0">
<refactoring comment="Introduce factory 'holding' in 'scratch.MyContainer' for constructor 'scratch.MyContainer.MyContainer()'
- Original project: 'scratch'
- Original element: 'scratch.MyContainer.MyContainer()'
- Factory name: 'holding'
- Owner class: 'scratch.MyContainer'"
description="Introduce factory for 'MyContainer'"
element1="/src<scratch{MyContainer.java[MyContainer"
flags="589830" id="org.eclipse.jdt.ui.introduce.factory"
input="/src<scratch{MyContainer.java"
name="holding" project="scratch" protect="false"
selection="89 0" version="1.0"/>
</session>
Этот должен содержать достаточно информации, чтобы применить рефакторинг к другому проекту, который ссылается (текущая версия *) на clзадница через файл jar.
Но попытка применить рефакторинг выдает мне эту ошибку:
Перефразирующая «Представляем фабрику») не может быть выполнена, так как его вход «scratch.MyContainer.java» не существует.
Обратите внимание, что в явно упоминается .java
, поэтому он ищет исходный файли не довольствуется применением рефакторинга к двоичному типу.
Примечание: I не хочет исправить двоичную библиотеку.Я просто хочу, чтобы вызывающие исходного конструктора были преобразованы в вызов метода фабрики.
Примечание 2: Поиск и поискзамена не поможет в моем конкретном случае.Причина в том, что у меня есть двух конструкторов, один из которых принимает Object
, а другой - String
.Они должны быть сопоставлены двум различным фабричным методам, поэтому мне понадобится функция поиска и замены для просмотра информации о типе аргумента.
Примечание3: даже способ вручную указать «заменить экземпляры объекта X
на этот конструктор вызовами этого метода вместо» будет приветствоваться.
Обновление: Существуетзапись bugzilla в bugzilla Eclipse, о добавляющая рефакторинг вызова замены .Реализация этой функции может решить мою проблему, если «вызов» включает создание объекта с помощью данного конструктора.К сожалению, в последние несколько лет активность не наблюдалась (хотя она планировалась на 3.2).