|
Groovy example source code file (LoggingASTTransformation.groovy)
The Groovy LoggingASTTransformation.groovy source codepackage transforms.global import org.codehaus.groovy.transform.ASTTransformation import org.codehaus.groovy.ast.ASTNode import org.codehaus.groovy.control.SourceUnit import org.codehaus.groovy.transform.GroovyASTTransformation import org.codehaus.groovy.control.CompilePhase import org.codehaus.groovy.ast.MethodNode import org.codehaus.groovy.ast.AnnotationNode import org.codehaus.groovy.ast.expr.ConstantExpression import org.codehaus.groovy.ast.expr.MethodCallExpression import org.codehaus.groovy.ast.expr.VariableExpression import org.codehaus.groovy.ast.expr.ArgumentListExpression import org.codehaus.groovy.ast.stmt.BlockStatement import java.lang.annotation.Annotation import org.codehaus.groovy.ast.expr.Expression import org.codehaus.groovy.ast.stmt.Statement import org.codehaus.groovy.ast.stmt.ExpressionStatement /** * This ASTTransformation adds a start and stop message to every single method call. * * @author Hamlet D'Arcy */ @GroovyASTTransformation(phase=CompilePhase.CONVERSION) public class LoggingASTTransformation implements ASTTransformation { public void visit(ASTNode[] astNodes, SourceUnit sourceUnit) { List methods = sourceUnit.getAST()?.getMethods() methods?.each { MethodNode method -> Statement startMessage = createPrintlnAst("Starting $method.name") Statement endMessage = createPrintlnAst("Ending $method.name") List existingStatements = method.getCode().getStatements() existingStatements.add(0, startMessage) existingStatements.add(endMessage) } } /** * Creates the AST for a println invocation. */ private Statement createPrintlnAst(String message) { return new ExpressionStatement( new MethodCallExpression( new VariableExpression("this"), new ConstantExpression("println"), new ArgumentListExpression( new ConstantExpression(message) ) ) ) } } Other Groovy examples (source code examples)Here is a short list of links related to this Groovy LoggingASTTransformation.groovy source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.