Voorbeeld - Java-editor
Inleiding
Met het voorbeeld van de Java-editor worden de standaardfeatures gedemonstreerd die beschikbaar zijn voor aangepaste teksteditors.
Ook wordt gedemonstreerd hoe u een editor moet registreren voor een bestandsextensie
(in dit geval .jav) en hoe u een aangepaste documentprovider moet definiëren die door die editor wordt gebruikt.
Dit voorbeeld is alleen bedoeld als demonstratie. De ondersteuning voor het bewerken van Java wordt geboden door the Eclipse Java Tooling.
De code voor dit voorbeeld bevindt zich in de plugin org.eclipse.ui.examples.javaeditor
.
Als u de code wilt verkennen is het raadzaam om de plugin naar uw werkgebied te exporteren.
Features die in de voorbeeldeditor worden gedemonstreerd
-
syntaxisaccentuering
-
inhoudtypegevoelige contenthulp (Javadoc en Java-code)
-
communicatie tussen het contentoverzicht en de editor, d.w.z. het markeringsbereik van de editor wordt gevuld met de selectie van het contentoverzicht.
-
twee verschillende presentatiewerkstanden
-
het markeringsbereik markeren met behulp van een indicator die het visuele bereik aangeeft
-
de editor zodanig beperken dat alleen tekst binnen het markeringsbereik wordt afgebeeld (bijvoorbeeld een enkele methode uit een Java-klasse afbeelden)
-
markeringen
-
documenten gemeenschappelijk gebruiken
Features die niet worden gedemonstreerd
-
contentindeling
-
dynamisch afstemmen van overzichtspagina
Voorbeeld van de Java-editor uitvoeren
-
Een project maken
-
Een bestand maken met de bestandsextensie ".jav" in het nieuwe project. Het voorbeeld van de Java-editor wordt automatisch geopend.
-
Java-code invoegen. De Java-code wordt dynamisch gekleurd. In de voorbeeldeditor worden de volgende taalelementen in verschillende kleuren weergegeven: commentaar dat uit meerdere regels bestaat, commentaar dat uit één regel bestaat, gereserveerde woorden voor Java-taal, tekenreeks- en tekenconstanten, reguliere Java-code en commentaar dat uit meerdere regels bestaat volgens de Javadoc-richtlijnen. Binnen dat Javadoc-commentaar hebben Javadoc-trefwoorden (groen) en HTML-codes (grijs) verschillende kleuren.
-
Open een nieuw Java-commentaar dat uit meerdere regels bestaat door "/*" in te voegen buiten een Java-commentaar.
Alle tekst tussen "/*" en de eerste keer dat "*/" wordt gebruikt of het eind van de tekst wordt rood gemaakt.
"*" toevoegen. Het rode bereik wordt weer gewijzigd in zwart omdat er wordt verondersteld dat het reguliere commentaar dat uit meer dan een regel bestaat Javadoc bevat.
Roep de code-Help aan door CTRL-SPACE te gebruiken.
Het doel van de contenthulpfunctie is de gebruiker ondersteunen bij het schrijven van code.
Als de contenthulp wordt aangeroepen moeten alle mogelijke geldige voltooiingen worden weergegeven op de locatie waar de contenthulp is aangeroepen.
Binnen Javadoc worden alle Javadoc-trefwoorden voorgesteld door de voorbeeldeditor.
-
Buiten een Java-commentaar kunt u een content-tip aanroepen met CTRL+SHIFT+SPACE. Er worden vijf voorstellen weergegeven. Selecteer een en druk op ENTER. Er verschijnt een klein zwevend venster boven de huidige regel waarin het geselecteerde voorstel wordt afgebeeld.
Content-tips worden gebruikt om aan te geven wat de bedoeling van de gebruiker is (bijvoorbeeld een methodeaanroep invoeren) en vervolgens contextgegevens af te beelden waarmee de gebruiker de actie kan uitvoeren.
In de voorbeeldeditor is het voorstel geldig zolang het vijf tekens binnen de oorspronkelijke locatie van de aanroep blijft.
Als de contenttip zichtbaar is, roept u de contenthulp op met CTRL+SPACE.
De contenthulp die in deze situatie wordt opgeroepen helpt de gebruiker bij het verwezenlijken van het gewenste doel dat nog steeds zichtbaar is in de content-tip. Binnen de reguliere Java-code worden door de voorbeeldeditor altijd alle Java-trefwoorden voorgesteld.
-
Sla de Java-code op. Door het opslaan wordt het contentoverzicht bijgewerkt. Het contentoverzicht bevat tien gegevens die elk tien even grote segmenten van de Java-code in de editor vertegenwoordigen.
Deze stijl voor het contentoverzicht is gekozen om aan te tonen dat de semantiek van markeringsbereiken arbitrair kan worden gedefinieerd.
(Zie de volgende stappen.)
-
Selecteer een van de gegevens in het contentoverzicht. De bijbehorende regels zijn gemarkeerd met een blauwe balk in de verticale liniaal aan de linkerkant van de editor.
-
Schakel nu over naar de gesegmenteerde presentatiewerkstand van de Java-editor. Controleer of de editor focus heeft en klik op de knop in de werkbalk van het bureaublad met de voorgrond-Helptekst "Gesegmenteerde bronviewer in-/uitschakelen".
Deze functionaliteit wordt gebruikt voor enkele methodeviews en vergelijkbare functionaliteit.
-
Selecteer een ander gegeven in het contentoverzicht. Nu toont de editor alleen het geselecteerde segment.
Als u het gegeven in het contentoverzicht deselecteert, wordt de volledige Java-code opnieuw afgebeeld.
-
Selecteer een gegeven in het contentoverzicht, selecteer een fractie van de zichtbare tekst en voeg een taak toe voor de selectie.
De taak wordt afgebeeld in de takenlijst.
Wijzig de zichtbare code. in de takenlijst selecteert u de eerder gemaakte taak en drukt u op de knop "Ga naar bestand". De taak wordt geselecteerd in het zichtbare gebied, waarbij op de juiste manier rekening wordt gehouden met de eerder toegepaste wijzigingen.
-
Selecteer een ander gegeven in het contentoverzicht. Toon de eerder toegevoegde taak in de takenlijst.
Het markeringsbereik van de editor wordt automatisch vergroot zodat het bereik van de getoonde taak ook kan worden opgenomen.
-
Open een nieuw werkgebied. In het nieuwe werkgebied opent u een Java-editor voor hetzelfde bestand als in het oorspronkelijke werkgebied.
Wijzig de content van de editor. Ga terug naar het oorspronkelijke werkgebied.
In de editor worden de wijzigingen getoond die in het andere werkgebied zijn aangebracht.
De twee editors die hetzelfde bestand weergeven, worden gekoppeld.
Uitgangspunten voor het maken van aangepaste teksteditors
De volgende stappen zijn meestal nodig om een aangepaste teksteditor te ontwikkelen.
-
Maak een documentprovider. Een documentprovider (zie IDocumentProvider)
produceert en beheert documenten (zie IDocument) die een tekstweergave bevatten van invoerelementen van editors.
Het is belangrijk om te beslissen hoe de conversie tussen elementen en tekstweergave moet worden uitgevoerd en of de documentprovider moet worden gedeeld tussen verschillende editors of niet. Raadpleeg de klasse FileDocumentProvider in de Java-voorbeeldeditor.
-
Maak een documentpartitioner. Een documentpartitioner (see IDocumentPartitioner)
deelt een document op in afzonderlijke regio's. Aan elke regio wordt door de partitioner een inhoudtype toegewezen uit een verzameling inhoudtype die vooraf door de partitioner zijn gedefinieerd. Na elke documentwijziging moet de partitionering van het document worden bijgewerkt.
Zie de klasse JavaPartitioner in de Java-voorbeeldeditor. De
JavaPartitioner stelt regio's vast van het type "commentaar dat uit meerdere regels bestaat", "Javadoc-commentaar" en "al het andere". U moet ervoor zorgen dat de documentprovider wordt ingesteld op elk document dat door de documentprovider wordt geproduceerd.
-
Bepaal welke bronviewer-plugins beschikbaar moeten zijn. Ondersteunde plugins zijn, onder andere, strategieën voor automatisch inspringen, dubbelklikstrategieën, contentindeler en tekstpresentatie-reconciler.
De uiteindelijke beschrijving wordt beperkt tot de tekstpresentatie-reconciler (see IPresentationReconciler).
In de Java-voorbeeldeditor, wordt de tekstpresentatie-reconciler gebruikt om syntaxisaccentuering te implementeren.
-
Maak voor alle bronviewer-plugins de bijbehorende extensies voor elk ondersteund inhoudtype. Zoals u hierboven kunt zien, worden met de documentpartitioner de ondersteunde inhoudtypen gedefinieerd.
De standaardimplementatie van IPresentationReconciler ondersteunen IPresentationDamagers en IPresentationRepairers als extensies.
Die extensies worden beschouwd als specifiek voor een bepaalde inhoud.
Dus voor een aangepaste editor moet de gebruiker eerst een subset van de ondersteunde inhoudtypen selecteren.
Regio's van een type in de geselecteerde subset worden bijvoorbeeld syntaxisgeaccentueerd.
Voor elk type moeten de extensies worden geïmplementeerd.
Zie JavaDamagerRepairer en JavaDocDamagerRepairer in de voorbeeldeditor.
-
Maak een bronviewerconfiguratie met behulp van de eerder gemaakte plugins en extensies.
Zie JavaSourceViewerConfiguration in de voorbeeldeditor.
-
Pas de klasse TextEditor of AbstractTextEditor aan met de ontwikkelde documentpartitioner en de bronviewerconfiguratie. Voeg acties toe of vervang acties en pas de opbouw van het contextmenu van de editor aan. In de werkelijke versie moet deze aanpassing in een subklasse worden aangebracht.
Zie JavaEditor in de voorbeeldeditor.
-
Stel een bijbehorende actiebalkdeelnemer in die editor-gerelateerde acties toevoegt aan de werkbalk en menu's van het bureaublad.
Zie JavaActionContributor in de voorbeeldeditor.
-
Breid het XML-configuratiebestand uit van de plugin van de editor, zodat de editor wordt geregistreerd op het vooraf gedefinieerde editor-extensiepunt voor een bepaalde groep bestandsextensies.
Stel ook de actiebalkcontributor in het XML-bestand in.
Raadpleeg plugin.xml van dit voorbeeld.
Code-organisatie van het voorbeeld
De Java-editorvoorbeeldcode bestaat uit vier pakketten:
-
org.eclipse.ui.examples.javaeditor
bevat alle editorspecifieke klassen.
-
org.eclipse.ui.examples.javaeditor.java
bevat alle Java-specifieke bronviewerplugins zoals JavaDamagerRepairer en de Java-specifieke documentpartitioner.
-
org.eclipse.ui.examples.javaeditor.javadoc
bevat alle Javadoc-specifieke bronviewerplugins zoals JavaDocDamagerRepairer.
org.eclipse.ui.examples.javaeditor.util
bevat handige klassen die door drie andere pakketten worden gedeeld.