Eclipse w praktyce


1. Spis treści

1. Spis treści 2

2. Proponowane zmiany w skrótach klawiaturowych. 2

3. Wyszukiwanie w pliku. 2

4. Wyszukiwanie w workspace. 3

5. Nawigacja. 4

6. Hovers. 5

7. Refactoring. 5

8. Ctrl+Space, Ctrl+1 Programming. 7

9. Poprawianie błędów.. 10

10. Generacja kodu. 12

11. Definiowanie szablonów kodu (code templates) 14

12. Debugging. 15

13. JDK zamiast JRE. 16

14. Pluginy. 17

15. Na zakończenie…17

16. Bibliografia17

2. Proponowane zmiany w skrótach klawiaturowych

Poniżej przedstawiam kilka modyfikacji ustawień Eclipse’a, które moim zdaniem pozytywnie wpływają na jego użyteczność. Wszystkie przykłady w tym artykule wymagają wprowadzenia tych zmian.

Windows Preferences › General › Keys

Wybrać Command „Show Refactor Quick Menu”
W Binding wprowadzić „Alt+Shift+E”
Kliknąć Apply

Podobnie ustawiamy:

Command „Rename – Refactoring”
Binding = Alt+Shift+R

Command „Generate Getters and Setters”
Binding = Alt+S

Poniższe instrukcje zakładają wprowadzenie powyższych zmian.

3. Wyszukiwanie w pliku

Ctrl F – Find

Najprostsze wyszukiwanie wewnątrz pliku. Wpisujemy w Find szukaną frazę, odznaczamy Case sensitive i zaznaczamy Wrap serach. Wyszukiwane są kolejne słowa pasujące do wpisanego ciągu znaków.

Ctrl K – Find next
Shift Ctrl K – Find previous

Zaznaczamy w pliku pewien ciąg znaków.

Wciskamy Ctrl K.

Edytor zachowuje się tak, jakbyśmy wcisnęli Ctrl F i wpisali jako wyszukiwany string to, co zaznaczyliśmy. Bardzo przydatna funkcja.

Ctrl J – incremental search

Niektórzy preferują wyszukiwanie inkrementalne. Wciskamy Ctrl J i wpisujemy szukany ciąg znaków.

Ctrl O – quick Outline
Ctrl O twice – list all members in the current class plus super classes

Niezastąpione w dużych plikach. Rozwija listę pól i metod klasy w celu ułatwienia ich odnalezienia. Wybiera się potem element na tej liście, wciska Enter i kursor wskazuje już wybrany element w kodzie.

Lista ta zawęża się względem tego, co wpisujemy. Tj. chcąc otrzymać listę setterów w klasie, wciskamy Ctrl O i wpisujemy „set”.

Wciśnięcie Ctrl O dwa razy uzupełnia listę pól i metod o odziedziczone z klas nadrzędnych.

Ctrl F3 – coś pomiędzy Ctrl O oraz F3

Rozwija listę pól i metod klasy, na której nazwie, obiekcie lub metodzie znajduje się kursor.

Ctrl Shift ˇ, Ctrl Shift ^ – jump from one member to the next (or previous)

Zamiast zużywać kursor i oczy na szukanie kolejnych metod lub pól w pliku, wystarczy użyć tej kombinacji klawiszy.

Shift Alt ^ – select enclosing element

Zaznacza element zawierający element, na którym jest kursor lub zaznaczenie. Korzystne jest wielokrotne stosowanie tego skrótu w celu zaznaczania coraz większych obszarów.

Ctrl L – go to Line

Idzie do linii o podanym numerze.

4. Wyszukiwanie w workspace

Ctrl H – file search

Wyszukiwanie we wszystkich (bądź wybranych) plikach i projektach.

Po wybraniu “Customize…”, można wyłączyć inne zakładki i zostawić tylko “File search”, które uważam za najbardziej przydatne.

Warto również zdefiniować własny „Working set”, aby uniknąć marnowania czasu na wyszukiwanie w innych projektach,  w plikach wygenerowanych klas i innych nieznaczących zasobach.

Ctrl Shift G – searches the workspace for references to the selected method or variable

Szybkie wyszukiwanie odniesień do danego elementu javy (pole, metoda, obiekt) w całym workspace.

Ctrl T – go to a superType/subType

Można tego używać do klas, jak i do metod. Pokazuje hierarchię dziedziczenia z możliwością nawigacji. Np. jeśli widzimy metodę DAO, która jest tylko metodą interfejsu DAO, możemy dostać się do jej implementacji, ustawiając na niej kursor i wpisując Ctrl T. Powtórne wpisanie Ctrl T skutkuje ukazaniem hierarchii w odwrotnym kierunku.

F4 – Open type hierarchy

Podobnie jak Ctrl T, ale otwiera hierarchię w osobnym oknie.

Ctrl Shift R – open Resource

Przydatna funkcja do otwierania pliku o nazwie pasującej do wprowadzanego stringa.

Uwaga: należy zwrócić uwagę, czy otwieramy plik ze ścieżki z kodem, czy z plikami wynikowymi po buildzie.

Ctrl Shift T – open Type (class or interface)

Jak wyżej, ale ograniczone do Javy. Dodatkowo mamy tu dostęp do typów zawartych w bibliotekach (JAR).

We wpisywanej nazwie można używać gwiazdek oznaczających dowolny string.

Można też pomijać w nazwach klas małe litery, np.: „IOOBE” wyszuka IndexOutOfBoundsException.

Bookmarks

Często zdarza się potrzeba edycji kilku specyficznych plików, takich jak ApplicationResources.properties, Constants.java, build.xml, itp. Aby umożliwić szybki dostęp do takich plików, można zastosować mechanizm bookmarków.

Window Show view › Other › General › Bookmarks

W Package Explorer wybieramy plik, a następnie Edit › Add Bookmark…

W oknie Bookmarks pojawia się odnośnik do wybranego piku. Dwuklik na tym wierszu otwiera dany plik.

Można też stosować bookmarki wewnątrz pliku, na danej linijce:

W edytorze otwieramy plik, umieszczamy kursor na danej linii i podobnie Edit › Add Bookmark…

Compare With › Each Other

Pozwala na porównanie strukturalne dwóch zaznaczonych plików.

5. Nawigacja

F3 – open declaration
Ctrl + click the hyperlinked variable or class

Otwiera deklarację zmiennej lub klasy.

Ctrl Q – where did i Quit editing

Przenosi nas w miejsce, gdzie ostatni raz coś zmienialiśmy.

Ctrl E – go to opened Editor

Gdy mamy otwartych wiele edytorów, możemy się między nimi łatwo przełączać. Ctrl E i wpisujemy początek nazwy żądanego pliku.

Ctrl PgUp(PgDown) – go to previous(next) opened editor

Podobnie jak wyżej, ale tylko przełącza do poprzedniego/następnego edytora.

Ctrl F6 – toggle opened editors

Działanie podobne, ale bardziej przypomina Alt Tab w Windows.

Alt , Alt – hop back and forth through the files you have visited

Jak w opisie. Przeskakujemy między edytowanymi plikami, zgodnie z historią edytowania. Dobre, gdy pracuje się na 2-3 plikach równolegle.

Ctrl Alt H – open call Hierarchy

Pozwala na śledzenie łańcucha wywołań danej metody. Operacja dostępna jest w dwóch kierunkach: podążanie wg metod wywołujących daną metodę oraz schodzenie po metodach wywoływanych przez daną metodę.

Ctrl M – Maximize window

Maksymalizuje okno edytora (lub dowolne inne).

Ctrl Shift L – List all available keyboard shortcuts

Rozwija listę skrótów klawiszowych. Niezbyt przydatne, bo lista jest za długa.

Ctrl F7 – toggle views
Ctrl F8 – toggle perspectives
F12 – return to the editor

6. Hovers

F2 – open javadoc

Otwiera popup z podglądem całego javadoca dla danego elementu.

Shift + Najazd kursorem na klasę/metodę

Otwiera popup z podglądem całej klasy/metody.

7. Refactoring

Do prezentacji refactoringu posłuży następujący fragment kodu:

public static void main(String[] args) {

System.out.println(„hello world”);

System.out.println(„hello world”);

}

Shift Alt L – extract Local variable

Zaznaczamy pierwszy fragment „hello world” i wciskamy Shift Alt L.

Eclipse pyta się o nazwę nowo utworzonej zmiennej – podajemy hw.

Program przypisuje zmiennej zaznaczoną wartość i wstawia ją we wszystkich miejscach, gdzie pojawia się wartość.

Zaznaczony fragment może być oczywiście większy, o ile tylko da się go przypisać do zmiennej.

public static void main(String[] args) {

String hw = „hello world”;

System.out.println(hw);

System.out.println(hw);

}

Shift Alt E Extract constant

Zaznaczamy pierwszy fragment „hello world” i wciskamy Shift Alt E.

Z rozwiniętego menu wybieramy „Extract constant”.

Eclipse automatycznie podaje proponowaną nazwę stałej.

Wybieramy widoczność zmiennej, np. public.

public static final String HELLO_WORLD = „hello world”;

public static void main(String[] args) {

String hw = HELLO_WORLD;

System.out.println(hw);

System.out.println(hw);

}

Shift Alt M – extract Method

Zaznaczamy System.out.println(hw) i wciskamy Shift Alt M.

Podajemy nazwę nowo tworzonej metody printHW.

Eclipse tworzy metodę z odpowiednimi parametrami, wypełnioną zaznaczonym kodem i podmienia podświetlony kod wywołaniem metody.

public static final String HELLO_WORLD = „hello world”;

public static void main(String[] args) {

String hw = HELLO_WORLD;

printHW(hw);

printHW(hw);

}

private static void printHW(String hw) {

System.out.println(hw);

}

Shift Alt I – Inline method / variable

Działa odwrotnie do Shift Alt L.

Ustawiamy kursor na zmiennej hw (nie trzeba jej zaznaczać).

Wciskamy Shift Alt I, potwierdzamy pytanie Eclipsa.

Eclipse podmienia wystąpienia zmiennej hw w danej metodzie na przypisaną jej wcześniej wartość.

public static final String HELLO_WORLD = „hello world”;

public static void main(String[] args) {

printHW(HELLO_WORLD);

printHW(HELLO_WORLD);

}

private static void printHW(String hw) {

System.out.println(hw);

}

Podobnie dzieje się z metodami.

Klikamy na pierwszym wywołaniu printHW i wciskamy Shift Alt I.

Eclipse pyta się tym razem, czy rozwinąć metodę w jednym miejscu, czy we wszystkich, w których jest wywoływana.

Zaznaczamy „Only the selected invocation”.

public static final String HELLO_WORLD = „hello world”;

public static void main(String[] args) {

System.out.println(HELLO_WORLD);

printHW(HELLO_WORLD);

}

private static void printHW(String hw) {

System.out.println(hw);

}

Shift Alt E Convert Local Variable to Field

public class TestClass {

public void test() {

String str = „test”;

}

}

Ustawiamy kursor na zmiennej str i wciskamy Shift Alt E › Convert Local Variable to Field. Podajemy nazwę nowego pola fieldStr. Możemy też wybrać miejsce inicjalizacji pola; dla „Current metod” wynik będzie następujący:

public class TestClass {

private String fieldStr;

public void test() {

fieldStr = „test”;

}

}

8. Ctrl+Space, Ctrl+1 Programming

Myślę, że najprzydatniejsze w Eclipse są te dwie konfiguracje klawiszy. Trudno wymienić wszystkie miejsca, w których mogą się przydać. Zazwyczaj, jeśli chcesz zrobić coś z kodem i masz wrażenie, że może to być zautomatyzowane, wciśnij Ctrl+1 lub Ctrl+Space.

Ctrl Space – Content Assist (A.K.A auto-complete)

Uzupełnianie kodu

Content Assist uzupełnia pisany kod o domyślne rozwinięcie lub podaje listę dostępnych możliwości.

Np. piszemy „Syst” i wciskamy Ctrl Space.

Eclipse podaje listę możliwości do wyboru: System, SystemColor, SystemException, …

Wybieramy System [Enter]. Jeśli wybralibyśmy klasę z innego pakietu, Eclipse automatycznie doda wymagany import.

Piszemy kropkę.

Content Assist rozwija dostępne pola i metody klasy System.

Jeśli wybierzemy metodę, Eclipse automatycznie wypełnia jej parametry.

Deklaracje zmiennych

W miejscu, gdzie powinna pojawić się deklaracja, wywołać Content Assist. Np. dla deklaracji obiektu klasy ArrayList otrzymamy 2 podpowiedzi nazwy: arrayList oraz list.

Podpowiedzi parametrów

Często zdarza się, że mamy do czynienia z wywołaniem metody, która posiada wiele parametrów. Ctrl Space umożliwia podgląd ich typów oraz nazw. Parametr, który odpowiada położeniu kursora jest pogrubiony.

Tworzenie klas anonimowych

new Comparator();

Kursor pomiędzy nawiasami. Ctrl Space podpowiada “Comparator() Anonymous Inner Type”

[Enter]. Otrzymujemy implementację klasy anonimowej.

Wystarczy tylko wypełnić kod metody:

new Comparator() {

public int compare(Object arg0, Object arg1) {

// TODO Auto-generated method stub

return 0;

}

};

Korzystanie z domyślnych szablonów kodu

Wpisujemy for i Ctrl Space. Wybieramy „for – iterate over collection”. Dostajemy kod:

Wpisujemy nazwę iteratora, [Tab], nazwę kolekcji, [Tab], klasę elementów listy (przydatny Content Assist), [Tab], nazwę zmiennej odpowiadającej elementowi listy.

W podobny sposób możemy generować bloki try-catch, switch-case, instanceof, toArray,
if-else, gettery, settery, metodę main, toString, pętle while, sysout (System.out.println) itp.

Ctrl Space dwukrotnie – powoduje wylistowanie tylko szablonów kodu.

Domyślny konstruktor

Ctrl Space w miejscu, gdzie chcemy wstawić konstruktor.

Content Assist w JavaDocs

/**

*

*/

public int max(int a, int b) {

return a > b ? a : b;

}

Kursor w bloku komentarza, piszemy @p i akceptujemy podpowiedź @param. Wciskamy spację i Ctrl Space. Otrzymujemy podpowiedź pierwszego parametru. W drugiej linijce dostaniemy podpowiedź dla drugiego parametru.

Konfiguracja

Content Assist posiada możliwość konfiguracji:

Window Preferences › Java › Editor › Content Assist

Polecam “Completion overwrites” oraz “Guess filled method arguments”.

Ctrl 1 – Quick Fix

Quick Fix, jak nazwa wskazuje służy zazwyczaj do poprawiania błędów, ale można tej funkcjonalności używać również do zwyczajnego pisania kodu.

Rename in file

public static void main(String[] args) {

String string = „Quick fix”;

System.out.println(string);

}

Kursor na zmiennej string. Wciskamy Ctrl 1 i wybieramy „Rename in file”. Wpisujemy nazwę qFix, a Eclipse zmienia nazwę zmiennej we wszystkich odwołaniach. W tym miejscu trzeba uważać, żeby nie modyfikować zmiennych lub metod widocznych na zewnątrz klasy. Do takich zmian nazw używamy Refactor – Rename (Alt Shift R).

public static void main(String[] args) {

String qFix = „Quick fix”;

System.out.println(qFix);

}

Split variable declaration

Kursor na zmiennej qFix. Wciskamy Ctrl 1 i wybieramy „Split variable declaration”

public static void main(String[] args) {

String qFix;

qFix = „Quick fix”;

System.out.println(qFix);

}

Rozdzielenie deklaracji zmiennej od przypisania wartości jest przydatne np., gdy chcemy wyłączyć deklarację przed blok if lub try-catch.

Assign parameter to new field

W powyższym kodzie kursor na parametrze args, Ctrl 1 i wybieramy „Assign parameter to new field”.

private static String[] args;

public static void main(String[] args) {

QuickFix.args = args;

String qFix;

qFix = „Quick fix”;

System.out.println(qFix);

}

Wartość parametru została przypisana do nowo stworzonego pola. Gdyby był to parametr metody niestatycznej, pole również nie posiadałoby kwalifikatora static.

Assign statement to new local variable

System.getProperties()

Kursor w tej samej linijce, Ctrl 1, „Assign statement to new local variable”.

Properties properties = System.getProperties();

Eclipse przypisuje wartość zwracaną przez metodę do nowej zmiennej, automagicznie przypisując jej typ i nazwę.

Introduce new local with casted type

public void instanceofAssignment(Object test) {

if (test instanceof String) {

}

}

Kursor na instanceof, Ctrl 1, wybieramy „ Introduce new local with casted type”.

public void instanceofAssignment(Object test) {

if (test instanceof String) {

String string = (String) test;

}

}

Alt Shift Z – surround lines

Wprawdzie ani Ctrl Space, ani Ctrl 1, ale w temacie.

Powoduje umieszczenie zaznaczonego fragmentu kodu wewnątrz wybranego rodzaju bloku:

9. Poprawianie błędów

Ctrl 1 – Quick Fix

Ten skrót został już dosyć obszernie omówiony w poprzednim rozdziale. Tu opiszę jego zastosowanie przy poprawianiu błędów.

Add import

Ctrl 1 najczęściej używany jest do dodawania brakującego importu.

List list = new ArrayList();

Kursor na List lub ArrayList i Ctrl 1.

Create a new method

public class QuickFixErrors {

public int addSquares(int a, int b) {

return sqr(a) + sqr(b);

}

}

Wywołanie sqr przedstawiane jest jako błąd. Prawie każdy błąd można rozwiązać przy użyciu Ctrl 1, a na pewno warto spróbować ;). Jeśli użyjemy tego w tym przypadku, Eclipse utworzy prywatną metodę sqr, z odpowiednimi parametrami i zwracanym typem.

public class QuickFixErrors {

public int addSquares(int a, int b) {

return sqr(a) + sqr(b);

}

private int sqr(int i) {

// TODO Auto-generated method stub

return 0;

}

}

Add parameter

public class QuickFixErrors {

public int addSquares(int a, int b) {

return power(a, 2) + power(b, 2);

}

private int power(int i) {

return i*i;

}

}

W tym przypadku dodaliśmy dodatkowy parametr do wywołań funkcji power. Eclipse zgłasza błąd niezgodności liczby parametrów. W tym przypadku Ctrl 1 daje możliwość usunięcia dodatkowego argumentu z wywołać lub dodanie tegoż argumentu jako parametr do deklaracji metody. Po wybraniu tego drugiego:

public class QuickFixErrors {

public int addSquares(int a, int b) {

return power(a, 2) + power(b, 2);

}

private int power(int i, int j) {

return i*i;

}

}

Add unimplemented methods

Przydatna funkcja przy implementowaniu interfejsu lub rozszerzaniu klas abstrakcyjnych:

Exception handling

public void handling() {

try {

Thread.sleep(100);

} catch (NullPointerException e) {

e.printStackTrace();

}

}

Kursor w linijce z Thread.sleep(100), Ctrl 1. Mamy do wyboru 3 możliwości:

  • Add throws declaration – dodanie wyrzucania wyjątku przez metodę
  • Add catch clause to surrounding try – dodaje kolejnego catcha
  • Surround with try/catch – wstawia blok try-catch wewnątrz istniejącego

Class casts

String elt = list.get(0);

W tym przypadku Ctrl 1 umożliwia zrzutowanie do Stringa lub zmianę typu elt na Object:

String elt = (String) list.get(0);

lub

Object elt = list.get(0);

Ctrl . Ctrl , – move to the next (previous) problem

Skacze do następnego błędu lub warninga w kodzie.

Ctrl Shift O – Organize imports

Dodaje potrzebne importy, usuwa zbędne.

Można stosować wewnątrz pliku, na całym pakiecie lub nawet całym projekcie.

Shift Alt S Clean Up Wizard

Dobre narzędzie do automatycznego, bezpiecznego czyszczenia kodu.

10. Generacja kodu

public class GettersSetters {

private String name;

}

Alt S – generowanie Getterów i Setterów (zob. Proponowane zmiany w skrótach klawiaturowych)

Dla danego kodu wywołujemy Alt S.

Wybieramy pola, do których chcemy utworzyć gettery i settery, w tym przypadku name.

public class GettersSetters {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

Shift Alt S Generate Constructor using Fields

Tworzy konstruktor przypisujący wartości swoich parametrów odpowiednim polom klasy.

public class GettersSetters {

private String name;

public GettersSetters(String name) {

super();

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

Shift Alt J generate JavaDoc

Wstawia porządnego JavaDoca. Np. dla danej metody (kursor na nazwie metody):

public int max(int a, int b) {

return a > b ? a : b;

}

Wygeneruje coś takiego:

/**

* @param a

* @param b

* @return

*/

Bardzo przydaje się podczas dziedziczenia lub implementacji interfejsu. Nie musimy wtedy kopiować komentarzy z interfejsu, gdyż Shift Alt J wstawia taki komentarz:

/* (non-Javadoc)

* @see cl.use.of.eclipse.CodeAssist#max(int, int)

*/

Osobiście wolę inną templatkę, wstawiającą prawdziwy JavaDoc. Aby ją zmienić:

Window Preferences › Java › Code Style › Code Templates › Comments › Overriding methods

Wstawiamy tam:

/**

* ${see_to_overridden}

*/

Shift Alt S Generate Delegate Methods

public class DelegateTest {

String sb;

}

Kursor na polu sb. Wywołujemy generację metod delegujących.

Zaznaczamy tylko metodę length().

Otrzymujemy metodę delegującą:

public class DelegateTest {

String sb;

public int length() {

return sb.length();

}

}

Shift Alt S Override/Implement Methods

public class DataSet extends HashSet {

}

Kursor na DataSet, wybieramy Override/Implement Methods. Wybieramy metodę HashSet.add():

public class DataSet extends HashSet {

public boolean add(Object arg0) {

// TODO Auto-generated method stub

return super.add(arg0);

}

}

Shift Alt S Generate hashCode() and equals()

public class HashEquals {

private String name;

}

Dzięki tej funkcji otrzymamy następujący kod:

public class HashEquals {

private String name;

public int hashCode() {

final int PRIME = 31;

int result = 1;

result = PRIME * result + ((name == null) ? 0 : name.hashCode());

return result;

}

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

final HashEquals other = (HashEquals) obj;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

}

Ctrl I – correct Indentation

Wstawia automatycznie wcięcia w zaznaczonym kodzie.

Ctrl Shift F – Format code

Porządkuje kod, wstawia wcięcia, ale potrafi narobić bałaganu w komentarzach.

11. Definiowanie szablonów kodu (code templates)

Window Preferences › Java › Editor › Templates

Własne szablony kodu są bardzo przydatną cechą Eclipse’a. Przyspieszają pisanie kodu i eliminują pojawienie się przypadkowych błędów. By je wywołać wystarczy wpisać ich nazwę i nacisnąć Ctrl Space.

Poniżej przedstawiam parę stworzonych przeze mnie szablonów do kodu wpisującego odpowiednie informacje do logów. Do prezentacji użyję metody:

public String concat(String s1, String s2) {

return s1 + s2;

}

ld – log.debug
log.debug(„${enclosing_method} ${cursor}”);

Wynik:

log.debug(„concat |);

Szablon rozwija kod, zamieniając zmienne ${…} na odpowiednie wartości. I tak ${enclosing_method} wprowadza nazwę aktualnej metody, a ${cursor} ustawia kursor w podanym miejscu.

lvar – log variable
log.debug(„${enclosing_method} ${name} = „ + ${cursor}${name});

Wynik:

log.debug(„concat name = „ + name);

Pozwala wpisać do loga wartość zmiennej. Zaraz po wpisaniu lvar i Ctrl Space, można w rozwiniętym kodzie wpisywać nazwę zmiennej, która zostanie podstawiona w obydwu podświetlonych miejscach.

le1 – log entry for method with 1 parameter
log.debug(„${enclosing_method}(„ + ${cursor}${enclosing_method_arguments} + „)”);

W metodzie:

public void test(int x) {

}

daje wynik:

log.debug(„test(„ + x + „)”);

Szablon do zastosowania przy wejściu do metody. Niestety, nie działa dla większej liczby parametrów, dlatego stworzyłem kolejny szablon:

lent – log entry
log.debug(„${enclosing_method}(„ + cl.process.common.StringUtils.commaSepar(new Object[] {${cursor}${enclosing_method_arguments}}) + „)”);

Wynik dla metody concat(String s1, String s2):

log.debug(„concat(” + cl.utils.StringUtils.commaSepar(new Object[] { s1, s2 }) + „)”);

Dzięki zastosowaniu StringUtils.commaSepar(), nie potrzebujemy samodzielnie wstawiać do stringa przecinków między logowanymi argumentami.

Oto kod tej metody:

public static String commaSepar(Object[] objects) {

StringBuffer sb = new StringBuffer();

if (objects != null) {

for (int i = 0; i < objects.length; i++) {

Object obj = objects[i];

if (i > 0) {

sb.append(„, „);

}

sb.append(obj);

}

} else {

sb.append(„null”);

}

return sb.toString();

}

log_block – log around block of code
log.debug(„${enclosing_method} ${name} start”);
${line_selection}
log.debug(„${enclosing_method} ${name} koniec”);

Zaznaczamy dowolny fragment kodu wewnątrz metody, wciskamy Shift Alt Z i wybieramy log_block. Zaznaczony fragment otrzymuje po jednej linijce loga na początku i na końcu. Dodatkowo, podobnie jak w lvar, możemy nazwać komentowany fragment.

12. Debugging

Ctrl F11 – run last launched application

F11 – debug last launched application

Proste skróty, dzięki którym nie musimy wybierać opcji z menu, tylko ponownie uruchamiamy to, co ostatnio.

Ctrl Shift B – toggle Breakpoint

Wstawia/usuwa breakpointa w danej linii.

Breakpoint properties

Hit Count – umożliwia zatrzymanie debuga po określonej liczbie „zaliczeń” breakpointa.

Enable Condition – zatrzymuje debug tylko, gdy podany warunek jest prawdą.

F5 – Step into

Wchodzi do środka wywoływanej metody.

F6 – Step over

Wykonuje metodę, ale nie debuguje jej zawartości.

F7 – Step return

Wykonuje do końca kod metody, w której znajduje się debug i wychodzi do metody wywołującej.

F8 – Resume

Opuszcza tryb debugowania krok-po-kroku.

Okno Variables

Zawiera listę dostępnych zmiennych wraz z ich wartościami.

Możliwa jest zmiana ich wartości bezpośrednio w tabeli (Enter zatwierdza) lub w oknie podglądu wartości pod tabelą (Ctrl S zatwierdza).

Ctrl Shift D – Display

Ten skrót odnosi się do okna Display (Window Show view Display).

Gdy debug zatrzyma się w jednym z breakpointów, można użyć okna Display do wykonywania wpisanego w tym oknie kodu.

Pisząc kod w oknie Display mamy możliwość korzystania z Content Assista.

W celu wykonania fragmentu wpisanego kodu należy go zaznaczyć i wcisnąć Ctrl Shift D.

Można również kliknąć na ikonę z lupą, aby przejrzeć strukturę wyniku.

Podmiana kodu, czyli nigdy nic nie wiadomo.

Gdy debug się zatrzyma w danej klasie, możemy zmienić nieco jej kod i zapisać zmiany. To spowoduje dynamiczną podmianę kodu klasy i ponowne wejście do metody, w której zatrzymał się debug. Ta funkcja działa również, gdy wykonywany kod znajduje się na serwerze. Niestety ciężko polegać na podmianie kodu, gdyż do końca nie wiadomo, czy Javie udało się ją wykonać. Prawdopodobnie, gdy nie zmieniamy sygnatur metod i pól klasy, podmiana powinna przejść pomyślnie.

13. JDK zamiast JRE

Dzięki podpięciu pod Eclipsa JDK, mamy możliwość przeglądania kodu klas Javy, a nawet zakładania tam breakpointów.

W tym celu trzeba ustawić wartość zmiennej środowiskowej JRE_SRC na plik src.zip dostępny w instalacji JDK. Można zamiast tego w Window Preference Java Installed JREs dodać JDK i ustawić jako domyślne.

14. Pluginy

Checkstyleplugin do sprawdzania jakości kodu.

Checkstyle jest narzędziem developerskim, które pomaga pisać kod Javy zgodny z pewnymi regułami. Automatyzuje procedurę sprawdzania kodu wyręczając ludzi w tym nudnym zajęciu. Checkstyle jest w pełni konfigurowalne i pozwala na dostosowanie do sprawdzania zgodności z niemal dowolnymi stylami kodowania.

Można go uruchamiać ręcznie lub automatycznie. Automatyczne uruchamianie włącza się przez Project Properties Checkstyle Checkstyle active for this project.

Ctrl Alt F – automatyczna naprawa wszystkich błędów zgłaszanych przez Checkstyle

JUtils – generator toString() oraz konstruktora kopiującego.

PMD scans Java source code and looks for potential problems like:

  • Possible bugs – empty try/catch/finally/switch statements
  • Dead code – unused local variables, parameters and private methods
  • Suboptimal code – wasteful String/StringBuffer usage
  • Overcomplicated expressions – unnecessary if statements, for loops that could be while loops
  • Duplicate code – copied/pasted code means copied/pasted bugs

15. Na zakończenie…

Ctrl Shift W – close all editor Windows

16. Bibliografia

Help Tips and tricks… › Eclipse Java Development Tools

http://rayfd.wordpress.com/2007/05/20/10-eclipse-navigation-shortcuts-every-java-programmer-should-know/

http://www.linuxdevices.com/articles/AT6046208714.html