Переопределить существующее расширение плагина Eclipse - PullRequest
2 голосов
/ 28 октября 2011

У меня есть существующий плагин Eclipse, который предоставляет точку расширения.Плагин использует стандартный механизм Eclipse для поиска расширений.В коде этого плагина для получения расширения используется следующий код.

IConfigurationElement[] config = Platform.getExtensionRegistry()
            .getConfigurationElementsFor(extensionPoint);
if (config.length > 0) {
    return config[0];
}

Как видно из кода, используется только первое найденное расширение.Этот плагин уже предоставляет расширение, и это расширение используется в случае по умолчанию.

Теперь мне нужно переопределить поведение расширения по умолчанию, поэтому я создал новый плагин и расширяю ту же точку расширения.Но оказывается, что расширение по умолчанию всегда является первым в массиве IConfigurationElement, поэтому оно всегда выбрано.

Как сделать, чтобы мой собственный плагин сначала отображался в найденном массиве IConfigurationElement, затеммой собственный плагин используется вместо используемого по умолчанию?

Существующий плагин написан другими, и я не хочу вносить в него изменения, пока он не станет абсолютно необходимым.

1 Ответ

1 голос
/ 28 октября 2011

Я бы сказал, что это плохой способ получить расширения из точки расширения, в любом случае. Если они просто хотят использовать систему плагинов для загрузки определенного расширения, которое они создали, они могут вместо этого использовать метод getConfigurationElementsFor(String namespace, String extensionPointName, String extensionId) и закрыть для других возможность использовать точку расширения. На данный момент нет точного способа узнать, какое расширение они получат. Скорее всего, позже в коде есть экземпляры, которые предполагают, что они получат свое расширение, а когда они не получат ожидаемого расширения, Mr ClassCastException постучится в дверь. (Однажды была такая ошибка в системе)

Конечно, лучший способ - изменить код для обработки многих расширений!

Но на ваш вопрос; Я не знаю, как ExtensionRegistry заполняет массив, API не говорит. Возможно, есть способ установить конкретную версию вашего расширения, которая позволит ему быть первой в массиве. Вам нужно будет заглянуть в код ExtensionRegistry, чтобы точно знать, как найдены расширения. Я думаю, что это может быть в алфавитном порядке, но я не уверен.

Другой способ - перегрузить существующий плагин своим плагином и заменить функциональность. Очень грязный подход, но в некоторых случаях это выполнимо. См. Один из моих вопросов относительно этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...