Ratchet net.minecraft purity

- Add minecraftPurityRatchet over core/minecraft-purity-allowlist.txt, wired into check
- Register both purity ratchets from one closure instead of duplicating the scan
- Prune WorldCreationProgressReporter from core/purity-allowlist.txt
This commit is contained in:
Brian Neumann-Fopiano committed 2026-09-08 03:39:43 -04:00
1 parent 1913baed17
commit b225c0b5be
3 files changed
+20 -9

No files matched your search

+14 -8
View File
@@ -485,10 +485,11 @@ tasks.named('check').configure {
dependsOn('externalProviderTest') dependsOn('externalProviderTest')
} }
tasks.register('bukkitPurityRatchet') { Closure<Void> registerPurityRatchet = { String taskName, String label, String forbiddenPackage, String allowlistName ->
tasks.register(taskName) {
group = 'verification' group = 'verification'
description = 'Fails if files outside core/purity-allowlist.txt import org.bukkit (the allowlist only shrinks).' description = "Fails if files outside core/${allowlistName} import ${forbiddenPackage} (the allowlist only shrinks)."
File allowlistFile = project.file('purity-allowlist.txt') File allowlistFile = project.file(allowlistName)
File sourceRoot = project.file('src/main/java') File sourceRoot = project.file('src/main/java')
inputs.file(allowlistFile) inputs.file(allowlistFile)
inputs.dir(sourceRoot) inputs.dir(sourceRoot)
@@ -500,7 +501,7 @@ tasks.register('bukkitPurityRatchet') {
if (!f.name.endsWith('.java')) { if (!f.name.endsWith('.java')) {
return return
} }
if (f.text.contains('org.bukkit')) { if (f.text.contains(forbiddenPackage)) {
String rel = sourceRoot.toPath().relativize(f.toPath()).toString() String rel = sourceRoot.toPath().relativize(f.toPath()).toString()
coupled.add(rel) coupled.add(rel)
if (!allowed.contains(rel)) { if (!allowed.contains(rel)) {
@@ -509,19 +510,24 @@ tasks.register('bukkitPurityRatchet') {
} }
} }
if (!offenders.isEmpty()) { if (!offenders.isEmpty()) {
throw new GradleException("Bukkit purity ratchet violated - new org.bukkit coupling in:\n " + offenders.join('\n ') + "\nDecouple these files or (only with strong justification) add them to core/purity-allowlist.txt") throw new GradleException(label + " purity ratchet violated - new " + forbiddenPackage + " coupling in:\n " + offenders.join('\n ') + "\nDecouple these files or (only with strong justification) add them to core/" + allowlistName)
} }
int shrunk = allowed.size() - coupled.size() int shrunk = allowed.size() - coupled.size()
if (shrunk > 0) { if (shrunk > 0) {
println("Purity ratchet: " + coupled.size() + " coupled files (" + shrunk + " fewer than allowlist - consider tightening core/purity-allowlist.txt)") println(label + " purity ratchet: " + coupled.size() + " coupled files (" + shrunk + " fewer than allowlist - consider tightening core/" + allowlistName + ")")
} else { } else {
println("Purity ratchet: " + coupled.size() + " coupled files (at allowlist ceiling)") println(label + " purity ratchet: " + coupled.size() + " coupled files (at allowlist ceiling)")
} }
} }
}
return null
} }
registerPurityRatchet('bukkitPurityRatchet', 'Bukkit', 'org.bukkit', 'purity-allowlist.txt')
registerPurityRatchet('minecraftPurityRatchet', 'Minecraft', 'net.minecraft', 'minecraft-purity-allowlist.txt')
tasks.named('check').configure { tasks.named('check').configure {
dependsOn('bukkitPurityRatchet') dependsOn('bukkitPurityRatchet', 'minecraftPurityRatchet')
} }
apply from: rootProject.file('gradle/generation-build-revision.gradle') apply from: rootProject.file('gradle/generation-build-revision.gradle')
+6
View File
@@ -0,0 +1,6 @@
art/arcane/iris/core/lifecycle/CapabilitySnapshot.java
art/arcane/iris/core/lifecycle/WorldLifecycleSupport.java
art/arcane/iris/core/runtime/WorldRuntimeControlService.java
art/arcane/iris/core/service/LogFilterSVC.java
art/arcane/iris/core/structure/BulkStructureImporter.java
art/arcane/iris/core/structure/VillageImporter.java
-1
View File
@@ -84,7 +84,6 @@ art/arcane/iris/core/tools/IrisPackBenchmarking.java
art/arcane/iris/core/tools/IrisReflectiveAPI.java art/arcane/iris/core/tools/IrisReflectiveAPI.java
art/arcane/iris/core/tools/IrisToolbelt.java art/arcane/iris/core/tools/IrisToolbelt.java
art/arcane/iris/core/tools/IrisWorldCreator.java art/arcane/iris/core/tools/IrisWorldCreator.java
art/arcane/iris/core/tools/WorldCreationProgressReporter.java
art/arcane/iris/engine/IrisEngineEffects.java art/arcane/iris/engine/IrisEngineEffects.java
art/arcane/iris/engine/IrisWorldManager.java art/arcane/iris/engine/IrisWorldManager.java
art/arcane/iris/engine/MarkerSpawnScanner.java art/arcane/iris/engine/MarkerSpawnScanner.java