Skip to content

Instantly share code, notes, and snippets.

@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 / 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 / Controller.groovy
Created April 28, 2016 23:26
Controller anotado
@Logger
class Controller {
}
@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 / 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 / GrapeLogger.groovy
Created April 29, 2016 02:10
GrapeLogger.groovy
@Grapes(
@Grab(group='log4j', module='log4j', version='1.2.16')
)
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
trait Loggable {
private Log logger
Log getLog() {
if( !logger )
logger = LogFactory.getLog( this.getClass() )
@luksrn
luksrn / traitAB.groovy
Created April 29, 2016 02:11
traitAB.groovy
trait A {
String exec() { 'A' }
}
trait B {
String exec() { 'B' }
}
class C implements A,B {}
def c = new C()
println c.exec()
@luksrn
luksrn / C.groovy
Created April 29, 2016 02:12
C.groovy
class C implements A,B {
String exec() { A.super.exec() }
}
trait Controller implements ResponseRenderer,
ResponseRedirector,
RequestForwarder,
DataBinder,
WebAttributes,
ServletAttributes {
//...
}
class ComponenteCustomizado implements WebAttributes {
def meuMetodo() {
println "params: " + params
}
}