protected static def getGeneratedFileNames(String name, int boo) {
    def names = new ArrayList<String>()
    foo = null
<begin>    println (names.toString() + boo + name)
    println (names + foo)<end>
    names
}
-----
protected static def getGeneratedFileNames(String name, int boo) {
    def names = new ArrayList<String>()
    foo = null
    <caret>testMethod(names, boo, name, foo)
    names
}

private static testMethod(ArrayList<String> names, int boo, String name, foo) {
    println(names.toString() + boo + name)
    println(names + foo)
}