2022-11-22 11:33:56 -05:00
|
|
|
import java.nio.file.Files
|
|
|
|
|
2023-05-30 08:07:11 -04:00
|
|
|
for (def sourceSet in [
|
|
|
|
sourceSets.main,
|
|
|
|
sourceSets.client
|
|
|
|
]) {
|
2022-11-22 11:33:56 -05:00
|
|
|
// We have to capture the source set name for the lazy string literals,
|
|
|
|
// otherwise it'll just be whatever the last source set is in the list.
|
|
|
|
def sourceSetName = sourceSet.name
|
|
|
|
def taskName = sourceSet.getTaskName('generate', 'ImplPackageInfos')
|
|
|
|
def task = tasks.register(taskName, GenerateImplPackageInfos) {
|
|
|
|
group = 'fabric'
|
|
|
|
description = "Generates package-info files for $sourceSetName implementation packages."
|
|
|
|
|
|
|
|
// Only apply to default source directory since we also add the generated
|
|
|
|
// sources to the source set.
|
|
|
|
sourceRoot = file("src/$sourceSetName/java")
|
|
|
|
header = rootProject.file('HEADER')
|
|
|
|
outputDir = file("src/generated/$sourceSetName")
|
|
|
|
}
|
|
|
|
sourceSet.java.srcDir task
|
|
|
|
|
|
|
|
def cleanTask = tasks.register(sourceSet.getTaskName('clean', 'ImplPackageInfos'), Delete) {
|
|
|
|
group = 'fabric'
|
|
|
|
delete file("src/generated/$sourceSetName")
|
|
|
|
}
|
|
|
|
clean.dependsOn cleanTask
|
|
|
|
}
|
|
|
|
|
|
|
|
class GenerateImplPackageInfos extends DefaultTask {
|
|
|
|
@InputFile
|
|
|
|
File header
|
|
|
|
|
|
|
|
@SkipWhenEmpty
|
|
|
|
@InputDirectory
|
|
|
|
final DirectoryProperty sourceRoot = project.objects.directoryProperty()
|
|
|
|
|
|
|
|
@OutputDirectory
|
|
|
|
final DirectoryProperty outputDir = project.objects.directoryProperty()
|
|
|
|
|
|
|
|
@TaskAction
|
|
|
|
def run() {
|
|
|
|
def output = outputDir.get().asFile.toPath()
|
|
|
|
output.deleteDir()
|
|
|
|
def headerText = header.readLines().join("\n") // normalize line endings
|
|
|
|
def root = sourceRoot.get().asFile.toPath()
|
|
|
|
|
|
|
|
for (def dir in ['impl', 'mixin']) {
|
|
|
|
def implDir = root.resolve("net/fabricmc/fabric/$dir")
|
|
|
|
|
|
|
|
if (Files.notExists(implDir)) {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
implDir.eachDirRecurse {
|
|
|
|
def containsJava = Files.list(it).any {
|
|
|
|
Files.isRegularFile(it) && it.fileName.toString().endsWith('.java')
|
|
|
|
}
|
|
|
|
|
|
|
|
if (containsJava && Files.notExists(it.resolve('package-info.java'))) {
|
|
|
|
def relativePath = root.relativize(it)
|
|
|
|
def target = output.resolve(relativePath)
|
|
|
|
Files.createDirectories(target)
|
|
|
|
|
|
|
|
target.resolve('package-info.java').withWriter {
|
|
|
|
def packageName = relativePath.toString().replace(File.separator, '.')
|
|
|
|
it.write("""$headerText
|
|
|
|
|/**
|
|
|
|
| * Implementation code for ${project.name}.
|
|
|
|
| */
|
|
|
|
|@ApiStatus.Internal
|
|
|
|
|package $packageName;
|
|
|
|
|
|
|
|
|
|import org.jetbrains.annotations.ApiStatus;
|
|
|
|
|""".stripMargin())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|