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:
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.