Kontynuujemy dzień z Google, a konkretniej z Google Web Toolkit. Tym razem problem permutacji. Każdy programista piszący aplikacje z wykorzystaniem frameworku GWT wie, a przynajmniej powinien wiedzieć, co oznaczają permutacje podczas kompilacji programu. Załóżmy, że tworzymy aplikację wielojęzyczną w GWT – powiedzmy, że 3-języczną. Kompilator wspiera 6 silników przeglądarek, więc z prostych wyliczeń wychodzi nam niepozorna liczba 18. Co ona oznacza? Jest to liczba permutacji, jakie kompilator uruchomi podczas kompilacji aplikacji … ale jednomodułowej. Jeśli w aplikacji jest kilka modułów to liczba permutacji jest zwielokrotniona zależnie od liczby modułów. To prowadzi do frustracji, w przypadku gdy DevMode (HostedMode) nie wystarcza nam w rozwijaniu, testowaniu funkcjonalności itp. Musimy skompilować aplikację, a w przypadku tylu permutacji potrafi to trwać od kilkunastu minut do kilkudziesięciu, w zależności od posiadanego sprzętu. Jak temu zaradzić? 

Wszystkie nasze zmiany będziemy wprowadzać w pliku konfiguracji modułu aplikacji GWT (*.gwt.xml). Całość operacji dotyczy właściwości locale.

Teraz przedstawię rozwiązanie dla dwóch wersji biblioteki GWT: 2.4 i 2.5. W naszych aplikacja wykorzystujemy GXT (Sencha GXT, jako rozszerzenie graficznego interfejsu użytkownika).

<!-- <set-property name="gxt.user.agent" value="chrome"/> -->

<extend-property values="pl, en, es" name="locale"/>
<set-property-fallback name="locale" value="pl"/>
<set-property value="pl, en, es" name="locale"/>

<!-- <extend-property values="pl, en, es" name="locale"/>
<set-property-fallback name="locale" value="pl"/>
<set-property value="pl" name="locale"/> -->

Linia 1. mówi nam o kompilacji wyłącznie dla silnika [1] (przeglądarki) Chrome, co stanowi 1/6 całości. Zatem odkomentowując pierwszą linię zmniejszamy liczbę permutacji 6-krotnie. Ale to nie koniec. W trybie deweloperskim, często zależy nam na sprawdzeniu czegoś, przetestowaniu, przez co różne wersje językowe nie mają dla nas znaczenia (chyba, że testy dotyczą właśnie internacjonalizacji), zatem możemy kompilować wyłącznie na jeden język. Gdy odkomentujemy linie 7-9 i zakomentujemy 3-5 to kompilacja zostanie dokonana wyłącznie na język polski. Przy obu włączonych właściwościach otrzymujemy (1/6) * (1/3) – 1/18 permutacji. Krótko mówiąc liczba permutacji wówczas będzie tożsama z liczbą modułów aplikacji.

[1] http://www.sencha.com/forum/showthread.php?162259-user.agent-setting-is-ignored-during-gwt-compilation-phase&p=693063&viewfull=1#post693063