|
@@ -1,126 +0,0 @@
|
|
|
-package aspectj
|
|
|
-
|
|
|
-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.*
|
|
|
-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
|
|
|
-import org.gradle.plugins.ide.eclipse.model.BuildCommand
|
|
|
-import org.gradle.plugins.ide.eclipse.model.ProjectDependency
|
|
|
-
|
|
|
-/**
|
|
|
- *
|
|
|
- * @author Luke Taylor
|
|
|
- */
|
|
|
-class AspectJPlugin implements Plugin<Project> {
|
|
|
-
|
|
|
- void apply(Project project) {
|
|
|
- project.plugins.apply(JavaPlugin)
|
|
|
-
|
|
|
- if (project.configurations.findByName('ajtools') == null) {
|
|
|
- project.configurations.create('ajtools')
|
|
|
- project.dependencies {
|
|
|
- ajtools "org.aspectj:aspectjtools"
|
|
|
- optional "org.aspectj:aspectjrt"
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (project.configurations.findByName('aspectpath') == null) {
|
|
|
- project.configurations.create('aspectpath')
|
|
|
- }
|
|
|
-
|
|
|
- project.afterEvaluate {
|
|
|
- setupAspectJ(project)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- void setupAspectJ(Project project) {
|
|
|
- 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.findAll {it.value != null})
|
|
|
-
|
|
|
- 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.setActions Arrays.asList()
|
|
|
- javaCompileTask.dependsOn ajCompileTask
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- project.tasks.withType(GenerateEclipseProject) {
|
|
|
- project.eclipse.project.file.whenMerged { p ->
|
|
|
- p.natures.add(0, 'org.eclipse.ajdt.ui.ajnature')
|
|
|
- p.buildCommands = [new BuildCommand('org.eclipse.ajdt.core.ajbuilder')]
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- project.tasks.withType(GenerateEclipseClasspath) {
|
|
|
- project.eclipse.classpath.file.whenMerged { classpath ->
|
|
|
- def entries = classpath.entries.findAll { it instanceof ProjectDependency}.findAll { entry ->
|
|
|
- def projectPath = entry.path.replaceAll('/','')
|
|
|
- project.rootProject.allprojects.find{ p->
|
|
|
- if(p.plugins.findPlugin(EclipsePlugin)) {
|
|
|
- return p.eclipse.project.name == projectPath && p.plugins.findPlugin(AspectJPlugin)
|
|
|
- }
|
|
|
- false
|
|
|
- }
|
|
|
- }
|
|
|
- entries.each { entry->
|
|
|
- entry.entryAttributes.put('org.eclipse.ajdt.aspectpath','org.eclipse.ajdt.aspectpath')
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-class Ajc extends DefaultTask {
|
|
|
- Set<File> sourceRoots = []
|
|
|
- FileCollection compileClasspath
|
|
|
- File destinationDir
|
|
|
- FileCollection aspectPath
|
|
|
-
|
|
|
- Ajc() {
|
|
|
- logging.captureStandardOutput(LogLevel.INFO)
|
|
|
- }
|
|
|
-
|
|
|
- @TaskAction
|
|
|
- def compile() {
|
|
|
- logger.info("="*30)
|
|
|
- logger.info("="*30)
|
|
|
- logger.info("Running ajc ...")
|
|
|
- logger.info("classpath: ${compileClasspath?.files}")
|
|
|
- logger.info("srcDirs ${sourceRoots}")
|
|
|
- ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: project.configurations.ajtools.asPath)
|
|
|
- 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 {
|
|
|
- sourceRoots.each {
|
|
|
- logger.info(" sourceRoot $it")
|
|
|
- pathelement(location: it.absolutePath)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|