@@ -5,6 +5,7 @@ import java.io.File
55import org.gradle.api.DefaultTask
66import org.gradle.api.file.ConfigurableFileCollection
77import org.gradle.api.file.DirectoryProperty
8+ import org.gradle.api.file.FileType
89import org.gradle.api.tasks.*
910import org.gradle.work.*
1011
@@ -24,35 +25,53 @@ abstract class FindPlugsTask : DefaultTask() {
2425
2526 @TaskAction
2627 fun findPlugs (inputChanges : InputChanges ) {
28+ val parser = PlugParser ()
29+
2730 // If not incremental, clear everything and rescan
28- if (! inputChanges.isIncremental) {
31+ if (inputChanges.isIncremental) {
32+ discoveredPlugsDir.get().asFile.mkdirs()
33+ for (change in inputChanges.getFileChanges(classesFolders)) {
34+ if (! change.file.name.endsWith(" .class" )) {
35+ continue
36+ }
37+ when (change.changeType) {
38+ ChangeType .REMOVED -> {
39+ // Remove old discovered data for this file
40+ removeOldMetadata(change)
41+ }
42+ ChangeType .ADDED ,
43+ ChangeType .MODIFIED -> {
44+ parseAndWriteMetadata(parser, change)
45+ }
46+ }
47+ }
48+ } else {
2949 discoveredPlugsDir.get().asFile.deleteRecursively()
30- }
50+ discoveredPlugsDir.get().asFile.mkdirs()
51+ classesFolders.files.forEach { folder ->
52+ folder
53+ .walkTopDown()
54+ .filter { it.isFile && it.name.endsWith(" .class" ) }
55+ .forEach { classFile ->
56+ val relativePath = classFile.toRelativeString(folder)
57+ parseAndWriteMetadata(
58+ parser,
59+ object : FileChange {
60+ override fun getFile (): File = classFile
3161
32- // Make sure our output directory exists
33- discoveredPlugsDir.get().asFile.mkdirs()
62+ override fun getChangeType (): ChangeType = ChangeType .ADDED
3463
35- // For each changed file in classesFolders, determine if it has @Plug
36- val parser = PlugParser ()
37- for (change in inputChanges.getFileChanges(classesFolders)) {
38- if (! change.file.name.endsWith(" .class" )) {
39- continue
40- }
41- when (change.changeType) {
42- ChangeType .REMOVED -> {
43- // Remove old discovered data for this file
44- removeOldMetadata(change)
45- }
46- ChangeType .ADDED ,
47- ChangeType .MODIFIED -> {
48- parseAndWriteMetadata(parser, change, change.file)
49- }
64+ override fun getFileType (): FileType = FileType .FILE
65+
66+ override fun getNormalizedPath (): String = relativePath
67+ })
68+ }
5069 }
5170 }
5271 }
5372
54- private fun parseAndWriteMetadata (parser : PlugParser , change : FileChange , classFile : File ) {
55- val plugToSocket = parser.parse(classFile )
73+ private fun parseAndWriteMetadata (parser : PlugParser , change : FileChange ) {
74+ val plugToSocket = parser.parse(change.file )
5675 if (plugToSocket != null ) {
5776 // For example: write a single line containing the discovered plug FQN
5877 val discoveredFile = discoveredPlugsDir.file(normalizePath(change)).get().asFile
0 commit comments