GDSL Awesomeness – Getting Code of a method or Field in GDSL Script

24 / Sep / 2012 by Kushal Likhi 0 comments

Hi,

 

Here i will illustrate how you can get the code of a method within GDSL Script:

 

The script is as follows:
[java]
import com.intellij.patterns.PsiJavaPatterns
import com.intellij.patterns.PlatformPatterns

def mongoContext = context(
ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*/))
)

contributor(mongoContext) {
def path = ""
try {
path = psiClass.containingFile.originalFile.virtualFile.path
} catch (Exception e) {
}
if (path =~ ".*/*grails-app/mongoDomain/.*") {

classType?.fields?.each {
if ((it.name == "belongsTo") || (it.name == "hasOne")) {
it.children.each {child ->
String cod = child.text.toString()
println code //Code printed on to console
}
}
}

}
}
[/java]

 

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 Reply

Your email address will not be published. Required fields are marked *