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:
1 2 3 4 5 6 7 8 9 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 | 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.