GDSL Awesomeness – Defining methods in a closure passed to method of particular name

24 / Sep / 2012 by Kushal Likhi 0 comments

hi,

 

Sometimes we need to add specific methods in the closures which are passed to methods with a particular name. This can be simply done as follows

 

Suppose we need to add the method named “setHeaders(Map headers)” in all closures passed to method with name “withREST”

//Get the context for all closures
def ctx = context(scope: closureScope())
 
contributor(ctx, {
    //See if closure is called within method "withREST"
    def call = enclosingCall("withREST") 
    if (call) {
        method name: "setHeaders", type: "void", params: [headers: Map]
    }
})

 

Read Further in the “GDSL AWESOMENESS” Series

  1. GDSL Awesomeness – Introduction to GDSL in IntelliJ Idea
  2. GDSL Awesomeness – Understanding Context And Contributors in Detail
  3. GDSL Awesomeness – Defining dynamic property in a class
  4. GDSL Awesomeness – Defining dynamic method in a class
  5. GDSL Awesomeness – Adding Hinting for missingMethod implementation
  6. GDSL Awesomeness – Setting a global context
  7. GDSL Awesomeness – Delegating Closure Calls
  8. GDSL Awesomeness – Defining methods in a closure passed to method of particular name
  9. GDSL Awesomeness – Defining Properties in a closure passed to method of particular name
  10. GDSL Awesomeness – Contributing to classes which match a path/name pattern
  11. GDSL Awesomeness – contributing methods with current class return types or parameters
  12. GDSL Awesomeness – AutoComplete Script for grails-Mail-Plugin “sendMail” closure
  13. GDSL Awesomeness – Getting Code of a method or Field in GDSL Script
  14. GDSL Awesomeness – Advanced Example showing domain properties implementation

 

 

Hope It Helped.
Kushal Likhi

FOUND THIS USEFUL? SHARE IT

Leave a comment -