package com.taobao.easyweb.core.groovy.transformation; import com.taobao.easyweb.core.groovy.groovyobject.FileMainClass; import com.taobao.easyweb.core.groovy.GroovyEngine; import org.codehaus.groovy.ast.*; import org.codehaus.groovy.control.CompilePhase; import org.codehaus.groovy.control.SourceUnit; import org.codehaus.groovy.transform.ASTTransformation; import org.codehaus.groovy.transform.GroovyASTTransformation; import java.util.ArrayList; import java.util.List; @GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS) public class MethodTransformationInvoker extends CodeVisitorSupport implements ASTTransformation { private static List<MethodTransformation> transformations = new ArrayList<MethodTransformation>(); public static void add(MethodTransformation transformation) { transformations.add(transformation); } public void visit(ASTNode[] nodes, SourceUnit source) { FileMainClass.set(source.getName(), source.getAST().getMainClassName()); List<MethodNode> methods = source.getAST().getMethods(); if (!methods.isEmpty()) { for (MethodNode method : methods) { for (MethodTransformation transformation : transformations) { transformation.transformat(source, method, null); } } } List<ClassNode> classNodes = source.getAST().getClasses(); if (!classNodes.isEmpty()) { for (ClassNode classNode : classNodes) { if (classNode instanceof InnerClassNode) { continue; } for (MethodNode method : classNode.getMethods()) { GroovyEngine.putScriptMethod(source.getName(), method.getName(), method.getParameters().length); // for (MethodTransformation transformation : transformations) { //// transformation.transformat(source, method); // } } } } } }