Skip to content

Instantly share code, notes, and snippets.

@luksrn
luksrn / GORM.groovy
Created April 29, 2016 00:25
GORM.groovy
def methodMissing(String methodName, Object args) {
FinderMethod method = gormDynamicFinders.find {
FinderMethod f -> f.isMethodMatch(methodName)
}
if (!method) {
throw new MissingMethodException(methodName, persistentClass, args)
}
def mc = persistentClass.getMetaClass()
@luksrn
luksrn / transform.groovy
Created April 28, 2016 23:27
transformacao-defensiv
AnnotatedNode targetClass = (AnnotatedNode) nodes[1];
if (!(targetClass instanceof ClassNode))
sourceUnit.addError(
new SyntaxException("@Logger anotado fora de uma Classe",
logAnnotation.getLineNumber(),
logAnnotation.getLastColumnNumber()));
final ClassNode classNode = (ClassNode) targetClass;
@luksrn
luksrn / Controller.groovy
Created April 28, 2016 23:26
Controller anotado
@Logger
class Controller {
}
@luksrn
luksrn / transform.groovy
Created April 28, 2016 23:25
implementacao-base-01
@Override
public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
AnnotationNode logAnnotation = (AnnotationNode) nodes[0];
ClassNode targetClass = (ClassNode) nodes[1];
final ClassNode LOGGER_CLASSNODE = ClassHelper.make(
java.util.logging.Logger.class);
classNode.addField("log",
@luksrn
luksrn / transformacao.groovy
Created April 28, 2016 23:24
transformacao base
package transformacoes;
import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;
import org.codehaus.groovy.transform.ASTTransformation;
import org.codehaus.groovy.transform.GroovyASTTransformation;
@GroovyASTTransformation(phase=CompilePhase.SEMANTIC_ANALYSIS)
public class LoggerTransformation implements ASTTransformation {
@luksrn
luksrn / anotacao.groovy
Created April 28, 2016 23:23
anotacao Logger
package transformacoes;
import ...
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE})
@GroovyASTTransformationClass("transformacoes.LoggerTransformation")
public @interface Logger {
}
@luksrn
luksrn / contollerTest.groovy
Created April 28, 2016 23:22
Controller test
@Test
public void testarTransformacaoQueIncluiAtributoLog() {
def existeCampo = Controller.declaredFields.any { it.name == 'log' }
assert existeCampo
}
@luksrn
luksrn / Controller.groovy
Created April 28, 2016 23:22
controller 03
class Controller {
}
@luksrn
luksrn / Controller.groovy
Created April 28, 2016 23:21
Controlller 02 ast c
public class Controller {
private static final Logger log = Logger.getLogger(‘Controller’)
public java.lang.Object index() {
if (log.isLoggable(Level.INFO)) {
log.info 'Entrando no Index...'
}
return null
}
}
@luksrn
luksrn / Controller01.groovy
Created April 28, 2016 23:20
Controller ast c 01
@groovy.util.logging.Log
class Controller {
def index(){
log.info "Entrando no Index..."
}
}