Adding a caching functionality around methods
We have already encountered AST transformations in Chapter 3, Using Groovy Language Features, in the form of out-of-the-box annotations available in Groovy. In this recipe, we will show how to create a brand-new AST transformation to apply to your code.
But first, we'll see some theory as this is required before you dive into AST transformations. An AST transformation is a clever mechanism to modify the bytecode generation at compile time, hence the association with the broader term compile-time metaprogramming.
By modifying the bytecode, we can augment our code with additional features that are added transparently during compilation time; for example, adding getters and setters to a class.
In Java and other languages, it is relatively easy to generate source code, think of domain entity classes generated out of database tables.
But, compile-time metaprogramming goes to the next level and directly generates bytecode that is loaded directly into the...