2012-06-01 4 views
6

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

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

С ответом ниже я искал проектов, которые используют 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() никогда не достигается.

ответ

5

Ответ здесь 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; 
    } 
} 
1

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

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

+0

Я уже читал эту статью, и хотя есть «попробовать это» примеры в нем , Мне не удалось заставить это работать на моей стадии опыта. К сожалению, к сожалению, отсутствует рабочий пример. – DarsVaeda

+0

Возможно, вы захотите, чтобы Google затем выполнил команду IResourceChangeListener, которая покажет вам плагины, которые его используют. Я смог заставить его работать в моем приложении RCP, я уверен, что вы найдете что-то сопоставимое в мире с открытым исходным кодом. –

+0

Где вы находите это в Google? Я не. – DarsVaeda

Смежные вопросы