diff options
Diffstat (limited to 'buildSrc/src')
-rw-r--r-- | buildSrc/src/AutoMixinDiscovery.kt | 50 | ||||
-rw-r--r-- | buildSrc/src/EnvFile.kt | 12 |
2 files changed, 62 insertions, 0 deletions
diff --git a/buildSrc/src/AutoMixinDiscovery.kt b/buildSrc/src/AutoMixinDiscovery.kt new file mode 100644 index 000000000..f66229030 --- /dev/null +++ b/buildSrc/src/AutoMixinDiscovery.kt @@ -0,0 +1,50 @@ +import com.google.gson.GsonBuilder +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive +import org.apache.tools.ant.filters.BaseParamFilterReader +import org.gradle.api.file.FileCopyDetails +import org.gradle.api.tasks.SourceSet +import java.io.File +import java.io.Reader +import java.io.StringReader + +class MixinFilterReader(reader: Reader) : BaseParamFilterReader() { + lateinit var sourceRoots: Collection<File> + val gson = GsonBuilder().setPrettyPrinting().create() + val betterReader: StringReader by lazy { + StringReader(run { + val json = gson.fromJson(reader.readText(), JsonObject::class.java) + val mixinPackage = (json["package"] as JsonPrimitive).asString + val allMixins = (json["mixins"] as JsonArray?)?.map { it.asString }?.toMutableSet() ?: mutableSetOf() + sourceRoots + .forEach { base -> + base.walk() + .filter { it.isFile } + .forEach { + val relativeString = it.toRelativeString(base).replace("\\", "/") + if (relativeString.startsWith(mixinPackage.replace(".", "/") + "/") + && relativeString.endsWith(".java") + && it.readText().contains("@Mixin") + ) + allMixins.add( + relativeString.replace("/", ".").dropLast(5).drop(mixinPackage.length + 1) + ) + } + } + json.add("mixins", JsonArray().also { jsonAllMixins -> + allMixins.forEach { jsonAllMixins.add(it) } + }) + gson.toJson(json) + }) + + } + + override fun read(): Int { + return betterReader.read() + } +} + +fun FileCopyDetails.autoDiscoverMixins(sourceSet: SourceSet) { + filter(mapOf("sourceRoots" to sourceSet.allSource.srcDirs), MixinFilterReader::class.java) +} diff --git a/buildSrc/src/EnvFile.kt b/buildSrc/src/EnvFile.kt new file mode 100644 index 000000000..76d6fa959 --- /dev/null +++ b/buildSrc/src/EnvFile.kt @@ -0,0 +1,12 @@ +import java.io.File + +fun parseEnvFile(file: File): Map<String, String> { + if (!file.exists()) return mapOf() + val map = mutableMapOf<String, String>() + for (line in file.readText().lines()) { + if (line.isEmpty() || line.startsWith("#")) continue + val parts = line.split("=", limit = 2) + map[parts[0]] = parts.getOrNull(1) ?: "" + } + return map +} |