@@ -2,7 +2,6 @@ package com.diffplug.atplug.tooling.gradle
22
33import com.diffplug.atplug.tooling.PlugParser
44import java.io.File
5- import java.nio.charset.StandardCharsets
65import org.gradle.api.DefaultTask
76import org.gradle.api.file.ConfigurableFileCollection
87import org.gradle.api.file.DirectoryProperty
@@ -20,7 +19,7 @@ abstract class FindPlugsTask : DefaultTask() {
2019 @get:InputFiles
2120 abstract val classesFolders: ConfigurableFileCollection
2221
23- /* * Directory where we will store discovered plugs in .txt files, etc . */
22+ /* * Directory where we will store discovered plugs. */
2423 @get:OutputDirectory abstract val discoveredPlugsDir: DirectoryProperty
2524
2625 @TaskAction
@@ -34,6 +33,7 @@ abstract class FindPlugsTask : DefaultTask() {
3433 discoveredPlugsDir.get().asFile.mkdirs()
3534
3635 // For each changed file in classesFolders, determine if it has @Plug
36+ val parser = PlugParser ()
3737 for (change in inputChanges.getFileChanges(classesFolders)) {
3838 if (! change.file.name.endsWith(" .class" )) {
3939 continue
@@ -45,21 +45,26 @@ abstract class FindPlugsTask : DefaultTask() {
4545 }
4646 ChangeType .ADDED ,
4747 ChangeType .MODIFIED -> {
48- parseAndWriteMetadata(change.file)
48+ parseAndWriteMetadata(parser, change.file)
4949 }
5050 }
5151 }
5252 }
5353
54- private fun parseAndWriteMetadata (classFile : File ) {
55- val parser = PlugParser ()
56- parser.parse(classFile)
57- if (parser.hasPlug()) {
54+ private fun parseAndWriteMetadata (parser : PlugParser , classFile : File ) {
55+ val plugToSocket = parser.parse(classFile)
56+ if (plugToSocket != null ) {
5857 // For example: write a single line containing the discovered plug FQN
59- val discoveredFile = discoveredPlugsDir.file(parser.plugClassName + " .txt" ).get().asFile
60- discoveredFile.parentFile.mkdirs()
61- discoveredFile.writeText(
62- parser.plugClassName!! + " |" + parser.socketClassName!! , StandardCharsets .UTF_8 )
58+ val discoveredFile = discoveredPlugsDir.file(classFile.nameWithoutExtension).get().asFile
59+ if (discoveredFile.exists()) {
60+ val existing = discoveredFile.readText().split(" |" )
61+ check(existing[0 ] == plugToSocket.first) {
62+ " You need to rename one of these plugs because they have the same classfile name: ${existing[0 ]} and $plugToSocket "
63+ }
64+ } else {
65+ discoveredFile.parentFile.mkdirs()
66+ }
67+ discoveredFile.writeText(plugToSocket.let { " ${it.first} |${it.second} " })
6368 } else {
6469 // If previously discovered, remove it
6570 removeOldMetadata(classFile)
@@ -68,7 +73,7 @@ abstract class FindPlugsTask : DefaultTask() {
6873
6974 private fun removeOldMetadata (classFile : File ) {
7075 // Remove any discovered file for the old .class
71- val possibleName = classFile.nameWithoutExtension + " .txt "
76+ val possibleName = classFile.nameWithoutExtension
7277 val discoveredFile = discoveredPlugsDir.file(possibleName).get().asFile
7378 if (discoveredFile.exists()) {
7479 discoveredFile.delete()
0 commit comments