44
55package com .lightbend .sbt .javaagent
66
7- import sbt ._
8- import sbt .Keys ._
7+ import sbt .*
8+ import sbt .Keys .*
9+ import xsbti .FileConverter
10+ import PluginCompat .{ * , given }
911
1012/**
1113 * Plugin for adding Java agents to projects in a general way.
@@ -17,22 +19,13 @@ object JavaAgent extends JavaAgent {
1719
1820 object JavaAgentKeys {
1921 val javaAgents = settingKey[Seq [AgentModule ]](" Java agent modules enabled for this project." )
22+
23+ @ transient
2024 val resolvedJavaAgents = taskKey[Seq [ResolvedAgent ]](" Java agent modules with resolved artifacts." )
2125 }
2226
2327 val AgentConfig = config(" javaagent" ).hide
2428
25- case class AgentScope (compile : Boolean = false , test : Boolean = false , run : Boolean = false , dist : Boolean = true )
26-
27- case class AgentModule (name : String , module : ModuleID , scope : AgentScope , arguments : String )
28-
29- case class ResolvedAgent (agent : AgentModule , artifact : File )
30-
31- object AgentModule {
32- import scala .language .implicitConversions
33- implicit def moduleToAgentModule (module : ModuleID ): AgentModule = JavaAgent (module)
34- }
35-
3629 /**
3730 * Create an agent module from a module dependency.
3831 * Scope is also derived from the given module configuration.
@@ -69,7 +62,11 @@ class JavaAgent extends AutoPlugin {
6962 Test / fork := enableFork(Test / fork, _.scope.test).value,
7063 run/ javaOptions ++= agentOptions(_.agent.scope.run).value,
7164 Test / javaOptions ++= agentOptions(_.agent.scope.test).value,
72- Test / fullClasspath := filterAgents((Test / fullClasspath).value, resolvedJavaAgents.value)
65+ Test / fullClasspath := Def .uncached {
66+ val conv = fileConverter.value
67+ implicit val conv0 : xsbti.FileConverter = conv
68+ filterAgents((Test / fullClasspath).value, resolvedJavaAgents.value)
69+ }
7370 )
7471
7572 private def resolveAgents = Def .task[Seq [ResolvedAgent ]] {
@@ -102,8 +99,9 @@ class JavaAgent extends AutoPlugin {
10299 }
103100 }
104101
105- def filterAgents (classpath : Classpath , resolvedAgents : Seq [ResolvedAgent ]): Classpath = {
102+ def filterAgents (classpath : Classpath , resolvedAgents : Seq [ResolvedAgent ])( implicit conv : FileConverter ) : Classpath = {
106103 val agents = resolvedAgents.map(resolved => resolved.artifact.absolutePath)
107- classpath.filter(aFile => ! agents.contains(aFile.data.getAbsolutePath))
104+ classpath
105+ .filter(entry => ! agents.contains(PluginCompat .toFile(entry).getAbsolutePath))
108106 }
109107}
0 commit comments