apply plugin: 'java'

configurations {
    ajtools
    aspectpath
}

dependencies {
    ajtools "org.aspectj:aspectjtools:$aspectjVersion"
    compile "org.aspectj:aspectjrt:$aspectjVersion"
}

task compileJava(overwrite: true, description: 'Compiles AspectJ Source', type: Ajc) {
    dependsOn processResources
    sourceSet = sourceSets.main
    outputs.dir(sourceSet.classesDir)
    aspectPath = configurations.aspectpath
}

task compileTestJava(overwrite: true, description: 'Compiles AspectJ Test Source', type: Ajc) {
    dependsOn processTestResources, compileJava, jar
    sourceSet = sourceSets.test
    outputs.dir(sourceSet.classesDir)
    aspectPath = files(configurations.aspectpath, jar.archivePath)
}

class Ajc extends DefaultTask {
    SourceSet sourceSet
    FileCollection aspectPath

    Ajc() {
        logging.captureStandardOutput(LogLevel.INFO)
    }

    @TaskAction
    def compile() {
        println "Running ajc ..."
        ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: project.configurations.ajtools.asPath)
        ant.iajc(classpath: sourceSet.compileClasspath.asPath, fork: 'true', destDir: sourceSet.classesDir.absolutePath,
                source: project.convention.plugins.java.sourceCompatibility,
                target: project.convention.plugins.java.targetCompatibility,
                aspectPath: aspectPath.asPath, sourceRootCopyFilter: '**/*.java', showWeaveInfo: 'true') {
            sourceroots {
                sourceSet.java.srcDirs.each {
                    pathelement(location: it.absolutePath)
                }
            }
        }
    }
}
