|
|
|
|
@ -1,126 +0,0 @@
@@ -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) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |