Hackathon - RefactoringNG

Dnes proběhl další hackathon, který se zaměřil na RefactorNG plugin do NetBeans. RefactoringNG je modul pro NetBeans, který slouží k automatizované refaktorizaci kódu. Pro bližší seznámení doporučuji projít existující články na Java.cz:

Plugin funguje tak, že v prostředí Netbeans můžete označit konkrétní Java zdrojáky (popř. balíky zdrojáků) a aplikovat na ně pravidla uložená v RNG souboru. Pravidla se skládají ze dvou částí - první obsahuje pattern, kterým se porovnává zkoumaný zdrojový Java soubor a pokud dojde ke shodě části AST stromu, je na tuto část aplikován pattern v druhé části pravidla, který provede požadované modifikace.

RefactorNG pracuje na úrovni AST připraveného Javac parserem a tudíž je s ním pevně svázaný (používají se třídy z com.sun). Aby mohl člověk psát kvalitní pravidla je znalost AST v zásadě nutná. Běžně může docházet k takovým věcem, že pravidlo zapsané pro náhradu volání date.toString() za date.toGMTString() v následujícím snippetu směle nahradí výskyt #1, zato v #2 jej vynechá (protože na tomto místě vypadá AST jinak):


Date date = new Date();
//#1
String time = date.toString();
//#2
new Date().toString();

Aktuálně není možné pravidla spouštět mimo IDE NetBeans, i když jsem Zdeňka lámal, aby zvážil headless variantu pro volání RNG skriptů z řádkových build nástrojů. Nu, uvidíme.

Na hackathonu se nás tentokrát sešlo 7 s jedním člověkem připojeným přes Skype. V úvodní hodině jsme se seznámili s principy modulu a během večera padly za vlast 4 issue z BugTrackeru a před jedním požadavkem na rozšíření jsme museli kapitulovat:

Musím smeknout před Zdeňkem Troníčkem, který postavil API nad málo nebo vůbec dokumentovanými třídami NetBeans a ne jednoduchou dokumentací Java parseru. Osobně jsem v průběhu večera pochytil jen nějaké základní principy, ale že bych byl v obraze to se opravdu říct nedá. Reflexní API je proti API kompilátoru hračka - rovnat tomu se snad může jen vyhodnocování generik, se kterým jsem si užil také pár perných chvilek.

Tímto bych chtěl za Zdeňka poděkovat všem zúčastněným: Michalovi Bernhardovi, Pavlu Jetenskému, Michalovi Škrdlovi, Vlastimilu Dolejšovi, Denisovi Štěpanovi a především Váškovi Pechovi, který poskytl útočiště v sídle JetBrains a zajistil pití a pizzu.

Pokud byste se chtěli účastnit dalšího hackathonu, nebo měli nějaké nápady na OS projekty, které by potřebovali ofixovat pár issues v trackeru, zapojte se do naší google grupy. Vítán je každý.

[gallery columns="2"]