{"id":8447,"date":"2012-09-24T23:38:40","date_gmt":"2012-09-24T18:08:40","guid":{"rendered":"https:\/\/2thenew.online\/blog\/?p=8447"},"modified":"2012-09-25T02:19:36","modified_gmt":"2012-09-24T20:49:36","slug":"gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters","status":"publish","type":"post","link":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/","title":{"rendered":"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters"},"content":{"rendered":"<p>Hi,<\/p>\n<p>&nbsp;<\/p>\n<p>Sometimes we need to contribute dynamically using current target class type.<\/p>\n<p>&nbsp;<\/p>\n<p>Lets take the example of <strong>.get() and .list()<\/strong> methods of Grails domain class.<br \/>\nThe signature of each method is as follows:<\/p>\n<ul>\n<li><strong>public &lt;DomainClassType&gt; get(Long id)<\/strong> , Example: DemoClass.get(1) will return an object of &#8220;DemoClass&#8221;<\/li>\n<li><strong>public List&lt;DomainClassType&gt; list()<\/strong><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>The GDSL Script for the above example will be as follows:<br \/>\n[java]<br \/>\nimport com.intellij.patterns.PsiJavaPatterns<br \/>\nimport com.intellij.patterns.PlatformPatterns<\/p>\n<p>\/\/get the context of all files, and enable path matching. Note: Don&#8217;t change anything in context here.<br \/>\ndef ctx = context(<br \/>\n        ctype: PsiJavaPatterns.psiClass().withName(PlatformPatterns.string().matches(\/.*\/))<br \/>\n)  <\/p>\n<p>contributor(ctx) {<br \/>\n    def path = &quot;&quot;<br \/>\n    try {<br \/>\n        path = psiClass.containingFile.originalFile.virtualFile.path<br \/>\n    } catch (Exception e) {<br \/>\n    }<\/p>\n<p>    \/\/Check for Path pattern here<br \/>\n    if (path =~ &quot;.*\/*grails-app\/domain\/.*&quot;) {<br \/>\n    \/\/Contribute to matching classes here.<br \/>\n        method(name: &#8216;get&#8217;, type: psiClass.qualifiedName, params: [id: Long])<br \/>\n        method(name: &#8216;list&#8217;, type: &quot;List&lt;${psiClass.qualifiedName}&gt;&quot;)<br \/>\n    }<br \/>\n}<br \/>\n[\/java]<\/p>\n<p>&nbsp;<\/p>\n<h1>Read Further in the &#8220;GDSL AWESOMENESS&#8221; Series<\/h1>\n<ol>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-introduction-to-gdsl-in-intellij-idea\">GDSL Awesomeness &#8211; Introduction to GDSL in IntelliJ Idea<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-understanding-context-and-contributors-in-detail\">GDSL Awesomeness &#8211; Understanding Context And Contributors in Detail<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-defining-dynamic-properties-in-a-class\">GDSL Awesomeness &#8211; Defining dynamic property in a class<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-defining-dynamic-method-in-a-class\">GDSL Awesomeness &#8211; Defining dynamic method in a class<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-adding-hinting-for-missingmethod-implementation\">GDSL Awesomeness &#8211; Adding Hinting for missingMethod implementation<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-setting-a-global-context\">GDSL Awesomeness &#8211; Setting a global context<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-delegating-closure-calls\">GDSL Awesomeness &#8211; Delegating Closure Calls<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-defining-methods-in-a-closure-passed-to-method-of-particular-name\">GDSL Awesomeness &#8211; Defining methods in a closure passed to method of particular name<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-defining-properties-in-a-closure-passed-to-method-of-particular-name\">GDSL Awesomeness &#8211; Defining Properties in a closure passed to method of particular name<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-to-classes-which-match-a-pathname-pattern\">GDSL Awesomeness &#8211; Contributing to classes which match a path\/name pattern<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\">GDSL Awesomeness &#8211; contributing methods with current class return types or parameters<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-autocomplete-script-for-grails-mail-plugin-sendmail-closure\">GDSL Awesomeness &#8211; AutoComplete Script for grails-Mail-Plugin &#8220;sendMail&#8221; closure<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-getting-code-of-a-method-or-field-in-gdsl-script\">GDSL Awesomeness &#8211; Getting Code of a method or Field in GDSL Script<\/a><\/li>\n<li><a href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-advanced-example-showing-domain-properties-implementation\">GDSL Awesomeness &#8211; Advanced Example showing domain properties implementation<\/a><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Hope It Helped.<br \/>\n<b>Kushal Likhi<\/b><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi, &nbsp; Sometimes we need to contribute dynamically using current target class type. &nbsp; Lets take the example of .get() and .list() methods of Grails domain class. The signature of each method is as follows: public &lt;DomainClassType&gt; get(Long id) , Example: DemoClass.get(1) will return an object of &#8220;DemoClass&#8221; public List&lt;DomainClassType&gt; list() &nbsp; The GDSL Script [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":19,"footnotes":""},"categories":[7],"tags":[1057,9,692,691,1059,1060,1058],"class_list":["post-8447","post","type-post","status-publish","format-standard","hentry","category-grails","tag-gdsl","tag-groovy","tag-intellij","tag-intellij-idea","tag-program-syntax-interface","tag-psi","tag-syntax-highlighting"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"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 get(Long id) , Example: DemoClass.get(1) will return an object of &quot;DemoClass&quot; public List list() The GDSL Script\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Kushal Likhi\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"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 get(Long id) , Example: DemoClass.get(1) will return an object of &quot;DemoClass&quot; public List list() The GDSL Script\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"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 get(Long id) , Example: DemoClass.get(1) will return an object of &quot;DemoClass&quot; public List list() The GDSL Script\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#article\",\"name\":\"GDSL Awesomeness \\u2013 contributing methods with current class return types or parameters | TO THE NEW Blog\",\"headline\":\"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/kushal\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2012-09-24T23:38:40+05:30\",\"dateModified\":\"2012-09-25T02:19:36+05:30\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#webpage\"},\"articleSection\":\"Grails, GDSL, Groovy, Intellij, Intellij Idea, Program syntax Interface, PSI, syntax-highlighting\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#listItem\",\"name\":\"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#listItem\",\"position\":3,\"name\":\"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/kushal\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/kushal\\\/\",\"name\":\"Kushal Likhi\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9311812a092d64f47eb30d7ad28378cfae924a0cac140ffbb686fcd8a565a57e?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Kushal Likhi\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/\",\"name\":\"GDSL Awesomeness \\u2013 contributing methods with current class return types or parameters | TO THE NEW Blog\",\"description\":\"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 get(Long id) , Example: DemoClass.get(1) will return an object of \\\"DemoClass\\\" public List list() The GDSL Script\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/kushal\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/kushal\\\/#author\"},\"datePublished\":\"2012-09-24T23:38:40+05:30\",\"dateModified\":\"2012-09-25T02:19:36+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog","description":"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 get(Long id) , Example: DemoClass.get(1) will return an object of \"DemoClass\" public List list() The GDSL Script","canonical_url":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#article","name":"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog","headline":"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters","author":{"@id":"https:\/\/2thenew.online\/blog\/author\/kushal\/#author"},"publisher":{"@id":"https:\/\/2thenew.online\/blog\/#organization"},"datePublished":"2012-09-24T23:38:40+05:30","dateModified":"2012-09-25T02:19:36+05:30","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#webpage"},"articleSection":"Grails, GDSL, Groovy, Intellij, Intellij Idea, Program syntax Interface, PSI, syntax-highlighting"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.online\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/2thenew.online\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#listItem","name":"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#listItem","position":3,"name":"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.online\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.online\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.online\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.online\/blog\/author\/kushal\/#author","url":"https:\/\/2thenew.online\/blog\/author\/kushal\/","name":"Kushal Likhi","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/9311812a092d64f47eb30d7ad28378cfae924a0cac140ffbb686fcd8a565a57e?s=96&d=mm&r=g","width":96,"height":96,"caption":"Kushal Likhi"}},{"@type":"WebPage","@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#webpage","url":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/","name":"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog","description":"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 get(Long id) , Example: DemoClass.get(1) will return an object of \"DemoClass\" public List list() The GDSL Script","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.online\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.online\/blog\/author\/kushal\/#author"},"creator":{"@id":"https:\/\/2thenew.online\/blog\/author\/kushal\/#author"},"datePublished":"2012-09-24T23:38:40+05:30","dateModified":"2012-09-25T02:19:36+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.online\/blog\/#website","url":"https:\/\/2thenew.online\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.online\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog","og:description":"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 get(Long id) , Example: DemoClass.get(1) will return an object of &quot;DemoClass&quot; public List list() The GDSL Script","og:url":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/","og:image":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"GDSL Awesomeness \u2013 contributing methods with current class return types or parameters | TO THE NEW Blog","twitter:description":"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 get(Long id) , Example: DemoClass.get(1) will return an object of &quot;DemoClass&quot; public List list() The GDSL Script","twitter:image":"https:\/\/2thenew.online\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"8447","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-30 08:09:00","updated":"2024-02-29 10:53:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.online\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.online\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGDSL Awesomeness \u2013 contributing methods with current class return types or parameters\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.online\/blog"},{"label":"Grails","link":"https:\/\/2thenew.online\/blog\/category\/grails\/"},{"label":"GDSL Awesomeness &#8211; contributing methods with current class return types or parameters","link":"https:\/\/2thenew.online\/blog\/gdsl-awesomeness-contributing-methods-with-current-class-return-types-or-parameters\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts\/8447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/comments?post=8447"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/posts\/8447\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/media?parent=8447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/categories?post=8447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.online\/blog\/wp-json\/wp\/v2\/tags?post=8447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}