Есть ли способ применить сценарий рефакторинга только из-за его побочных эффектов?

У меня есть библиотека, которая была изменена, чтобы ввести фабричный метод для замены конструктора (причины сейчас не важны, в данном случае в основном это было для улучшенного вывода типов).

Предполагая, что существует сценарий рефакторинга Eclipse для него (так что у меня есть хорошее машиночитаемое описание изменения), есть ли способ применить этот сценарий в проект, который только использует эту библиотеку (т. е. имеет ссылку только на скомпилированную версию библиотеки)?

Например, я начинаю с этого простого класса:

public class MyContainer {
    private final T content;

    public MyContainer(final T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

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

public static  MyContainer holding(T content) {
    return new MyContainer(content);
}

Теперь, когда я экспортирую сценарий миграции, он выглядит так:





Это должно содержат достаточно информации, чтобы применить рефакторинг к другому проекту, который ссылается на ( текущую версию) класса через файл jar.

Но попытка применить рефакторинг дает мне эту ошибку:

Реорганизация 'Introduce Factory' (org.eclipse.jdt.ui.introduce.factory) не может быть выполнена, так как его ввод 'scratch.MyContainer.java' не существует.

Обратите внимание, что явно упоминает .java , поэтому он ищет исходный файл и не удовлетворяется применением рефакторинга к двоичному типу.

Примечание: Я не хочу исправлять двоичную библиотеку. Я просто хочу, чтобы вызывающие исходного конструктора вместо этого преобразовывались в вызов фабричного метода.

Примечание 2: Поиск и замена не помогут в моем конкретном случае. Причина в том, что у меня есть два конструктора, один принимает объект , а другой принимает String . Они должны быть сопоставлены с двумя разными фабричными методами, поэтому мне понадобится функция поиска и замены, чтобы также просматривать информацию о типе аргумента.

Примечание 3: будет оценен даже способ вручную указать «заменить экземпляры объекта X этим конструктором вызовами этого метода».

Обновление: В bugzilla Eclipse есть запись bugzilla о добавлении рефакторинга вызова замены . Реализация этой функции могла бы решить мою проблему, если «вызов» включает создание экземпляра объекта через данный конструктор. К сожалению, в последние несколько лет он не проявлял активности (хотя это было запланировано на 3.2).

12
задан Joachim Sauer 6 October 2011 в 09:24
поделиться