GPath周りで壮絶にはまり中 (´・ω・`)

んーーー???
なんかもの凄い初歩的な所で詰まってる気がしつつ・・・
Groovyイン・アクションの 7.5.1 の GPath 周りというか例に挙がってるプログラムではまりちゅう・・・

class Invoice {
  List items
  Date date
}

class LineItem {
  Product product
  int count
  int total () {
    return product.dollar * count
  }
}

class Product {
  String name
  def dollar
}

def ulcDate = new Date(107, 0, 1)
def ulc = new Product (dollar:1499, name:'ULC')
def ve = new Product (dollar:499, name:'Visual Editor')
def invoices = [
  new Invoice (date:ulcDate, items: [
          new LineItem (count:5, product:ulc),
          new LineItem (count:1, product:ve)
  ]),
  new Invoice(date:[107, 0, 2], items: [
          new LineItem(count:4, product:ve)
  ])
]

assert [5*1499, 499, 4*499] == invoices.items.flatten()*.total()

なんでコレが動くんだ。。。 (´・ω・`)
invoices はここだと List なわけで、そいつには items なんて言うフィールドはついてない。
assert の下で

println invoices.class.name
println invoices.items
println invoices.items.flatten()

してやると

java.util.ArrayList
[[LineItem@43ece626, LineItem@75f9eba0], [LineItem@6adc91e2]]
[LineItem@43ece626, LineItem@75f9eba0, LineItem@6adc91e2]

こんな感じだし。。。
んで、もしかして?と思って

def list = [[1,2],3]
println list.items

ってやってみたら

Caught: groovy.lang.MissingPropertyException: Exception evaluating property 'items' for java.util.ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: items for class: java.lang.Integer

って怒られるし。
でも、エラーメッセージみると ArrayList に対して items の評価しに行ってるんじゃなくて、list に格納されてる各要素(ここだと Integer)に評価しにいってるっぽいんだよなぁ・・・


Collection 型に対して解決出来ないメッセージ送ると、その内部要素に処理が委譲される??
といった所で朝の自由時間終了 (´・ω・`)