Groovy
Groovy Goodness: Define Compilation Customizers With Builder Syntax
Since Groovy 2.1 we can use a nice builder syntax to define customizers for a CompileConfiguration
instance. We must use the static withConfig
method of the class CompilerCustomizationBuilder
in the package org.codehaus.groovy.control.customizers.builder
. We pass a closure with the code to define and register the customizers. For all the different customizers like ImportCustomizer
, SecureASTCustomizers
and ASTTransformationCustomizer
there is a nice compact syntax.
In the following sample we use this builder syntax to define different customizers for a CompileConfiguration
instance:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package com.mrhaki.blog import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer import org.codehaus.groovy.control.CompilerConfiguration import org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder import groovy.transform.* def conf = new CompilerConfiguration() // Define CompilerConfiguration using // builder syntax. CompilerCustomizationBuilder.withConfig(conf) { ast(TupleConstructor) ast(ToString, includeNames: true , includePackage: false ) imports { alias 'Inet' , 'java.net.URL' } secureAst { methodDefinitionAllowed = false } } def shell = new GroovyShell(conf) shell.evaluate '' ' package com.mrhaki.blog class User { String username, fullname } // TupleConstructor is added. def user = new User( 'mrhaki' , 'Hubert A. Klein Ikkink' ) // toString() added by ToString transformation. assert user.toString() == 'User(username:mrhaki, fullname:Hubert A. Klein Ikkink)' // Use alias import. assert site.text '' ' |
Code written with Groovy 2.2.2.
Reference: | Groovy Goodness: Define Compilation Customizers With Builder Syntax from our JCG partner Hubert Ikkink at the JDriven blog. |