Skip to content

Instantly share code, notes, and snippets.

@mike-neck
Last active December 14, 2015 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mike-neck/5114818 to your computer and use it in GitHub Desktop.
Save mike-neck/5114818 to your computer and use it in GitHub Desktop.
/**
* GroovyASTTransformation の お話
*
* Annotation Based AST Transformations
*
* AST にアクセスする一つの手段が Annotation を介してアクセスする方法。
**/
/**
* 例 2 : @Delegate
**/
import groovy.transform.*
@ToString (includeNames = true)
class Order {
long orderId
String person
Date orderedAt
}
class OrderDetail {
@Delegate Order order
long detailId
String item
int price
}
def order = new Order(orderId : 100L, person : 'mike', orderedAt : Date.parse('yyyyMMdd', '20130309'))
def list = [
[id : 1L, item : '風邪薬', price : 670],
[id : 2L, item : '頭痛薬', price : 1200],
[id : 3L, item : 'ウナコーワ', price : 380]
].collect {entry ->
new OrderDetail (order : order, detailId : entry.id, item : entry.item, price : entry.price)
}
list.eachWithIndex {entry, indx ->
println "${indx}, ${entry.person}, ${entry.item}, ${entry.price}, ${entry.orderedAt.format('yyyy-MM-dd')}"
}
list[0].person = 'mike_neck'
list.eachWithIndex {entry, indx ->
println "${indx}, ${entry.person}, ${entry.item}, ${entry.price}, ${entry.orderedAt.format('yyyy-MM-dd')}"
}
println order
0, mike, 風邪薬, 670, 2013-03-09
1, mike, 頭痛薬, 1200, 2013-03-09
2, mike, ウナコーワ, 380, 2013-03-09
0, mike_neck, 風邪薬, 670, 2013-03-09
1, mike_neck, 頭痛薬, 1200, 2013-03-09
2, mike_neck, ウナコーワ, 380, 2013-03-09
Order(orderId:100, person:mike_neck, orderedAt:Sat Mar 09 00:00:00 JST 2013)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment