diff --git a/buildSrc/src/main/groovy/aspectj/AspectJPlugin.groovy b/buildSrc/src/main/groovy/aspectj/AspectJPlugin.groovy index 18f7d0071d..fa61e5faad 100644 --- a/buildSrc/src/main/groovy/aspectj/AspectJPlugin.groovy +++ b/buildSrc/src/main/groovy/aspectj/AspectJPlugin.groovy @@ -4,12 +4,13 @@ import org.gradle.api.Project import org.gradle.api.Plugin import org.gradle.api.tasks.TaskAction import org.gradle.api.logging.LogLevel -import org.gradle.api.file.FileCollection +import org.gradle.api.file.* import org.gradle.api.tasks.SourceSet import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.tasks.compile.JavaCompile import org.gradle.plugins.ide.eclipse.GenerateEclipseProject import org.gradle.plugins.ide.eclipse.GenerateEclipseClasspath import org.gradle.plugins.ide.eclipse.EclipsePlugin @@ -41,28 +42,25 @@ class AspectJPlugin implements Plugin { project.configurations.create('aspectpath') } - project.tasks.create(name: 'compileAspect', overwrite: true, description: 'Compiles AspectJ Source', type: Ajc) { - dependsOn project.configurations*.getTaskDependencyFromProjectDependency(true, "compileJava") + project.tasks.withType(JavaCompile) { javaCompileTask -> + def javaCompileTaskName = javaCompileTask.name + def ajCompileTask = project.tasks.create(name: javaCompileTaskName + 'Aspect', overwrite: true, description: 'Compiles AspectJ Source', type: Ajc) { + inputs.files(javaCompileTask.inputs.files) + inputs.properties(javaCompileTask.inputs.properties) + + sourceRoots.addAll(project.sourceSets.main.java.srcDirs) + if(javaCompileTaskName.contains("Test")) { + sourceRoots.addAll(project.sourceSets.test.java.srcDirs) + } + compileClasspath = javaCompileTask.classpath + destinationDir = javaCompileTask.destinationDir + aspectPath = project.configurations.aspectpath + } + + javaCompileTask.deleteAllActions() + javaCompileTask.dependsOn ajCompileTask - dependsOn project.processResources - sourceSet = project.sourceSets.main - inputs.files(sourceSet.allSource) - outputs.dir(sourceSet.output.classesDir) - aspectPath = project.configurations.aspectpath } - project.tasks.compileJava.deleteAllActions() - project.tasks.compileJava.dependsOn project.tasks.compileAspect - - - project.tasks.create(name: 'compileTestAspect', overwrite: true, description: 'Compiles AspectJ Test Source', type: Ajc) { - dependsOn project.processTestResources, project.compileJava, project.jar - sourceSet = project.sourceSets.test - inputs.files(sourceSet.allSource) - outputs.dir(sourceSet.output.classesDir) - aspectPath = project.files(project.configurations.aspectpath, project.jar.archivePath) - } - project.tasks.compileTestJava.deleteAllActions() - project.tasks.compileTestJava.dependsOn project.tasks.compileTestAspect project.tasks.withType(GenerateEclipseProject) { project.eclipse.project.file.whenMerged { p -> @@ -91,7 +89,9 @@ class AspectJPlugin implements Plugin { } class Ajc extends DefaultTask { - SourceSet sourceSet + Set sourceRoots = [] + FileCollection compileClasspath + File destinationDir FileCollection aspectPath Ajc() { @@ -103,15 +103,18 @@ class Ajc extends DefaultTask { logger.info("="*30) logger.info("="*30) logger.info("Running ajc ...") - logger.info("classpath: ${sourceSet.compileClasspath.asPath}") - logger.info("srcDirs $sourceSet.java.srcDirs") + logger.info("classpath: ${compileClasspath?.files}") + logger.info("srcDirs ${sourceRoots}") 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.output.classesDir.absolutePath, + if(sourceRoots.empty) { + return + } + ant.iajc(classpath: compileClasspath.asPath, fork: 'true', destDir: destinationDir.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 { + sourceRoots.each { logger.info(" sourceRoot $it") pathelement(location: it.absolutePath) }