From 83d4e718c7cfeffc10af9899c56e89744f3da884 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Tue, 4 Feb 2025 11:42:11 -0800 Subject: [PATCH 1/4] Encode package information into the atplug files, which lets us simplify a little bit. --- .../atplug/tooling/gradle/FindPlugsTask.kt | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt index 3be9eda..eda899c 100644 --- a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt +++ b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt @@ -41,42 +41,36 @@ abstract class FindPlugsTask : DefaultTask() { when (change.changeType) { ChangeType.REMOVED -> { // Remove old discovered data for this file - removeOldMetadata(change.file) + removeOldMetadata(change) } ChangeType.ADDED, ChangeType.MODIFIED -> { - parseAndWriteMetadata(parser, change.file) + parseAndWriteMetadata(parser, change, change.file) } } } } - private fun parseAndWriteMetadata(parser: PlugParser, classFile: File) { + private fun parseAndWriteMetadata(parser: PlugParser, change: FileChange, classFile: File) { val plugToSocket = parser.parse(classFile) if (plugToSocket != null) { // For example: write a single line containing the discovered plug FQN - val discoveredFile = discoveredPlugsDir.file(classFile.nameWithoutExtension).get().asFile - if (discoveredFile.exists()) { - val existing = discoveredFile.readText().split("|") - check(existing[0] == plugToSocket.first) { - "You need to rename one of these plugs because they have the same classfile name: ${existing[0]} and $plugToSocket" - } - } else { - discoveredFile.parentFile.mkdirs() - } + val discoveredFile = discoveredPlugsDir.file(normalizePath(change)).get().asFile discoveredFile.writeText(plugToSocket.let { "${it.first}|${it.second}" }) } else { // If previously discovered, remove it - removeOldMetadata(classFile) + removeOldMetadata(change) } } - private fun removeOldMetadata(classFile: File) { + private fun removeOldMetadata(change: FileChange) { // Remove any discovered file for the old .class - val possibleName = classFile.nameWithoutExtension - val discoveredFile = discoveredPlugsDir.file(possibleName).get().asFile + val discoveredFile = discoveredPlugsDir.file(normalizePath(change)).get().asFile if (discoveredFile.exists()) { discoveredFile.delete() } } + + private fun normalizePath(change: FileChange) = + change.normalizedPath.removeSuffix(".class").replace("/", "_") } From 80884c239c15644115c4d9a61552c4e643a0d227 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Tue, 4 Feb 2025 11:58:38 -0800 Subject: [PATCH 2/4] Fix non-incremental builds. --- .../atplug/tooling/gradle/FindPlugsTask.kt | 61 ++++++++++++------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt index eda899c..ddaf7c5 100644 --- a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt +++ b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt @@ -5,6 +5,7 @@ import java.io.File import org.gradle.api.DefaultTask import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.FileType import org.gradle.api.tasks.* import org.gradle.work.* @@ -24,35 +25,53 @@ abstract class FindPlugsTask : DefaultTask() { @TaskAction fun findPlugs(inputChanges: InputChanges) { + val parser = PlugParser() + // If not incremental, clear everything and rescan - if (!inputChanges.isIncremental) { + if (inputChanges.isIncremental) { + discoveredPlugsDir.get().asFile.mkdirs() + for (change in inputChanges.getFileChanges(classesFolders)) { + if (!change.file.name.endsWith(".class")) { + continue + } + when (change.changeType) { + ChangeType.REMOVED -> { + // Remove old discovered data for this file + removeOldMetadata(change) + } + ChangeType.ADDED, + ChangeType.MODIFIED -> { + parseAndWriteMetadata(parser, change) + } + } + } + } else { discoveredPlugsDir.get().asFile.deleteRecursively() - } + discoveredPlugsDir.get().asFile.mkdirs() + classesFolders.files.forEach { folder -> + folder + .walkTopDown() + .filter { it.isFile && it.name.endsWith(".class") } + .forEach { classFile -> + val relativePath = classFile.toRelativeString(folder) + parseAndWriteMetadata( + parser, + object : FileChange { + override fun getFile(): File = classFile - // Make sure our output directory exists - discoveredPlugsDir.get().asFile.mkdirs() + override fun getChangeType(): ChangeType = ChangeType.ADDED - // For each changed file in classesFolders, determine if it has @Plug - val parser = PlugParser() - for (change in inputChanges.getFileChanges(classesFolders)) { - if (!change.file.name.endsWith(".class")) { - continue - } - when (change.changeType) { - ChangeType.REMOVED -> { - // Remove old discovered data for this file - removeOldMetadata(change) - } - ChangeType.ADDED, - ChangeType.MODIFIED -> { - parseAndWriteMetadata(parser, change, change.file) - } + override fun getFileType(): FileType = FileType.FILE + + override fun getNormalizedPath(): String = relativePath + }) + } } } } - private fun parseAndWriteMetadata(parser: PlugParser, change: FileChange, classFile: File) { - val plugToSocket = parser.parse(classFile) + private fun parseAndWriteMetadata(parser: PlugParser, change: FileChange) { + val plugToSocket = parser.parse(change.file) if (plugToSocket != null) { // For example: write a single line containing the discovered plug FQN val discoveredFile = discoveredPlugsDir.file(normalizePath(change)).get().asFile From 64936fcaf54428424096657f993dc90dbffb455c Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Tue, 4 Feb 2025 12:00:44 -0800 Subject: [PATCH 3/4] Update changelog. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd4d3fc..0fb20f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # AtPlug releases ## [Unreleased] +### Fixed +- `FindPlugsTask` had an up-to-date issue in projects with mixed Kotlin and Java. ([#68](https://github.com/diffplug/atplug/pull/68)) ## [1.2.0] - 2025-01-27 ### Added From f7d24336284adbe4f92081542dfd37e5b807a839 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Tue, 4 Feb 2025 12:07:14 -0800 Subject: [PATCH 4/4] Windows fix. --- .../java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt index ddaf7c5..1f85694 100644 --- a/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt +++ b/atplug-plugin-gradle/src/main/java/com/diffplug/atplug/tooling/gradle/FindPlugsTask.kt @@ -91,5 +91,5 @@ abstract class FindPlugsTask : DefaultTask() { } private fun normalizePath(change: FileChange) = - change.normalizedPath.removeSuffix(".class").replace("/", "_") + change.normalizedPath.removeSuffix(".class").replace("/", "_").replace("\\", "_") }