V dnešním článku se seznámíme s novým
                  nástrojem pro refaktorování javovského kódu. Jmenuje
                  se RefactoringNG a jde o modul do NetBeans 6.9.
Ve srovnání s jinými nástroji nabízí RefactoringNG
                  velkou flexibilitu, protože refaktorizační pravidla
                  si zde definujeme sami. Každé refaktorizační pravidlo
                  popisuje transformaci nějakého abstraktního
                  syntaktického stromu na jiný. Např. pravidlo pro
                  přepis výrazu x = x + 1 na x++ vypadá takto:
// x = x + 1 -> x++
Assignment {
Identifier [name: "x"],
Binary [kind: PLUS] {
Identifier [name: "x"],
Literal [kind: INT_LITERAL, value: 1]
}
} ->
Unary [kind: POSTFIX_INCREMENT] {
Identifier [name: "x"]
}
Názvy a struktura abstraktních syntaktických stromů
                  jsou stejné jako v sunovském překladači Javy. Nástroj
                  používá Compiler Tree API (com.sun.*), formální model
                  jazyka v JDK API (javax.lang.model.*) a
                  infrastrukturu NetBeans.
K čemu se to dá použít? Např. pokud potřebujete
                  nahradit volání konstruktoru voláním tovární metody:
// new Position(<args>) -> Position.create(<args>)
NewClass {
null,
List<Tree>,
Identifier [name: "Position"],
List<Expression> [id: args],
null
} ->
MethodInvocation {
List<Tree> { },
MemberSelect [identifier: "create"] {
Identifier [name: "Position"]
},
List<Expression> [ref: args]
}
Nebo když do každého volání metody potřebujete
                  přidat argument:
// plus (<expr1>, <expr2>) -> plus (<expr1>, <expr2>, 5)
MethodInvocation {
List [size: 0],
Identifier [name: "plus"],
List<Expression> [id: args, size: 2]
} ->
MethodInvocation {
List<Tree> [size: 0],
Identifier [name: "plus"],
List<Expression> {
ListItems [ref: args],
Literal [kind: INT_LITERAL, value: 5]
}
}
 Více informací můžete najít na http://kenai.com/projects/refactoringng. Modul
                  ke stažení je na http://kenai.com/projects/refactoringng/downloads
