package net.bytebuddy.build.gradle; import org.gradle.api.Action; import org.gradle.api.Project; import org.gradle.api.tasks.compile.AbstractCompile; /** * A compilation action that applies a class file transformation after a compilation task. */ public class PostCompilationAction implements Action<AbstractCompile> { /** * The current project. */ private final Project project; /** * The Byte Buddy extension of this build. */ private final ByteBuddyExtension byteBuddyExtension; /** * Createsa a new post compilation action. * * @param project The current project. * @param byteBuddyExtension The Byte Buddy extension of this build. */ protected PostCompilationAction(Project project, ByteBuddyExtension byteBuddyExtension) { this.project = project; this.byteBuddyExtension = byteBuddyExtension; } /** * Creates a post compilation action. * * @param project The project to apply the action upon. * @return An appropriate action. */ public static Action<AbstractCompile> of(Project project) { return new PostCompilationAction(project, project.getExtensions().create("byteBuddy", ByteBuddyExtension.class, project)); } @Override public void execute(AbstractCompile task) { if (byteBuddyExtension.implies(task)) { task.doLast(new TransformationAction(project, byteBuddyExtension, task)); } else { project.getLogger().info("Skipping non-specified task {}", task.getName()); } } }