Статьи

Groovy Goodness: определить настройщики компиляции с помощью синтаксиса Builder

Начиная с Groovy 2.1 мы можем использовать хороший синтаксис компоновщика для определения настройщиков для экземпляра CompileConfiguration . Мы должны использовать статический метод withConfig класса CompilerCustomizationBuilder в пакете org.codehaus.groovy.control.customizers.builder . Мы передаем замыкание с кодом для определения и регистрации настройщиков. Для всех различных настройщиков, таких как ImportCustomizer , SecureASTCustomizers и ASTTransformationCustomizer существует приятный компактный синтаксис.

В следующем примере мы используем этот синтаксис компоновщика для определения различных настройщиков для экземпляра CompileConfiguration :

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

Код написанный с Groovy 2.2.2.

Ссылка: Groovy Goodness: определите настройщики компиляции с помощью синтаксиса Builder от нашего партнера по JCG Хьюберта Иккинка в блоге JDriven .