Tipy pro vývoj pluginů pro Eclipse english

V poslední době spolupracuji na vývoji nového produktu firmy JetMinds (který bude brzy uveden). Projekt zahrnuje sadu Eclipse pluginů s custom editory se zvýrazňováním syntaxe, outline pohledy, inteligentní asistenty a další nástroje podobné těm již dostupným ve standardním Eclipse Java editoru.

Během vývoje jsem narazil na mnoho problémů se složitostí Eclipse, nedostatku přehledné dokumentace, příkladů apod. Proto jsem začal psát tuto sérií článků, která se ale nebude snažit býti kompletní příručkou, spíše jen takovým vypíchnutím zajímavých konceptů a nápadů.

V tomto díle naleznete:

  • Pozor na UI (SWT) vlákno
  • Jak získat referenci na aktivní editor
  • Poznámky k IFile
  • Jak otevřít soubor v jeho editoru

Eclipse FAQ

Ze všeho nejdříve doporučuji navštívit Eclipse FAQ, což je pravděpodobně nejucelenější zdroj informací o vývoji pro Eclipse.

UI vlákno

- viz též FAQ

Mnoho metod, které manipulují s UI komponentami je nutno volat v rámci vlákna UI (UI-thread). První možností jak toho docílit (nízkoúrovňová) je využít SWT metodu Display.syncExec() nebo asyncExec():

editor.getSite().getShell().getDisplay().syncExec(
    //...Runnable with your code here...
);

Druhá možnost (vyšší úrovně) je využít UIJob:

new UIJob("your job's title") {
    @Override
    public IStatus runInUIThread(IProgressMonitor monitor) {
        //...your code here...
        return Status.OK_STATUS;
    }
}.schedule();

Získání aktivního editoru

- viz též FAQ

K získání aktivního editoru lze použít něco jako (kontroly na nenullovost jsou nutné):

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
    IWorkbenchPage page = window.getActivePage();
    if (page != null) {
        editor = page.getActiveEditor();
    }
}

Získání IFile z EditorInput

Občas je užitečné získat referenci na soubor otevřený v editoru. Velmi snadno toho lze dosáhnout pomocí adaptér patternu (rozhodně čistší přístup než přetypovávat EditorInput na FileEditorInput atd.).

IFile file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
if (file != null) {
    //...we can use file here...
}

Získání absolutní cesty z IFile

iFile.getLocation().toString()

Získání File z IFile

iFile.getLocation().toFile()

Otevření souboru v editoru

- viz též FAQ, FAQ2, FAQ3

Otevření souboru v příslušném editoru je možné takto:

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
       
if (window != null) {
    IWorkbenchPage page = window.getActivePage();
    if (page != null) {
        try {
            return IDE.openEditor(page, file, activate);
        } catch (PartInitException e) {
            //...something bad went here...
        }
    }
}

V dalších článcích se budu snažit zaměřit na složitější problémy.

Tags: , , , ,

One Response to “Tipy pro vývoj pluginů pro Eclipse”

  1. Tips on developing Eclipse plugins - III. - Project Decorators - dolejsky.com Says:

    […] Sometimes it is needed to force the refresh of the decorations (e.g. when they depend on some internal state which has changed). It can be achieved by firing fireLabelProviderChanged() event of the decorator (if it is enabled). This has to be done in UI thread (as described here). […]

Leave a Reply