blob: 509fef92b5cdad570dccc6e0ba213b445fdaef34 [file] [log] [blame]
package aspectj
import org.gradle.api.DefaultTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.logging.LogLevel
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskAction
class AspectJPlugin implements Plugin<Project> {
void apply(Project project) {
project.plugins.apply(JavaPlugin)
for (projectSourceSet in project.sourceSets) {
if (!projectSourceSet.allJava.isEmpty()) {
def aspectTaskName = "compileAspect"
def javaTaskName = "compileJava"
def configurationName = "aspectpath"
if (!projectSourceSet.name.equals('main')) {
aspectTaskName = "compile${projectSourceSet.name.capitalize()}Aspect"
javaTaskName = "compile${projectSourceSet.name.capitalize()}Java"
configurationName = "${projectSourceSet.name}Aspectpath"
}
project.tasks.create(name: aspectTaskName, overwrite: true, description: "Compiles AspectJ Source for ${projectSourceSet.name} source set", type: Ajc) {
sourceSet = projectSourceSet
inputs.files(sourceSet.allJava)
outputs.dir(sourceSet.output.classesDir)
aspectpath = project.configurations.findByName(configurationName)
}
project.tasks[aspectTaskName].setDependsOn(project.tasks[javaTaskName].dependsOn)
project.tasks[aspectTaskName].dependsOn(project.tasks[aspectTaskName].aspectpath)
project.tasks[javaTaskName].deleteAllActions()
project.tasks[javaTaskName].dependsOn(project.tasks[aspectTaskName])
}
}
}
}
class Ajc extends DefaultTask {
SourceSet sourceSet
FileCollection aspectpath
Ajc() {
logging.captureStandardOutput(LogLevel.INFO)
}
@TaskAction
def compile() {
def iajcArgs = [
classpath : sourceSet.compileClasspath.asPath,
destDir : sourceSet.output.classesDir.absolutePath,
source : '1.7',
target : '1.7',
aspectPath : aspectpath.asPath,
sourceRootCopyFilter: '**/*.java,**/*.aj',
showWeaveInfo : 'true',
debug : 'true',
debugLevel : 'lines,vars,source',
checkRuntimeVersion : 'false',
X : '',
]
ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: project.configurations.ajtools.asPath)
ant.iajc(iajcArgs) {
sourceRoots {
sourceSet.java.srcDirs.each {
pathelement(location: it.absolutePath)
}
}
}
}
}