V tomto článku si ukážeme, jak lze pomocí RefactoringNG snadno zaměnit volání metody. Pro příklad se vydáme na cestu časem do doby JDK 1.1, kdy přibyla ve třídě java.awt.Component metoda setEnabled. Tato metoda nahradila metodu enable, která je od verze 1.1 Deprecated. Náhradu volání metody enable za volání metody setEnabled s parametrem true popíšeme v RefactoringNG následujícím pravidlem:

 // p.enable() -> p.setEnabled(true)
// where p is a variable of type java.awt.Component or any subclass
MethodInvocation {
List<Tree> { },
MemberSelect [identifier: "enable"] {
Identifier [id: p, instanceof: "java.awt.Component"]
},
List<Expression> { }
} ->
MethodInvocation {
List<Tree> { },
MemberSelect [identifier: "setEnabled"] {
Identifier [ref: p]
},
List<Expression> {
Literal [kind: BOOLEAN_LITERAL, value: true]
}
}

Toto pravidlo nahradí všechna volání ve tvaru p.enable(), kde p je proměnná typu java.awt.Component nebo libovolný potomek.

Máte nějaké zkušenosti s RefactoringNG? Napište mi o tom! Rád si přečtu, k čemu jste RefactoringNG použili, co vám na něm vyhovuje a co postrádáte.