diff --git a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy index 7c6ac63..b72a130 100644 --- a/src/main/groovy/org/scoverage/ScoveragePlugin.groovy +++ b/src/main/groovy/org/scoverage/ScoveragePlugin.groovy @@ -10,6 +10,7 @@ import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.scala.ScalaCompile import java.nio.file.Files +import java.util.concurrent.ConcurrentHashMap import static groovy.io.FileType.FILES @@ -23,6 +24,9 @@ class ScoveragePlugin implements Plugin { static final String DEFAULT_REPORT_DIR = 'reports' + File.separatorChar + 'scoverage' + private volatile File pluginFile = null + private final ConcurrentHashMap> taskDependencies = new ConcurrentHashMap<>(); + @Override void apply(PluginAware pluginAware) { if (pluginAware instanceof Project) { @@ -174,9 +178,12 @@ class ScoveragePlugin implements Plugin { } compileTask.configure { - File pluginFile = project.configurations[CONFIGURATION_NAME].find { - it.name.startsWith("scalac-scoverage-plugin") + if (pluginFile == null) { + pluginFile = project.configurations[CONFIGURATION_NAME].find { + it.name.startsWith("scalac-scoverage-plugin") + } } + List parameters = ['-Xplugin:' + pluginFile.absolutePath] List existingParameters = scalaCompileOptions.additionalParameters if (existingParameters) { @@ -269,9 +276,15 @@ class ScoveragePlugin implements Plugin { } private Set recursiveDependenciesOf(Task task) { + if (!taskDependencies.containsKey(task)) { + def directDependencies = task.getTaskDependencies().getDependencies(task) + def nestedDependencies = directDependencies.collect {recursiveDependenciesOf(it) }.flatten() + def dependencies = directDependencies + nestedDependencies - def directDependencies = task.getTaskDependencies().getDependencies(task) - def nestedDependencies = directDependencies.collect {recursiveDependenciesOf(it) }.flatten() - return directDependencies + nestedDependencies + taskDependencies.put(task, dependencies) + return dependencies + } else { + return taskDependencies.get(task) + } } } \ No newline at end of file