Eclipse w praktyce cz. 4 – generowanie kodu

post_img

Czwarta część kursu „Eclipse w praktyce” traktuje o automatycznej generacji kodu wewnątrz edytora. Na początek dowiemy się, jak wykorzystywać wbudowane mechanizmy tworzenia kodu, a potem poznamy, jak definiować własne szablony.

Uwaga: niektóre przykłady skrótów klawiaturowych wymagają wprowadzenia zmian w konfiguracji Eclipse.

1. 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.

2. 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.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Komentarz do “Eclipse w praktyce cz. 4 – generowanie kodu

  • "Ctrl Shift F" nie taki straszny

    „Ctrl Shift F – Format code

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

    Rozwiązaniem jest użycie w javadocu (nie mylić z ). „Ctrl Shift F” respektuje oznaczone w ten sposób nasze preferencje co do miejsc złamania linii. Przy zwykłym komentarzu następuje tylko złamanie zbyt długich linii, więc ręcznie stworzony posział zostanie zachowany.