Захват для сохранения действий в плагине Eclipse

119
17

Я хочу создать плагин Google Closure Compiler для Eclipse. У меня уже есть запись всплывающего меню для компиляции файла JavaScript в его сокращенную версию. Но было бы более полезно, если каждый раз, когда вы сохраните *.js, эта мини-версия будет сгенерирована автоматически. Я читал/слышал о природе и строителях, точках расширения и IResourceChangeListener. Но мне не удалось выяснить, что я должен использовать, и особенно, как заставить его работать.


Есть ли рабочий пример плагина, который выполняет "ту же вещь", поэтому я могу работать с этим или учебником для написания такого?


С ответом ниже я искал проекты, которые используют IResourceChangeListener, и придумал этот код:


Манифест: http://codepaste.net/3yahwe


plugin.xml: http://codepaste.net/qek3rw


Активатор: http://codepaste.net/s7xowm


DummyStartup: http://codepaste.net/rkub82


MinifiedJavascriptUpdater: http://codepaste.net/koweuh


В MinifiedJavascriptUpdater.java, который содержит код для IResourceChangeListener, функция resourceChanged() никогда не будет достигнута.

спросил(а) 2021-01-19T19:15:28+03:00 6 месяцев, 1 неделя назад
1
Решение
111

Ответ отсюда http://www.eclipse.org/forums/index.php/t/362425/


Решение состоит в том, чтобы получить код в активаторе и избавиться от MinifiedJavascriptUpdater:

package closure_compiler_save;

import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {

// The plug-in ID
public static final String PLUGIN_ID = "closure-compiler-save"; //$NON-NLS-1$

// The shared instance
private static Activator plugin;

/**
* The constructor
*/
public Activator() {
} //gets here

@Override
public void start(BundleContext context) throws Exception {
super.start(context);
Activator.plugin = this;

ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
public void resourceChanged(IResourceChangeEvent event) {
System.out.println("Something changed!");
}
});
}

@Override
public void stop(BundleContext context) throws Exception {
Activator.plugin = null;
super.stop(context);
}

/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

ответил(а) 2021-01-19T19:15:28+03:00 6 месяцев, 1 неделя назад
63

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

Все языковые плагины (JDT, CDT и т.д.) делают такие вещи, когда компилируют код.

ответил(а) 2021-01-19T19:15:28+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема