Mavjud Eclipse plagin kengaytmasini bekor qilish

Men kengaytma nuqtasini ta'minlovchi mavjud Eclipse plaginini bor. Plagin kengaytmalarni topish uchun standart Eclipse mexanizmidan foydalanadi. Ushbu plaginning kodida quyidagi kod kengaytmani olish uchun ishlatiladi.

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

Kodda ko'rib turganingizdek, faqat birinchi topilgan kengaytma ishlatiladi. Ushbu plagin allaqachon kengaytmani ta'minlaydi va bu kengaytma asl holatda ishlatiladi.

Endi standart kengaytmaning xatti-harakatlarini bekor qilishim kerak, shuning uchun men yangi plagin yaratdim va bir xil kengaytma nuqtasini uzaytirdim. Ammo, bu ko'rsatuv kengaytma har doim IConfigurationElement qatorida birinchi bo'lib turadi, shuning uchun u doimo olinadi.

IConfigurationElement qatorida o'z plaginini qanday qilib birinchi bo'lib paydo qilishim mumkin, keyin o'zimning plaginim asl qiymati o'rniga ishlatiladi?

Mavjud plagin boshqalar tomonidan yoziladi va men buni mutlaqo zarur bo'lmagunga qadar o'zgartirishni xohlamayman.

2

1 javoblar

Men kengaytmani cho'zish nuqtasidan olish uchun bu yomon yo'ldir. Ular faqat o'zlari yaratgan muayyan kengaytma uchun plagin tizimidan foydalanishni istashsa, ular buning o'rniga getConfigurationElementsFor (String nom maydoni, String extensionPointName, String extensionId) usulini ishlatishlari va boshqalarning ishlatishi mumkin bo'lgan imkoniyatni yopishlari mumkin kengaytma nuqtasi. Hozircha qanday kengaytmani olishlarini bilishning aniq yo'li yo'q. Ehtimol, keyinroq kodda misollari bor, ular kengaytirilishini oladi va ular kutgan kengaytmasi bo'lmaganda, Mr ClassCastException eshikni taqillatib keladi. (Bir marta bu kabi tizimda xatolik yuz berdi)

Albatta, eng yaxshi usul kodni ko'pgina kengaytmalarni boshqarish uchun o'zgartirishdir!

Lekin sizning savolingizga; ExtensionRegistry ning qatorni qanday to'ldirganini bilmayman, API aytmaydi. Ehtimol, kengaytmaning muayyan versiyasini joylashtirishga imkon beradigan yo'l bor, bu uning birinchi qatorga joylashishiga imkon beradi. Kengaytmalar qanday aniqlanganligini bilish uchun ExtensionRegistry kodiga murojaat qilishingiz kerak. Menimcha, bu alifbo tartibida bo'lishi mumkin, lekin ishonchim komil emas.

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
qo'shib qo'ydi
ExtensionRegistry kengaytmalarni noaniq usulda qaytaradi. ya'ni plaginlarni boshqa bir kompyuterga boshqa tartibda o'rnatish birinchi marta bekor qilishni qaytarishi mumkin ... lekin kafolat yo'q. Istagan kengaytmani tanlash/tanlash uchun birinchi navbatda iste'molchi ishi.
qo'shib qo'ydi muallif Paul Webster, manba