Nyílt fejlesztőrendszerek Az Eclipse Editor framework Nyilas Gergely fóliái.

Slides:



Advertisements
Hasonló előadás
Objektumok a Word-ben Pék Ágnes © 2009.
Advertisements

S 1SCM© Siemens AG All rights reserved Útmutató a click4suppliers easy használatához Szállítói regisztráció.
ADATBÁZISOK.
Grafikus tervezőrendszerek programozása 10. előadás.
Programozás III STRING-XML.
Dr. Török Béla Általános Iskola 1142 Bp. Rákospatak utca 101.
Az MVC tervezési minta 2. előadás.
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
Fajfrik Dóra tanárjelölt munkája alapján
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Objective-C Készítette: Fahmi Arman B5EXTQ
Stílus, mesteroldal, témák
Fájlkezelés, IO Kivételkezelés Belső osztályok
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Windows grafikus felülete
Hernyák Zoltán XML validálás.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 5. rész – Osztályok III.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
WEB Technológiák WEB-DB és XML ME Általános Informatikai Tsz. dr. Kovács László.
Összetett adattípusok
Egyéb erőforrás-kezelési képességek Készítette: Szentirmai Róbert (minden jog fenntartva)
Grafikus tervezőrendszerek programozása 9. előadás.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Vizuális alkalmazások a FoxProban Páll Éva Boglárka.
CSS A CSS bemutatása.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Készítette: Turócziné Kiscsatári Nóra
RAD Studio XE5: menük felépítése
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Számítógépes grafika I. AUTOCAD alapok
Számítógépes grafika I. AUTOCAD alapok 3. előadás.
Bevezetés az informatikába 8. előadás Dokumentumkészítés számítógéppel II.
User Profiles Endrődi Tamás (MCT, MCP, MCITP) GDF Informatikai Intézet vezetője SZÁMALK Oktatóközpont.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
Szövegszerkesztés.
Programozás III SWING. SWING ALKALMAZÁSOK (ISM.) Swing felületű, eseményvezérelt alkalmazás létrehozása: 1.JFrame alapú osztály létrehozása Szerepe: vezérlés.
A Mozilla magyar nyelvű szerkesztőjének használata
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Alapok Gyakorlat 2015/16 őszi szemeszter Automatizálási tanszék.
Erőforrások strukturálása Készítette: Szentirmai Róbert (minden jog fenntartva)
Útmutató a click4suppliers easy használatához
Szövegszerkesztési alapfogalmak
Neumann János Informatikai Kar
Ubuntu – ismerkedés Fájlok és könyvtárak
Adatkötés Sablonokkal
Hernyák Zoltán Programozási Nyelvek II.
Táblázatkezelés Az Excel.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

Nyílt fejlesztőrendszerek Az Eclipse Editor framework Nyilas Gergely fóliái

Az editor célja, fogalma „Ablak, amibe szöveget írunk” „Ablak, amibe szöveget írunk” Az információ reprezentálása sokféle lehet Az információ reprezentálása sokféle lehet Dokumentumok, fájlok létrehozása és szerkesztése Dokumentumok, fájlok létrehozása és szerkesztése Különböző adatstruktúrák szabályszerű manipulálása Különböző adatstruktúrák szabályszerű manipulálása Átláthatóság növelése, kényelmi szolgáltatások Átláthatóság növelése, kényelmi szolgáltatások

Közös editor minták Eclipse- ben Az editor megnyitása ugyanúgy történik Az editor megnyitása ugyanúgy történik Meghatározott helyük van a Workspace- en Meghatározott helyük van a Workspace- en Saját névvel rendelkeznek Saját névvel rendelkeznek Közös főmenü és toolbar Közös főmenü és toolbar Maximalizálhatóak és minimalizálhatóak Maximalizálhatóak és minimalizálhatóak Explicit save, azaz a felhasználónak kell a műveletet kérnie Explicit save, azaz a felhasználónak kell a műveletet kérnie

Egyszerű szövegszerkesztő EMACS,Notepad,vi... EMACS,Notepad,vi... Azonos alapfunkcionalitások: Azonos alapfunkcionalitások: Save/Load Save/Load Copy/Paste Copy/Paste Undo/Redo Undo/Redo Esetleg betűszínek, stílusok Esetleg betűszínek, stílusok Eclipse-ben ezeket a JFace Text valósítja meg, ami az alapértelmezett szövegszerkesztő Eclipse-ben ezeket a JFace Text valósítja meg, ami az alapértelmezett szövegszerkesztő

Editor framework alapok Az Eclipse Workbench 3 fő entitása: Az Eclipse Workbench 3 fő entitása: Editors Editors Views Views Perspectives Perspectives

Editor framework alapok 2.

Editor framework alapok 3. Minden editornak implementálnia kell az org.eclipse.ui.IEditorPart interface-t Minden editornak implementálnia kell az org.eclipse.ui.IEditorPart interface-t A WorkbenchPart-on keresztül részben közös viselkedésminták a View entitásokkal A WorkbenchPart-on keresztül részben közös viselkedésminták a View entitásokkal Sok lényeges különbség! Sok lényeges különbség! Open-Modify-Save paradigma Open-Modify-Save paradigma Editor area Editor area Az editorok tipikusan egy erőforráson dolgoznak Az editorok tipikusan egy erőforráson dolgoznak org.eclipse.ui.IEditorReference – lusta inicializálás org.eclipse.ui.IEditorReference – lusta inicializálás

Editorok típusai Szöveges editorok Szöveges editorok Egyszerű szövegszerkesztő (plain text editor) Egyszerű szövegszerkesztő (plain text editor) Forráskód szerkesztő (source editor) Forráskód szerkesztő (source editor) Grafikus editorok Grafikus editorok Az Eclipse-ben lehetőség van ún. multi- page editorok létrehozására is Az Eclipse-ben lehetőség van ún. multi- page editorok létrehozására is A fenti típusok tetszőleges kombinációja A fenti típusok tetszőleges kombinációja Több és többféle editor, egy adatmodell Több és többféle editor, egy adatmodell

Egyszerű editor implementálása 1. Plugin-t írunk, ezért első lépésben egy új plugin projectet kell nyitnunk Plugin-t írunk, ezért első lépésben egy új plugin projectet kell nyitnunk Extension point: Extension point: <editor name=“MyEditor” <editor name=“MyEditor” icon=“icons/sample.gif” icon=“icons/sample.gif” extensions=“myfile” extensions=“myfile” contributorClass=“org.eclipse. ui.editors.text.TextEditorActionContributor” contributorClass=“org.eclipse. ui.editors.text.TextEditorActionContributor” class=“hu.bme.mit.test.editor.MyEditor” class=“hu.bme.mit.test.editor.MyEditor” id=“hu.bme.mit.test.editor.MyEditor”> id=“hu.bme.mit.test.editor.MyEditor”>

Egyszerű editor implementálása 2. A MyEditor osztály kódja: A MyEditor osztály kódja: public class MyEditor extends TextEditor { { public MyEditor() public MyEditor(){ super(); super(); setDocumentProvider(new MyDocumentProvider()); setDocumentProvider(new MyDocumentProvider()); setSourceViewerConfiguration(new MySourceViewerConfiguration()); setSourceViewerConfiguration(new MySourceViewerConfiguration());}} TextEditor, EditorPart,MultiPageEditorPart,AbstractTextEditor TextEditor, EditorPart,MultiPageEditorPart,AbstractTextEditor A SourceViewerConfiguration-ban a plusz funkciók definiálása történik, a DocumentProvider-ről később lesz szó A SourceViewerConfiguration-ban a plusz funkciók definiálása történik, a DocumentProvider-ről később lesz szó Melyek ezek? Melyek ezek?

Source editor 1. Plusz elvárások egy source editorral szemben: Plusz elvárások egy source editorral szemben: A kódolás gyorsítása ún. „okos kiegészítéssel” (Content Assist) A kódolás gyorsítása ún. „okos kiegészítéssel” (Content Assist) A kulcsszavak, szintaktikai elemek, megjegyzések kiemelése eltérő színezéssel (Syntax highlight) A kulcsszavak, szintaktikai elemek, megjegyzések kiemelése eltérő színezéssel (Syntax highlight) A tartalom automatikus formázása (Formatter,Indent) A tartalom automatikus formázása (Formatter,Indent) Az átláthatóság növelése az épp nem releváns kódrészletek elrejthetőségével (Folding) Az átláthatóság növelése az épp nem releváns kódrészletek elrejthetőségével (Folding) A compiler, debugger gyors és kényelmes elérése, azaz a megfelelő action-ok megléte A compiler, debugger gyors és kényelmes elérése, azaz a megfelelő action-ok megléte Szintaktiai és szemantikai hibák jelzése, esetleg javítása is Szintaktiai és szemantikai hibák jelzése, esetleg javítása is Egy adatstruktúra többféle ábrázolása (Outline view) Egy adatstruktúra többféle ábrázolása (Outline view) Tooltipek, plusz információ megjelenítése(Hover) Tooltipek, plusz információ megjelenítése(Hover)

Source editor 2.

Az MVC architektúra Model-View-Controller Model-View-Controller A source editorok a szolgáltatások nagy részét valamilyen mögöttes adatstruktúra, modell segítségével valósítják meg A source editorok a szolgáltatások nagy részét valamilyen mögöttes adatstruktúra, modell segítségével valósítják meg A modellt nem csak az editor módosíthatja! A modellt nem csak az editor módosíthatja! Egy modellt többféle viewer és editor is használhat, ráadásul egyszerre Egy modellt többféle viewer és editor is használhat, ráadásul egyszerre A konzisztenciát biztosítani kell A konzisztenciát biztosítani kell

Model-View-Controller

DocumentProvider 1. Szerepe: Szerepe: Létrehozza és felügyeli a dokumentum tartalmát Létrehozza és felügyeli a dokumentum tartalmát Értesíti az egyes editorokat a dokumentum modell változásairól Értesíti az egyes editorokat a dokumentum modell változásairól Létrehozza az ún. annotation modellt a dokumentumhoz, és kezeli a markereket (pl. error, warning, bookmark jelek) Létrehozza az ún. annotation modellt a dokumentumhoz, és kezeli a markereket (pl. error, warning, bookmark jelek) Az annotation model a vertical ruler tartalmáért felelős Az annotation model a vertical ruler tartalmáért felelős

DocumentProvider 2. Típusai: Típusai: FileDocumentProvider : file jellegű erőforrások kezelésére FileDocumentProvider : file jellegű erőforrások kezelésére StorageDocumentProvider : stream jellegű erőforrások kezelésére, pl. egy socket StorageDocumentProvider : stream jellegű erőforrások kezelésére, pl. egy socket Általában mindkettőt megvalósítják az editorban, a későbbi esetleges bővítés, újrafelhasználhatóság érdekében Általában mindkettőt megvalósítják az editorban, a későbbi esetleges bővítés, újrafelhasználhatóság érdekében

DocumentProvider 3. Egy jellegzetes alap implementáció: Egy jellegzetes alap implementáció: public class MyDocumentProvider extends FileDocumentProvider { protected Idocument createDocument(Object element) throws CoreException { Idocument document = super.createDocument(element); Idocument document = super.createDocument(element); if (document!=null) if (document!=null) { IDocumentPartitioner partitioner = createMyPartitioner(); IDocumentPartitioner partitioner = createMyPartitioner();partitioner.connect(document); document.setDocumentPartitioner(partitioner); document.setDocumentPartitioner(partitioner); }}} Itt található még az annotationmodel testreszabásának kódja is Itt található még az annotationmodel testreszabásának kódja is Partíciók, általános dokumentumszerkezet Partíciók, általános dokumentumszerkezet

Dokumentum tulajdonságok Dokumentum tulajdonságok A dokumentumok legtöbbször rendelkeznek valamilyen belső struktúrával, azaz azonosíthatóak bennük különböző szemantikájú részek A dokumentumok legtöbbször rendelkeznek valamilyen belső struktúrával, azaz azonosíthatóak bennük különböző szemantikájú részek Egy szöveges dokumentumnak lehet címe, paragrafusai, lábjegyzete, stb. Egy szöveges dokumentumnak lehet címe, paragrafusai, lábjegyzete, stb. Egy forráskódnak lehet kód, megjegyzés, preprocesszor instrukciók, idegen kód része Egy forráskódnak lehet kód, megjegyzés, preprocesszor instrukciók, idegen kód része Ezen eltérő szemantikájú részek a partíciók Ezen eltérő szemantikájú részek a partíciók Azonosításuk alapvető feltétele az egyes formatterek és a content assist megfelelő működésének Azonosításuk alapvető feltétele az egyes formatterek és a content assist megfelelő működésének

A Document osztály Definiálja a szövegmodellt Definiálja a szövegmodellt Tartalommódosító eljárások gyűjteménye Tartalommódosító eljárások gyűjteménye Replace,remove,insert,set... Replace,remove,insert,set... Pozíciók,sorok nyilvántartása Pozíciók,sorok nyilvántartása Partícionálás támogatása Partícionálás támogatása Keresés Keresés Változások kezelése Változások kezelése addDocumentListener,addDocumentPartitioningListe nr addDocumentListener,addDocumentPartitioningListe nr

DocumentPartitioner Az Eclipse-ben a dokumentumokat DocumentPartitioner objektumok osztják partíciókra, előzetesen megadott szabályok alapján Az Eclipse-ben a dokumentumokat DocumentPartitioner objektumok osztják partíciókra, előzetesen megadott szabályok alapján A particionálót a DocumentProvider-ben hoztuk létre (createMyPartitioner() metódus) A particionálót a DocumentProvider-ben hoztuk létre (createMyPartitioner() metódus) A partícionálónak a szabályokat egy PartitionScanner létrehozásával és konfigurálásával lehet megadni A partícionálónak a szabályokat egy PartitionScanner létrehozásával és konfigurálásával lehet megadni A partícionáló minden egyes dokumentummódosításnál lefut, és módosítja a partíciók határait ha kell A partícionáló minden egyes dokumentummódosításnál lefut, és módosítja a partíciók határait ha kell

PartitionScanner 1. Tokenek sorozatával tér vissza Tokenek sorozatával tér vissza A tokenek az egyes partíciókat reprezentálják A tokenek az egyes partíciókat reprezentálják Működését szabályok, ún. rule-ok vezérlik Működését szabályok, ún. rule-ok vezérlik Az Eclipse-ben sokféle beépített rule van, pl: Az Eclipse-ben sokféle beépített rule van, pl: SingleLineRule SingleLineRule MultiLineRule MultiLineRule EndOfLineRule EndOfLineRule NumberRule NumberRule Természetesen saját szabályokat is lehet gyártani Természetesen saját szabályokat is lehet gyártani

PartitionScanner 2. Példa SQL forrás partícionálására: Példa SQL forrás partícionálására: public class SQLPartitionScanner extends RuleBasedPartitionScanner { public final static String SQL_COMMENT = “sql_comment”; public SQLPartitionScanner() { super(); super(); IToken comment = new Token(SQL_COMMENT); IToken comment = new Token(SQL_COMMENT); List rules = new ArrayList(); List rules = new ArrayList(); rules.add(new MultiLineRule(“/*”,”*/”,comment)); rules.add(new MultiLineRule(“/*”,”*/”,comment)); rules.add(new SingleLineRule(“’”,”’”,Token.UNDEFINED,’\\’)); rules.add(new SingleLineRule(“’”,”’”,Token.UNDEFINED,’\\’)); IPredicateRule[] result = new IPredicateRule[rules.size()]; IPredicateRule[] result = new IPredicateRule[rules.size()]; rules.toArray(result); rules.toArray(result); setPredicateRules(result); setPredicateRules(result);}}

EditorActionContributor 1. A TextEditorActionContributor leszármazottja A TextEditorActionContributor leszármazottja Az editor extension pont megadásakor adtuk meg az osztály nevét, amely megvalósítja Az editor extension pont megadásakor adtuk meg az osztály nevét, amely megvalósítja Segítségével létrehozhatunk saját menüt, vagy lézető menük új menüpontjait az editorunknak Segítségével létrehozhatunk saját menüt, vagy lézető menük új menüpontjait az editorunknak A leggyakoribb action-ok: A leggyakoribb action-ok: Content Assist (CRTL+SPACE) Content Assist (CRTL+SPACE) Content Format Content Format Content Assist Tip Content Assist Tip

EditorActionContributor 2. Példa implementáció: Példa implementáció: public class MyEditorContributor extends TextEditorActionContributor { protected RetargetTextEditorAction fContentAssistProposal; public MyEditorContributor() {super(); fContentAssistProposal = new RetargerTextEditorAction (“Content Assist”); } public void init(IActionBars bars) {super.init(bars); IMenuManager menuManager = bars.getMenuManager(); IMenuManager editMenu = menuManager. findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);editMenu.add(fContantAssistProposal);}... // setActiveEditor!!! }

EditorActionContributor 3. A MyEditorContributor implementálása után még felül kell írni a TextEditor createActions() metódusát a MyEditor osztályban A MyEditorContributor implementálása után még felül kell írni a TextEditor createActions() metódusát a MyEditor osztályban Ezzel az editor regisztrál egy handler-t a contributor-ban megadott műveletekhez Ezzel az editor regisztrál egy handler-t a contributor-ban megadott műveletekhez A kiválasztott műveletet mindig az aktív editorpéldány hajtja végre A kiválasztott műveletet mindig az aktív editorpéldány hajtja végre

SourceViewerConfiguration 1. Az editor plusz szolgáltatásainak regisztrációja Az editor plusz szolgáltatásainak regisztrációja Content Assistant létrehozása Content Assistant létrehozása Completion Processor-ok megadása Completion Processor-ok megadása DoubleClickStrategy megadása DoubleClickStrategy megadása PresentationReconciler beállítása PresentationReconciler beállítása Reconciler beállítása Reconciler beállítása SourceViewer beállítása (Folding) SourceViewer beállítása (Folding)

SourceViewerConfiguration 2.

Content Assist 1. Egy prefix alapján az adott kontextusban lehetséges karaktersorozatok Egy prefix alapján az adott kontextusban lehetséges karaktersorozatok összegyűjtése összegyűjtése rendezése rendezése felajánlása felajánlása Partíciótípusonként eltérő lehet Partíciótípusonként eltérő lehet „Buta” megvalósítása egyszerű „Buta” megvalósítása egyszerű “Okos” megvalósítása bonyolultabb “Okos” megvalósítása bonyolultabb

Content Assist 2.

Content Assist 3. Megvalósítási lépések: Megvalósítási lépések: A SourceViewerConfiguration getContentAssistant() metódusának felülírása A SourceViewerConfiguration getContentAssistant() metódusának felülírása ContentAssistant objektum létrehozása ContentAssistant objektum létrehozása Partícionálás hozzárendelése Partícionálás hozzárendelése Az egyes partíciótípusokhoz CompletionProcessorok hozzárendelése Az egyes partíciótípusokhoz CompletionProcessorok hozzárendelése A megjelenő ablak tulajdonságainak beállítása A megjelenő ablak tulajdonságainak beállítása

CompletionProcessor 1. A Content Assistant „lelke” A Content Assistant „lelke” Fő funkciói Fő funkciói A jelöltek (proposals) meghatározása A jelöltek (proposals) meghatározása A jelöltek sorbarendezése A jelöltek sorbarendezése A jelöltek szűrése A jelöltek szűrése A jelöltek visszaadása A jelöltek visszaadása Az IContentAssistProcessor interface-t implementálja Az IContentAssistProcessor interface-t implementálja

CompletionProcessor 2. „Buta” Content Assist: „Buta” Content Assist: Adott az összes lehetséges kulcsszó Adott az összes lehetséges kulcsszó A kapott prefix alapján szelektál A kapott prefix alapján szelektál A találatokat rendezi és visszaadja A találatokat rendezi és visszaadja Előnyei: Előnyei: Egyszerű implementálni Egyszerű implementálni Gyors Gyors Hátrányai: Hátrányai: Csak az előre megadott kulcsszavakat tudja Csak az előre megadott kulcsszavakat tudja Nem veszi figyelembe az aktuális kontextust Nem veszi figyelembe az aktuális kontextust Már egy kevésbé bonyolult nyelvnél is elégtelen Már egy kevésbé bonyolult nyelvnél is elégtelen

CompletionProcessor 3. Implementálása: Implementálása: public class MyCompletionProcessor implements IContentAssistProcessor { protected final static String[] proposals = { “keyword1”,”keyword2”,”keyword3”,...}; public ICompletionProposal[] computeCompletionProposal (ITextViewer viewer,int documentOffset) { WordPartDetector wordPart = new WordPartDetector(viewer,documentOffset); WordPartDetector wordPart = new WordPartDetector(viewer,documentOffset); for (int i=0;i<proposals.length();i++) for (int i=0;i<proposals.length();i++) { if (proposals[i].startsWith(wordPart.getString())) if (proposals[i].startsWith(wordPart.getString()))proposalList.add(proposals[i]); } return proposalList; return proposalList;}}

CompletionProcessor 4. „Okos” Content Assist kellékei: „Okos” Content Assist kellékei: Az összes lehetséges kulcsszó Az összes lehetséges kulcsszó Egy speciális parser extra funkciókkal Egy speciális parser extra funkciókkal A parser által épített AST(Abstract Syntax Tree) A parser által épített AST(Abstract Syntax Tree) Megfelelő AST bejáró mechanizmus Megfelelő AST bejáró mechanizmus Kibővített AST megfelelő scope információval Kibővített AST megfelelő scope információval Egyéb lehetséges jelöltek más forrásból (pl. VIATRA ModelSpace entitások) Egyéb lehetséges jelöltek más forrásból (pl. VIATRA ModelSpace entitások)

CompletionProcessor 5. Előnyei: Előnyei: Intelligens Intelligens Megfelelően implementálva flexibilis és bővíthető Megfelelően implementálva flexibilis és bővíthető Komplex programozási nyelvekhez is jó Komplex programozási nyelvekhez is jó Hátrányai: Hátrányai: Átgondolt tervezést igényel(parser és AST) Átgondolt tervezést igényel(parser és AST) Rosszul implementálva lassú lehet Rosszul implementálva lassú lehet

CompletionProcessor 6. Egy bevált tervezési minta: Egy bevált tervezési minta:

Syntax highlighting 1. Syntax-Based Color Highlighting Syntax-Based Color Highlighting A szöveg bizonyos részei színekkel kiemelve A szöveg bizonyos részei színekkel kiemelve Melyek ezek a részek? Melyek ezek a részek? Content Assist Content Assist Változó dokumentum, változó színezés Változó dokumentum, változó színezés Damager,Repairer Damager,Repairer

Syntax Highlighting 2.

Syntax Highlighting 3. A megvalósítás lépései: A megvalósítás lépései: WordDetector, WhiteSpaceDetector megírása WordDetector, WhiteSpaceDetector megírása Kódscannerek implementálása Kódscannerek implementálása getPresentationReconciler() metódus felülírása getPresentationReconciler() metódus felülírása DefaultDamagerRepairer beállítása a kívánt partíciókra a megfelelő scannerekkel paraméterezve DefaultDamagerRepairer beállítása a kívánt partíciókra a megfelelő scannerekkel paraméterezve Minden partíciótípushoz külön megadható Damager és Repairer Minden partíciótípushoz külön megadható Damager és Repairer

Syntax Highlighting 4. WordDetector: WordDetector: public class MyWordDetector implements IWordDetector { public boolean isWordPart(char c) { return Character.isJavaIdentifierPart(c); } public boolean isWordStart(char c) { return Character.isJavaIdentifierStart(c); }} WhiteSpaceDetectornál isWhiteSpace(c) WhiteSpaceDetectornál isWhiteSpace(c)

Syntax Highlighting 5. Kódscanner: Kódscanner: Ugyanúgy rule-ok vezérlik mint a PartitionScannert Ugyanúgy rule-ok vezérlik mint a PartitionScannert Érdemes egy ColorProvider-t is implementálni Érdemes egy ColorProvider-t is implementálni Minden különböző típushoz különböző szín és token Minden különböző típushoz különböző szín és token Beépített rule-ok Beépített rule-ok WhiteSpace WhiteSpace Number Number Vowel Vowel Keyword Keyword

Syntax Highlighting 6. MyCodeScanner: MyCodeScanner: public MyCodeScanner() { ColorProvider provider = MyPlugin.getDefault().getColorProvider(); IToken keyword = new Token(new TextAttribute (provider.getColor(ColorProvider.KEYWORD),SWT.BOLD)); List rules = new ArrayList(); rules.add(new SingleLineRule(...)); WordRule wordRule = new WordRule(new MyWordDetector(),other); //Token for(int i=0;i<keywords.length;i++) {wordRule.addWord(keywords[i],keyword);}rules.add(wordRule);...}

Syntax Highlighting 7. A getPresentationReconciler() felülírása: A getPresentationReconciler() felülírása: public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) { PresentationReconciler reconciler = new PresentationReconciler(); DefaultDamagerRepairer dr = new DefaultDamagerRepairer(MyEditor.getMyCodeScanner()); reconciler.setDamager(dr,IDocument.DEFAULT_CONTENT_TYPE);reconciler.setRepairer(dr,IDocument.DEFAULT_CONTENT_TYPE);… return reconciler }

Content Formatting 1. Szövegrészek automatikus formázása Szövegrészek automatikus formázása Partíciótípusonként külön megadható Partíciótípusonként külön megadható Stratégiákat kell megadnunk Stratégiákat kell megadnunk

Content Formatting 2. MyFormattingStrategy MyFormattingStrategy public String format(String content,boolean isLineStart,String indentation) { return keyWordsToUpper(content); } getContentFormatter() felülírása getContentFormatter() felülírása public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) { ContentFormatter formatter = new ContentFormatter(); IFormattingStrategy keyword = new MyWordStrategy(); formatter.setFormattingStrategy(keyword,Idocument.DEFAULT_CONTENT_TYPE)}

Outline 1. Biztosítja a jobb átláthatóságot Biztosítja a jobb átláthatóságot Egyfajta „kivonat” Egyfajta „kivonat” Egy view, a TreeViewer-en alapul Egy view, a TreeViewer-en alapul Saját action-okat definiálhatunk hozzá Saját action-okat definiálhatunk hozzá Sorting, Show/Don’t show Sorting, Show/Don’t show Az adatok forrása általában a source modell, de van más megoldás is Az adatok forrása általában a source modell, de van más megoldás is Szoros együttműködés az editorral Szoros együttműködés az editorral

Outline 2.

Resource markerek 1. Speciális információk a szerkesztett forrással kapcsolatban Speciális információk a szerkesztett forrással kapcsolatban Erőforráshoz rendelhetőek Erőforráshoz rendelhetőek IMarker marker = file.createMarker(IMarker.TASK) IMarker marker = file.createMarker(IMarker.TASK) Workspace root-hoz is rendelhető marker Workspace root-hoz is rendelhető marker Alaptípusai: Alaptípusai: Task Task Bookmark Bookmark Problem Problem

Resource markerek 2.

Resource markerek 3. Markerek használata source editorok esetén: Markerek használata source editorok esetén: Milyen markerek szükségesek? Milyen markerek szükségesek? Task Task Warning Warning Error Error Hol és hogyan szeretnénk jelezni? Hol és hogyan szeretnénk jelezni? Szöveg aláhúzása Szöveg aláhúzása Ikon a vertical ruler-en Ikon a vertical ruler-en Problem view Problem view Markerek forrása és életciklusa : nem triviális feladat Markerek forrása és életciklusa : nem triviális feladat

Resource markerek 4. Markerek forrása: Markerek forrása: A source modell és a parser együttműködésével A source modell és a parser együttműködésével Probléma gyűjtő és jelentő mechanizmus Probléma gyűjtő és jelentő mechanizmus Speciális parser kell error-recovery mechanizmussal Speciális parser kell error-recovery mechanizmussal Egyértelmű source-offset - modelelement megfeleltetés Egyértelmű source-offset - modelelement megfeleltetés Markerek életciklusa Markerek életciklusa Mikor frissítsük? Mikor frissítsük? Reconciler Reconciler Builder Builder

A source modell 1. Az adott dokumentum mögöttes modellje Az adott dokumentum mögöttes modellje Metainformációk a forráskód által leírt entitásokról Metainformációk a forráskód által leírt entitásokról Tartalmaznia kell az egyes entitások Tartalmaznia kell az egyes entitások Nevét Nevét A forráskódbeli reprezentáció (karaktersorozat) kezdetét és végét A forráskódbeli reprezentáció (karaktersorozat) kezdetét és végét Attribútumait Attribútumait Típusát Típusát Referenciát a szülő entitásra Referenciát a szülő entitásra Referenciát az összes gyermek entitásra Referenciát az összes gyermek entitásra Egyéb szükséges információkat Egyéb szükséges információkat Minden pillanatban komzisztensnek kell lennie Minden pillanatban komzisztensnek kell lennie

A source modell 2.

A source modell 3.

A source modell 4. A parser építi, ám az építésnél körültekintően kell eljárni A parser építi, ám az építésnél körültekintően kell eljárni Mikor építsük? Mikor építsük? Az egészet, vagy csak egy részét? Az egészet, vagy csak egy részét? Az egész modell újraépítése minden alkalommal Az egész modell újraépítése minden alkalommal Előnyei: Előnyei: A legegyszerűbb módszer A legegyszerűbb módszer Nem igényel újabb parser üzemmódot Nem igényel újabb parser üzemmódot Egyszerűbb model builder Egyszerűbb model builder Hátrányai: Hátrányai: Nem túl elegáns Nem túl elegáns Nagy modellnél nagyon lassú lehet Nagy modellnél nagyon lassú lehet

A source modell 5. Meglévő modell karbantartása Meglévő modell karbantartása Előnyei: Előnyei: Gyors és elegáns Gyors és elegáns Komplex modellnél is használható Komplex modellnél is használható Hátrányai: Hátrányai: Új parser üzemmódot igényel (SELECTION_PARSE) Új parser üzemmódot igényel (SELECTION_PARSE) A model builder bonyolult A model builder bonyolult Egy Java bonyolultságú nyelvnél már csak ez jöhet szóba Egy Java bonyolultságú nyelvnél már csak ez jöhet szóba Cache mechanizmus erősen ajánlott Cache mechanizmus erősen ajánlott

Parserek 1. A fejlesztői környezet „agya” A fejlesztői környezet „agya” Speciális parserre van szükség Speciális parserre van szükség Content Assist Content Assist Outline vezérlés Outline vezérlés Hibakezelés, gyűjtés, jelentés Hibakezelés, gyűjtés, jelentés Fordítás Fordítás Modellépítés Modellépítés Mindezt figyelembe véve kell megvalósítani Mindezt figyelembe véve kell megvalósítani Nagy tapasztalat szükséges! Nagy tapasztalat szükséges!

Parserek 2. Megvalósítási lehetőségek: Megvalósítási lehetőségek: Kódolás előzetes tervezés alapján Kódolás előzetes tervezés alapján Nagy gyakorlat, tapasztalat szükséges Nagy gyakorlat, tapasztalat szükséges Csak az adott nyelvre működik Csak az adott nyelvre működik Parser generátor használata Parser generátor használata Csak a nyelvtant kell megírni Csak a nyelvtant kell megírni Automatikus parser generálás Automatikus parser generálás JavaCC,ANTLR,CUP,Yacc... JavaCC,ANTLR,CUP,Yacc... Önmagában ez NEM ELÉG! Önmagában ez NEM ELÉG!

Parserek 3. Problémák a parser generátorokkal Problémák a parser generátorokkal A generált parser nem támogatja a A generált parser nem támogatja a Content Assist-ot Content Assist-ot Hibakezelő mechanizmusokat Hibakezelő mechanizmusokat Outline vezérlő módot Outline vezérlő módot Megfelelő modell építését Megfelelő modell építését Modell módosítását Modell módosítását Mindezeket utólag kell beleépítenünk! Mindezeket utólag kell beleépítenünk! Design pattern a beépítendő funkciókra? Design pattern a beépítendő funkciókra? Gyorsaság? Gyorsaság?

Inside CDT C Development Tools C Development Tools A JDT-vel egyenértékű C/C++ fejlesztői környezet A JDT-vel egyenértékű C/C++ fejlesztői környezet Számos mechanizmust átvett a JDT-től Számos mechanizmust átvett a JDT-től Ennek megfelelően nagyon jól kihasználja az Eclipse által nyújtott lehetőségeket Ennek megfelelően nagyon jól kihasználja az Eclipse által nyújtott lehetőségeket

CDT Adatmodell 1. A modell gyökere a Workspace Root A modell gyökere a Workspace Root A Resource Model bővítése és testreszabása A Resource Model bővítése és testreszabása Bővítés: Bővítés: Class declaration Class declaration Method declaration Method declaration Member declaration Member declaration A Resource delta mechanizmust is kibővíti A Resource delta mechanizmust is kibővíti

CDT Adatmodell 2. A bővítések által lehetővé válik a source modell karbantartása A bővítések által lehetővé válik a source modell karbantartása Kiterjesztett Resource Delta Kiterjesztett Resource Delta A változás jól behatárolható A változás jól behatárolható A parser csak a megváltozott részt nézi meg A parser csak a megváltozott részt nézi meg ModelBuilder ModelBuilder

CDT C/C++ Parser 1. A C/C++ Parser módjai: A C/C++ Parser módjai: FULL_PARSE FULL_PARSE COMPLETION_PARSE COMPLETION_PARSE QUICK_PARSE QUICK_PARSE SELECTION_PARSE SELECTION_PARSE A jelenlegi verzió gyors és kifinomult, fejlett hibakezelő funkciókkal A jelenlegi verzió gyors és kifinomult, fejlett hibakezelő funkciókkal Az általa kínált interface azonban feleslegesen bonyolult Az általa kínált interface azonban feleslegesen bonyolult

CDT C/C++ Parser 2. FULL_PARSE FULL_PARSE A teljes, részletes AST előállítása A teljes, részletes AST előállítása Fordításhoz Fordításhoz COMPLETION_PARSE COMPLETION_PARSE Content Assist Content Assist Parse megadott offsetig Parse megadott offsetig Információk gyűjtése és visszaadása Információk gyűjtése és visszaadása CompletionNode CompletionNode

CDT C/C++ Parser 3. QUICK_PARSE QUICK_PARSE Az outline view vezérlésére használható Az outline view vezérlésére használható Csak adott mélységig dolgozza fel a forrást Csak adott mélységig dolgozza fel a forrást SELECTION_PARSE SELECTION_PARSE Megadott intervallumot dolgoz fel Megadott intervallumot dolgoz fel A source model karbantartására használható A source model karbantartására használható A futás eredménye AST csomópontok listája A futás eredménye AST csomópontok listája Ezeket a Model Builder dolgozza fel Ezeket a Model Builder dolgozza fel

Irodalom: EScript forráskód EScript forráskód CDT/JDT forráskód CDT/JDT forráskód JavaCC FAQ JavaCC FAQ Addison-Wesley : Building Commercial Quality Eclipse Plugins, 2004 Addison-Wesley : Building Commercial Quality Eclipse Plugins, 2004 Addison-Wesley : Official Eclipse 3.0 FAQ Addison-Wesley : Official Eclipse 3.0 FAQ The Java Developers Guide To Eclipse The Java Developers Guide To Eclipse

Vége Nyilas Gergely Sándor