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:
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. def site = new Inet('http://www.mrhaki.com/') assert site.text '''
Code written with Groovy 2.2.2.