Eclipse ‘n Tricks
19 January 2009 18:02 · Auke van Leeuwen · Educatie, IDE, Java
Ik kan de lezer bijna horen zuchten: “Weer zo’n tips and tricks artikel”. En terecht misschien wel. Aan de andere kant, het komt vaak genoeg voor dat ik mensen hun Eclipse zie gebruiken als yet-another-notepad. Ik heb gemerkt dat het nuttig kan zijn om af en toe eens mee te kijken met je mede-ontwikkelaars om te zien hoe die hun Eclipse gebruiken. En om te voorkomen dat iedereen straks over mijn schouder heen kijkt ga ik er alvast een artikel aan wijden.
Er moet nog even opgemerkt worden dat het puur over een Eclipse/Java combinatie gaat. Verder zijn de genoemde shortcuts the standaard shortcuts op een Windows gebaseerde machine. Maar in het algemeen zou ik willen zeggen dat het loont om keyboard shortcuts te leren en je IDE überhaupt zo veel mogelijk uit te buiten.
(Keyboard) Shortcuts
Control + Spatie
Iedereen weet wel wat dit doet: code completion. Ik wil er dan ook niet te veel woorden aan vuil maken, maar als je nog nooit ctrl + spatie in je favoriete e-mail programma of tekstverwerker hebt getypt (en verbaasd was dat het woord niet afgemaakt werd) dan heb je het nog niet genoeg gebruikt1.
Control + 1
Hoewel het commando wat aan deze toetsencombinatie toegewezen is officieel Quick Fix heet doet het meer dan alleen problemen oplossen. Het is eigenlijk meer een soort van context gevoelige suggestie lijst. Niet alleen om problemen op te lossen, maar ook de kleine ‘refactor’ dingen zitten hieronder. Zo wordt er in het boek Clean Code aangeraden2 om je if-statements om te zetten naar private methods die iets meer zeggend zijn. Je kunt hiervoor simpelweg de logica binnen je if statement kopiëren en ctrl + 1 gebruiken:
Eclipse zal in dat geval een methode maken met de naam ‘extracted’, welke je direct kan hernoemen (door te beginnen met typen) naar iets wat duidelijker is.

Control + Shift + T en Control + Shift + R
In het Java perspective (of soortgelijk) is dit de toetsencombinatie om respectievelijk een ‘Type’ te openen of een Resource. Type wat letters van het type (classes) of resource (zo’n beetje alles) dat je wilt openen en kies de juiste file uit de box met suggesties.
Control + 2, L
Persoonlijke favoriet: toewijzen aan lokale variabele. Je typt dus eerst wat je wil gaan assignen, gaan aan het einde van die regel staan en drukt op ctrl + 2 gevolgd door L. Vervolgens geeft Eclipse je een aantal mogelijkheden qua naamgeving en type waaraan je wilt assignen.
- Schrijf datgene wat je wilt assignen:

ctrl + 2, L:

- Kies of type naam gevolgd door enter:

- Kies type gevolgd door enter:

- Je staat nu weer waar je begonnen was.
Deze shortcut is overigens ook te bereiken via de Quick Fix! Je zal ook bij de suggesties die de Quick Fix geeft zien dat er ook een directe shortcut voor is (namelijk ctrl + 2, L). Als je dus merkt dat je vaak hetzelfde kiest uit de Quick Fix suggesties, gebruik dan de directe shortcut.
Ctrl + T
Quick Hierarchy. Onmisbaar voor snelle navigatie door het bos van interfaces en implementaties. Als je via Ctrl + mouseclick (of F3) door Java sources heen browst kom je met regelmaal in interfaces terecht terwijl je eigenlijk graag bij (een van) de implementerende classes terecht wil komen. Als je wat meer bekend bent met de sources en weet dat een methode in een interface gedeclareerd is kan je met Control + T direct naar de methode in een van de implementerende classes springen.

Qua shortcuts kunnen we doorgaan tot we een ons wegen. En als je iets vaak gebruikt wat je wel via het menu kan bereiken maar dat standaard geen shortcut heeft is het een kleine moeite om een key binding aan te maken.
JDT Algemeen
Gebruik van [cC]amelCase
Het is in Eclipse op vele plaatsen mogelijk om Upper- of lowerCamelCase te gebruiken als je op zoek bent naar een type of methode. Stel jouw methode verwacht een parameter die niet null mag zijn en je wilt daar graag een IllegalArgumentException voor wilt gooien. Je begint met typen: “throws new Ill” en drukt op ctrl + spatie. Dan blijkt dat er 30+ matches op je classpath staan. Wat je ook kan doen is in plaats daarvan typen: “throws new IAE” en dan op ctrl + spatie drukken. Eclipse gaat nu kijken welke types er CamelCase matchen. Dit zijn er uiteraard een stuk minder. Je kan de lijst nog kleiner maken door bijvoorbeeld op IArE te gebruiken. In mijn geval levert dat nu nog maar 2 matches op: IllegalArgumentException en IncompleteArgumentException.
Dit geld niet alleen voor types, maar voor methodes. Zo levert "SOMESTRING".tLC met autocomplete toLowerCase() en toLowerCase(Locale locale). Verder kun je het ook gebruiken in het tekstvak als je op zoek bent naar een type (ctrl + shift + t).
Save Actions
Sinds de Europa release zijn er ‘Save Actions’, taken die uitgevoerd (kunnen) worden als een bestand opgeslagen wordt. Via Preferences -> Java -> Editor -> Save Actions kan je bijvoorbeeld automatisch een organize imports runnen bij het opslaan van je sources. Maar ook onnodige casts verwijderen, trailing whitespace verwijderen en zelfs je code formatteren. Dat laatste is lang niet altijd handig, tenzij het heel strak geregeld qua formattering is met je mede developers (en wat er al in SVN staat). Persoonlijk vind ik dat ‘Organize Imports’ standaard aan zou moeten staan.
Favorites
Een van de nadelen van een het aanzetten van Organize Imports bij de Save Actions is dat je in sommige gevallen wilt dat een bepaalde import blijft staan. Een van de meest bekende is misschien wel de static import org.junit.Assert.* als je JUnit (4) tests aan het schrijven bent. Waar bij JUnit 3 de methode assertEquals() uit de class TestCase kwam, is dit nu een static methode in de class Assert. Door Assert.* met een static import te importeren kan je nog steeds assertEquals() gebruiken, maar een Organize Imports bij de save actions zal deze import reduceren tot een lijst van werkelijk gebruikte static methodes. Als je dus een volgende keer assertArrayEquals() wilt gebruiken, zal je weer een static import moeten doen of Assert.assertArrayEquals() moeten typen.

Favorites to the rescue. Onder Preferences -> Java -> Editor -> Content Assist -> Favorites kun je ‘favoriete’ types (met static members) of static members opgeven. Deze zullen door de autocomplete als optie aangedragen worden zelfs als de import nog niet gedaan is. Zo levert “aT” + ctrl + spatie het gewenste resultaat:

Klein nadeel is natuurlijk dat je je ‘globale’ autocomplete vervuild (als je het zo kan noemen). Er staat bij mij dan ook meestal niet meer in dan de JUnit asserts en bijvoorbeeld de Hamcrest matchers.
Topje van de IJsberg
Hoewel dit artikel al op een roman begint te lijken is natuurlijk nog veel meer te zeggen. Dit is een selectie van dingen die ik handig vind aan Eclipse en die niet altijd even bekend zijn. Zoals ik in het begin al zei heb ik sommige van de keybindings simpelweg geleerd omdat ik achter een mede-developer stond en hem iets magisch zag doen waardoor Eclipse meer voor hem deed als dat Eclipse voor mij tot dan toe deed. Ik zou zeggen als dat jou overkomt, vraag simpelweg even wat voor coole keybinding dat is en probeer hem ook in je vingers te krijgen
.
1Ik ben me bewust dat er testverwerkers en e-mailprogramma’s zijn die dit wel doen.
2Van horen zeggen (boek nog niet gelezen)! Peter Maas weet er het fijne van.













Ik mis nog mijn favo keybinding: Command-3 op de Mac (Ctrl-3 onder Windows waarschijnlijk), daarmee kun je globaal in Eclipse naar van alles zoeken (menu’s, perspectives, classes, etc). Ik gebruik hem vooral om snel naar het gewenste perspective of view te switchen. Al weet ik dat sommigen hem minder geweldig vinden…
Martin - January 20, 2009 1:42
Merk op dat het complete overzicht van shortcuts te vinden is via: Preferences -> General -> Keys. Mocht je er zin in hebben kan je ze ook allemaal aanpassen….
Rob - January 20, 2009 10:22
@Martin: Tja, toen ik eenmaal met de shortcuts aan de gang ging was het lastig om te bepalen welke ik ging noemen. Het wordt al snel een superlange lijst. Dit is echt de shortlist van de shortlist
@Rob: Goed punt, maar dat is zo’n lange en ondoorzichtige lijst dat je niet even wat bindings in je hoofd stampt. Handig als je percies het commando weet en de keybinding wilt veranderen, maar niet zo handig om te kijken wat je uberhaupt kán.
Auke van Leeuwen - January 20, 2009 10:28
handig ook +shift+L om keybindings in je huidige context te zien!
Peter Maas - January 22, 2009 12:01
Bedankt voor de tips, ctrl-2 L kende ik nog niet. Buiten deze zijn er nog 3 die ik constant gebruik:
- shift-ctrl-g (find references) en shift-alt-h (call hierarchy)
- alt-F3 (geboden door de ‘implementors’ plugin): vind de implementatie(s) waar een aanroep naar kan wijzen.
Arnout Engelen - January 27, 2009 11:59
@Arnout: sorry ik was op vakantie, dus had deze nog niet gezien. Is die alt-F3 in dat geval heel anders dan ctrl-t?
Auke van Leeuwen - February 2, 2009 0:34
Ik begrijp dat niet iedereen het tekentje kan zien in mijn reaktie. Het is dus een appeltje, op andere platforms is het waarschijnlijk ctrl.
Peter Maas - February 3, 2009 21:17
Hoi, ik begin net met Eclipse te spelen omdat mijn vriendin het gebruikt voor haar java en we er met Drupal ook gebruik van kunnen maken.
.)
Die Camel Case tip is geweldig.
Alt + / is er eentje die ik ontdekte op mijn speurtocht naar écht autoaanvullen.
Begin te typen en gebruik Alt + / en je cyclet door alle woorden in je pagina die je al gebruikt hebt. Dat scheelt fouten met variabelen.
Ik ben lui en verdorven, want ik heb ook met vwd en flashdevelop gewerkt en daar was autoaanvullen écht autoaanvullen en geen auto-rsi (krijg je vanzelf als je steeds ctrl + space moet indrukken
Is er een toggle in de Eclipse preferences om ctrl + space te automatiseren tot écht autoaanvullen? Ik heb redelijk gegoogled en vooralsnog niks zinnigs gevonden. Verder vind ik eclipse waanzinnig hoor. Ik kan er nu zelfs gebruik van maken voor jquery. Maar een beetje gebruiksvriendelijker zou niet gek zijn.
Willem - April 7, 2009 21:34
Hey, bedankt voor je reactie.
Als je bedoelt dat je eigenlijk graag ctrl+space gebruikt voor autoaanvullen ipv ‘content assist’ kan je simpelweg de bindings in je preferences wijzigen:
Ga naar je Preferences -> General -> Keys en zoek daar de bindings op. Je kan ook zoeken op keybindings omdat je meestal de exacte term niet weet. Dus waarschijnlijk eerst even zoeken op ‘ctrl+space’ en deze reassignen (of verwijderen), gevolgd door zoeken op ‘alt+/ ‘ om deze te wijzigen naar ctrl+space.
Ik zelf gebruik autoaanvullen nooit eigenlijk omdat content-assist behoorlijk accuraat is (voor Java development) en context-aware zeg maar. Maar autoaanvullen kan zeker ook handig zijn. Goeie tip eigenlijk.
Overigens kan je voor Java / Javascript development ook je template proposals aanpassen van de content-assist: Onder Preferences -> Java(Script) -> Editor -> Content Assist -> Advanced kan je aangeven welke ‘proposals’ worden getoond na herhaaldelijk drukken op ctrl+space. In jouw geval klinkt het alsof je Word Proposals wil aanvinken en wat hoger op de lijst wil zetten?
Auke van Leeuwen - April 8, 2009 11:03
Dank je wel Auke. Ik was niet goed op de hoogte van de terminologie in Eclipse. Ik heb gezocht op “code hints”, “auto suggest” en “autoaanvullen”. Dankzij jou weet ik nu dat wat ik wil “content assist” heet, en dat “auto aanvullen” wat anders is.
Content assist werkt bij mij al goed voor de talen waar ik het voor wil gebruiken (php, xhtml, javascript, jquery en css), mits ik ctrl + space indruk.
Wat ik wilde instellen voor deze talen was “Auto-Activation”.
Door content assist in te vullen als filter in de “Preferences”-lijst, kwamen er in mijn installatie van Eclipse drie editors tevoorschijn waarvoor ik Auto-Activation kon instellen: Ant, Java en JavaScript. Nu bleek Auto-Activation voor al deze editors al aan te staan maar met een grote vertraging. De Ant en de Java editor gebruik ik niet maar die kun je hier dus aanpassen.
javascript
Ik heb in de “Content Assist” van de JavaScript Editor de vertraging verwijderd en extra triggers toegevoegd. Ik moet nog testen of ik hier ook “Auto-activation” voor jquery kan aanzetten (de content assist voor jquery heb ik met een patch toegevoegd aan Eclipse).
html
Mijn web omgeving in Eclipse wordt volgens mij verzorgd door WST, Web Developer Tools en Web Page Editor. Door Editor in te vullen als filter in de “Preferences”-lijst vond ik Web > HTML Files > Editor. Hier vond ik een formulierveld “Content assist”. Je kunt daar “Automatically make suggestions” aanvinken en zelf aangeven welke tekens dit triggeren, bijvoorbeeld Editor > Code Assist.
css
Voor de css-editor, waar ik het het hardst nodig heb, zie ik geen opties om “Auto-Activation” aan te zetten.
Er bestaat een Code Assist optie in Amateras maar tot nog toe krijg ik die editor niet goed geïnstalleerd.
Willem - April 13, 2009 15:47
Een deel van mijn vorig post viel weg:
Door Assist in te vullen als filter in de “Preferences”-lijst vond ik PHP > Editor > Code Assist.
Ook hier betaat de mogelijkheid om de time-out voor “Auto-activation” terug te zetten naar 0.
Willem - April 13, 2009 15:55
php
De laatste versie van pdt 2.0 voor eclipse 3.4.2 op
http://download.eclipse.org/tools/pdt/updates/2.0/
ondersteunt bij mij nu (sinds 19 april) “Auto Activation”. Ook in mijn php code krijg ik nu automatisch code hints zonder op [ctrl]+[spatie] te hoeven drukken.
De optie zit onder Preferences > PHP > Editor > Code Assist.
Ik had de optie eerder zonder succes aangezet. Het herstarten van Eclipse hielp niet. Het is mogelijk dat het een bug betrof die met een (automatische) update is opgelost. Het is ook mogelijk dat een herstart van de pc het probleem heeft verholpen. Ik zit op Windows Vista Business en start eigenlijk alleen opnieuw op bij updates van Vista zelf.
Willem - April 20, 2009 13:07
Thanks a lot for your superior story about this topic. But to detect the best writing services some students should get know about essay order.
Linda27 - January 28, 2010 22:41