GDSL Awesomeness – contributing methods with current class return types or parameters
Hi,
Sometimes we need to contribute dynamically using current target class type.
Lets take the example of .get() and .list() methods of Grails domain class.
The signature of each method is as follows:
- public <DomainClassType> get(Long id) , Example: DemoClass.get(1) will return an object of “DemoClass”
- public List<DomainClassType> list()
The GDSL Script for the above example will be as follows:
[java]
import com.intellij.patterns.PsiJavaPatterns
import com.intellij.patterns.PlatformPatterns
//get the context of all files, and enable path matching. Note: Don’t change anything in context here.
def ctx = context(
ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(/.*/))
)
contributor(ctx) {
def path = ""
try {
path = psiClass.containingFile.originalFile.virtualFile.path
} catch (Exception e) {
}
//Check for Path pattern here
if (path =~ ".*/*grails-app/domain/.*") {
//Contribute to matching classes here.
method(name: ‘get’, type: psiClass.qualifiedName, params: [id: Long])
method(name: ‘list’, type: "List<${psiClass.qualifiedName}>")
}
}
[/java]
Read Further in the “GDSL AWESOMENESS” Series
- GDSL Awesomeness – Introduction to GDSL in IntelliJ Idea
- GDSL Awesomeness – Understanding Context And Contributors in Detail
- GDSL Awesomeness – Defining dynamic property in a class
- GDSL Awesomeness – Defining dynamic method in a class
- GDSL Awesomeness – Adding Hinting for missingMethod implementation
- GDSL Awesomeness – Setting a global context
- GDSL Awesomeness – Delegating Closure Calls
- GDSL Awesomeness – Defining methods in a closure passed to method of particular name
- GDSL Awesomeness – Defining Properties in a closure passed to method of particular name
- GDSL Awesomeness – Contributing to classes which match a path/name pattern
- GDSL Awesomeness – contributing methods with current class return types or parameters
- GDSL Awesomeness – AutoComplete Script for grails-Mail-Plugin “sendMail” closure
- GDSL Awesomeness – Getting Code of a method or Field in GDSL Script
- GDSL Awesomeness – Advanced Example showing domain properties implementation
Hope It Helped.
Kushal Likhi