Efter en lunchdiskussion med ett par av mina kollegor letade jag fram ett gammalt dokument som jag skrev åt en kund för ett par år sedan. Det hade titeln ”Eclipse Tips och Tricks”. Det är tyvärr inte up-to-date längre, så jag tänker inte dela med mig av det här, men det väckte en del tankar.

Det kan göra rätt stor skillnad på produktiviteten att lära sig några nyckelfinesser i det verktyg man använder sig av — särskilt om det är det verktyg man jobbar större delen av dagarna med som Eclipse tenderar att vara för Java-utvecklare. Ändå händer det allt som oftast att man ser någon göra nån liten grej som man aldrig sett förut.

För skojs skull tänkte jag därför försöka lista de vanligast handgreppen jag gör i Eclipse. Antagligen känner du till de flesta, men kanske är det något som är nytt. Och säkert kan du tipsa mig (i kommentarerna) om något smart som jag borde känna till!

Alla knappkombinationer jag anger här är de som gäller för Eclipse 3.3 (”Europa”) under Windows. De är säkert snarlika på andra plattformar, men jag vet att åtminstone under Macen kan det vara lite annorlunda. (Ett tips på Macen: om det inte funkar som jag skrivit så prova trycka på kringlan istället för Ctrl…)

Klicka på ett klassnamn, metodnamn eller variabelnamn. Om du sedan trycker på F3 hoppar du till det ställe där namnet deklareras. Enkelt och självklart. En mer visuell variant av detsamma får du om du håller ner Ctrl-knappen och pekar på olika ställen i koden med musen. Du ser då att alla namn i koden blir klickbara (och ser ut som vanliga webblänkar). Klicka på en länk för att hoppa till deklarationen (precis som med F3).

Ctrl+Shift+T låter dig söka på alla typer i ditt workspace. Börja skriv namnet så ser du snart vad som matchar. Du kan även söka med jokertecken (”*”) i texten. Ytterligare en finess är att du kan söka bara genom att ange versalerna i typen du är ute efter — en sökning på ”NPE” ger till exempel träff på NullPointerException. Detta är det snabbaste sättet att hitta en specifik klassdeklaration!

Ctrl+Shift+R funkar på samma sätt som typsökningen, fast på alla filer i ditt workspace (”R” = ”Resource”). Detta är det snabbaste sättet att hitta en specifik fil! Observera att om du har flera filer med samma namn så måste du välja bland dessa i nedre delen av sökfönstret.

Du har säkert sett Outline-vyn som visas till höger (som default) bredvid redigeringsarean. Den är bra för att navigera inom en Java-fil. Men när Java-filen blir för lång så att du måste börja scrolla i vyn eller om du tycker att den tar för mycket plats så att du minimerar den så blir den inte längre praktisk att arbeta med. Använd istället Ctrl+O för ”Quick Outline”. Du får upp motsvarande lista i en drop-down, med den enorma fördelen att du direkt kan börja söka i den. Börja skriva ”get” så visas alla ”getters”, osv. Jokertecken funkar även här så att du kan få fram alla metoder som slutar på ”Pattern” genom att skriva ”*Pat” i listan.

Ett vanligt ”navigeringsproblem” är att man har en metod som anropas på ett objekt och vill hoppa till implementationen av den metoden. Problemet är när det är en interface-metod som är anropad: trycker man då på F3 hoppar man bara till deklarationen i interfacet. Om man istället klickar på metoden och trycker Ctrl+T får man upp en liten drop-down där man kan välja vilken av implementationerna man är intresserad av.

Slutligen vill jag nämna favoriten Ctrl+Alt+H, dvs ”Callers graph”. Klicka på en metod och tryck den nämnda knappkombinationen så får du se från vilka ställen metoden anropas. Detta visas i en trädstruktur så att du kan se anropet i flera led bakåt. Mycket praktiskt!

Kodhantering och refactoring

Det finns egentligen bara två snabbfunktioner som överskuggar alla andra: Quick Fix (Ctrl+1) och Content Assist (Ctrl+blanksteg). Du har säkert använt dem redan, men jag vill ändå nämna hur otroligt många användningsområden de har, och det är inte säkert att du känner till alla varianter.

Quick Fix (Ctrl+1) klarar de flesta former av enkla kompileringsfel, och det går så snabbt och lätt att använda att jag numera konsekvent helt enkelt överlåter en del av kodandet till den funktionen. Några exempel:

Antag att du ska implentera ett interface där en av metoderna tar ett Object som parameter, men du vet att i din applikation är det alltid en String. Börja metoden med att helt enkelt tilldela parametern till en sträng istället:

void someMethod(Object aParameter) { 
    String myString = aParameter; 
    ... 
}

Här kommer Eclipse att flagga med röd understrykning att aParameter inte kan tilldelas myString utan castning. Klicka någonstans på raden och tryck Ctrl+1. Eclipse föreslår ett antal sätt att lösa problemet, men det första alternativet (casta aParameter till String) är ju det du vill. Tryck bara Return så fixar det sig.

Ett annat lättfixat fel: om du lägger till att en befintlig klass ska implementera ett nytt interface så signalerar Eclipse ett fel längst upp vid klassdeklarationen, eftersom du inte implementerat metoderna för det nya interfacet ännu. Klicka på raden, välj Quick Fix så får du alternativet ”Add unimplemented methods”.

En quick fix som inte har med syntaxfel att göra: Anta att du har en metod som växer till sig lite. Du märker säkert att du använder något enkelt uttryck på flera ställen i metoden, och det vore snyggare att bryta ut det till en lokal variabel. Markera uttrycket och tryck Ctrl+1, och välj ”Extract to local variable” (troligen det första alternativet). Alla ställen i metoden som det uttrycket används byts det ut mot en ny lokal variabel. Du kan faktiskt också gå åt andra hållet: klicka på en lokal variabel, kör quick fix och välj alternativet ”Inline local variable” så ersätts alla användningar av den lokala variabeln med det uttryck som den motsvarar (om möjligt).

Via ”Quick fix” når du en stor mängd med liknande ”mini refactorings” och det är väl värt tiden att utforska dess möjligheter.

Slutligen kommer vi då till Content Assist (Ctrl+blanksteg). Du känner naturligtvis till den enklaste användningen: om du har ett String-objekt och vill skriva en metod ”substring”, så räcker det om du skriver ”sub” och trycker på Ctrl+blanksteg. Eclipse visar då en lista på passande metodnamn där du snabbt kan välja med piltangenterna vilken du menar. Men det finns ett par andra användningsområden också, som är väldigt praktiska.

När du deklarerar en ny variabel kan du låta Eclipse föreslå vad den ska heta, baserat på dess typ. Kanske inte så användbart för bara en sträng, men inte sällan kanske du har en klass som heter något i stil med InternalObfuscatedTradeEvent. Först bör du då lära dig att Content Assist gärna expanderar namn med Camel Case. Du behöver alltså bara skriva IOTE och trycka Ctrl+blanksteg för att skriva klassnamnet. Lägg till ett blanksteg efter klassnamnet som vanligt. Tryck sedan Ctrl+blanksteg igen! Eclipse föreslår då olika varianter på vad variabeln ska heta: ”event”, ”tradeEvent”, ”obfuscatedTradeEvent” eller ”internalObfuscatedTradeEvent”! Mycket smidigt! Dessutom mappas detta mot de eventuella projektregler du angett i Eclipse, t.ex. att lokala variabler ska ha prefixet ”t”, medlemsvariabler ”m_”, etc. Finns det sådana regler så anpassas förslagen därefter.

Avslutningsvis

Det är inga rocket science-grejer jag har beskrivit i den här artikeln, men förhoppningsvis så har du som orkat läsa ända hit hittat någon bra finess som du inte kände till och som kommer att göra ditt vardagskodande mera effektivt hädanefter…? Det här var i alla fall de funktioner som jag själv känner att jag använder mest, hela tiden, och som gör min vardag enklare. Helt säkert har du någon annan funktion bland dina favoriter! Dela gärna med dig av dem i kommentarerna nedan!