Kolejna z części artykułu „Eclipse w praktyce” opisuje wykorzystanie zaawansowanych możliwości edytora kodu Java, w szczególności:
- Content Assist
- Auto Complete
- Quick Fix
Uwaga: niektóre przykłady skrótów klawiaturowych wymagają wprowadzenia zmian w konfiguracji Eclipse.
1. 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.
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:

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.
Autor: Dominik Kapusta
Tagi: Eclipse
