Пераазначэнне існуючага пашырэння убудова для Eclipse

У мяне ёсць існуючы убудова для Eclipse, які дае кропку пашырэння. Убудова выкарыстоўвае стандартны механізм Eclipse, каб знайсці пашырэнне. У кодзе гэтага плагіна, выкарыстоўваецца наступны код, каб атрымаць пашырэнне.

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

Як вы можаце бачыць у кодзе, выкарыстоўваецца толькі першы знайшоў пашырэнне. Гэты убудова ужо забяспечвае пашырэнне і гэта пашырэнне выкарыстоўваецца ў выпадку, калі па змаўчанні.

Цяпер мне трэба перавызначыць паводзіны пашырэння па змаўчанні, так што я стварыў новы убудова і пашырае тую ж кропку пашырэння. Але аказваецца, што пашырэнне па змаўчанні заўсёды першы адзін у IConfigurationElement масіў, таму ён заўсёды ўзяў.

Як я магу зрабіць мой уласны убудова з'явіцца першы ў знойдзеным IConfigurationElement масіў, то мой уласны убудова выкарыстоўваецца замест зададзенага па змаўчанні?

Існуючы убудова напісаны іншымі, і я не хачу, каб унесці ў яго змены, пакуль гэта не з'яўляецца абсалютна неабходным.

2

1 адказы

Я б сказаў, што гэта дрэнны спосаб атрымаць пашырэння з пункту пашырэння, так ці інакш. Калі яны проста хочуць Выкарыстоўвайце pluginsystem для загрузкі пэўнага пашырэння яны стварылі, яны маглі б выкарыстоўваць getConfigurationElementsFor (String імёны, String extensionPointName, String extensionId) метаду замест гэтага і закрыць магчымасць для выкарыстання іншых кропка пашырэння. У цяперашні час не існуе дакладны спосаб даведацца, якое пашырэнне яны атрымаюць. Хутчэй за ўсё, ёсць выпадкі, у кодзе пазней, што прадугледжвае, што яны атрымаюць свой працяг і, калі яны не атрымліваюць пашырэнне яны чакаюць, г-н ClassCastException пастукаецца ў дзверы. (Калі б памылка, як гэта ў сістэме адзін раз)

Вядома, лепшы спосаб, каб змяніць код, каб апрацоўваць мноства пашырэньні!

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

Another way is to overload the existing plugin with your plugin and replace functionality. A very dirty approach, but in some cases it is doable. See one of my questions regarding this

1
дададзена
ExtensionRegistry вяртае пашырэння ў не-determistic моды. то ёсць ўстаноўкі убудоў ў іншым парадку на іншым кампутары, можа вярнуць пераазначэння адзін першы ... але няма ніякай гарантыі. Гэта праца Кропкі пашырэння спажыўца для сартавання/прыярытэтаў/выбраць пашырэнне, што яны хочуць.
дададзена аўтар Paul Webster, крыніца