@@ -5,6 +5,7 @@ import java.io.File
5
5
import org.gradle.api.DefaultTask
6
6
import org.gradle.api.file.ConfigurableFileCollection
7
7
import org.gradle.api.file.DirectoryProperty
8
+ import org.gradle.api.file.FileType
8
9
import org.gradle.api.tasks.*
9
10
import org.gradle.work.*
10
11
@@ -24,35 +25,53 @@ abstract class FindPlugsTask : DefaultTask() {
24
25
25
26
@TaskAction
26
27
fun findPlugs (inputChanges : InputChanges ) {
28
+ val parser = PlugParser ()
29
+
27
30
// 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 {
29
49
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
31
61
32
- // Make sure our output directory exists
33
- discoveredPlugsDir.get().asFile.mkdirs()
62
+ override fun getChangeType (): ChangeType = ChangeType .ADDED
34
63
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
+ }
50
69
}
51
70
}
52
71
}
53
72
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 )
56
75
if (plugToSocket != null ) {
57
76
// For example: write a single line containing the discovered plug FQN
58
77
val discoveredFile = discoveredPlugsDir.file(normalizePath(change)).get().asFile
0 commit comments