1 package dagger.hilt.android.plugin.util
2 
3 import org.gradle.api.artifacts.transform.CacheableTransform
4 import org.gradle.api.artifacts.transform.InputArtifact
5 import org.gradle.api.artifacts.transform.TransformAction
6 import org.gradle.api.artifacts.transform.TransformOutputs
7 import org.gradle.api.artifacts.transform.TransformParameters
8 import org.gradle.api.file.FileSystemLocation
9 import org.gradle.api.provider.Provider
10 import org.gradle.api.tasks.Classpath
11 
12 // A transform that registers the input jar file as an output and thus changing from one artifact
13 // type to another.
14 // TODO: Improve to only copy classes that need to be visible by Hilt & Dagger.
15 @CacheableTransform
16 abstract class CopyTransform : TransformAction<TransformParameters.None> {
17   @get:Classpath
18   @get:InputArtifact
19   abstract val inputArtifactProvider: Provider<FileSystemLocation>
20 
transformnull21   override fun transform(outputs: TransformOutputs) {
22     val input = inputArtifactProvider.get().asFile
23     when {
24       input.isDirectory -> outputs.dir(input)
25       input.isFile -> outputs.file(input)
26       else -> error("File/directory does not exist: ${input.absolutePath}")
27     }
28   }
29 }
30