diff --git a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingDepConfig.kt b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingDepConfig.kt index dd3cfcef..f9c520f3 100644 --- a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingDepConfig.kt +++ b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingDepConfig.kt @@ -71,12 +71,13 @@ interface ContainedMapping { /** * insert forward visitor that converts class names to the ClassNs */ + @Deprecated(message = "use memberNameReplacer", replaceWith = ReplaceWith("memberNameReplacer(targetNs, classNs, setOf(MappedElementKind.CLASS))")) fun classNameReplacer(targetNs: String, classNs: String) /** * insert forward visitor that converts srg to searge names. */ - fun memberNameReplacer(targetNs: String, classNs: String, types: Set) + fun memberNameReplacer(targetNs: String, memberNs: String, types: Set) /** * insert forward visitor that only allows existing src names. diff --git a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingsConfig.kt b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingsConfig.kt index dffd4f37..a2ad62dd 100644 --- a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingsConfig.kt +++ b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/MappingsConfig.kt @@ -507,14 +507,14 @@ abstract class MappingsConfig(val project: Project, val minecraft: MinecraftConf @JvmOverloads abstract fun spigotDev( mcVersion: String = minecraft.version, - key: String = "spigot-dev", + key: String = "spigot_dev", action: MappingDepConfig.() -> Unit = {} ) @JvmOverloads fun spigotDev( mcVersion: String = minecraft.version, - key: String = "spigot-dev", + key: String = "spigot_dev", @DelegatesTo(value = MappingDepConfig::class, strategy = Closure.DELEGATE_FIRST) action: Closure<*> ) { diff --git a/src/mapping/kotlin/net/fabricmc/mappingio/format/ClassNameReplacer.kt b/src/mapping/kotlin/net/fabricmc/mappingio/format/ClassNameReplacer.kt deleted file mode 100644 index b79e9894..00000000 --- a/src/mapping/kotlin/net/fabricmc/mappingio/format/ClassNameReplacer.kt +++ /dev/null @@ -1,44 +0,0 @@ -package net.fabricmc.mappingio.format - -import net.fabricmc.mappingio.MappedElementKind -import net.fabricmc.mappingio.MappingVisitor -import net.fabricmc.mappingio.adapter.ForwardingMappingVisitor -import net.fabricmc.mappingio.tree.MappingTreeView - -class ClassNameReplacer(next: MappingVisitor?, val targetNsName: String, val classNsName: String, val tree: MappingTreeView): ForwardingMappingVisitor(next) { - var idx = -1 - var srcNsId = -1 - val classNsId = tree.getNamespaceId(classNsName) - var currentClass: String = "" - - override fun visitNamespaces(srcNamespace: String, dstNamespaces: List) { - idx = dstNamespaces.indexOf(targetNsName) - srcNsId = tree.getNamespaceId(srcNamespace) - super.visitNamespaces(srcNamespace, dstNamespaces) - } - - override fun visitClass(srcName: String): Boolean { - currentClass = srcName - val visit = super.visitClass(srcName) - if (visit) { - val mojmapName = tree.getClass(currentClass, srcNsId)?.getName(classNsId) - if (mojmapName != null) { - super.visitDstName(MappedElementKind.CLASS, idx, mojmapName) - } - } - return visit - } - - override fun visitElementContent(targetKind: MappedElementKind): Boolean { - return super.visitElementContent(targetKind) - } - - override fun visitDstName(targetKind: MappedElementKind, namespace: Int, name: String?) { - if (targetKind == MappedElementKind.CLASS && namespace == idx) { - return - } - super.visitDstName(targetKind, namespace, name) - } - - -} \ No newline at end of file diff --git a/src/mapping/kotlin/net/fabricmc/mappingio/format/MemberNameReplacer.kt b/src/mapping/kotlin/net/fabricmc/mappingio/format/MemberNameReplacer.kt deleted file mode 100644 index 807ed4dc..00000000 --- a/src/mapping/kotlin/net/fabricmc/mappingio/format/MemberNameReplacer.kt +++ /dev/null @@ -1,124 +0,0 @@ -package net.fabricmc.mappingio.format - -import net.fabricmc.mappingio.MappedElementKind -import net.fabricmc.mappingio.MappingFlag -import net.fabricmc.mappingio.MappingVisitor -import net.fabricmc.mappingio.adapter.ForwardingMappingVisitor -import net.fabricmc.mappingio.tree.MappingTreeView - -class MemberNameReplacer(next: MappingVisitor?, val targetNsName: String, memberNsName: String, val tree: MappingTreeView, val types: Set): ForwardingMappingVisitor(next) { - var idx = -1 - var srcNsId = -1 - val memberNsId = tree.getNamespaceId(memberNsName) - var currentClass: String = "" - - - override fun getFlags(): MutableSet { - val flags = super.getFlags() - if (flags.contains(MappingFlag.NEEDS_UNIQUENESS)) { - throw UnsupportedOperationException("MemberNameReplacer does not support mappings that require uniqueness") - } - return flags - } - - override fun visitNamespaces(srcNamespace: String, dstNamespaces: List) { - idx = dstNamespaces.indexOf(targetNsName) - srcNsId = tree.getNamespaceId(srcNamespace) - super.visitNamespaces(srcNamespace, dstNamespaces) - } - - override fun visitClass(srcName: String): Boolean { - currentClass = srcName - return super.visitClass(srcName) - } - - override fun visitMethod(srcName: String, srcDesc: String): Boolean { - return super.visitMethod(srcName, srcDesc) - } - - override fun visitField(srcName: String, srcDesc: String?): Boolean { - return super.visitField(srcName, srcDesc) - } - - override fun visitElementContent(targetKind: MappedElementKind): Boolean { - val value = super.visitElementContent(targetKind) - if (value) { - if (targetKind == MappedElementKind.CLASS) { - val clazz = tree.getClass(currentClass) ?: return true - if (types.contains(MappedElementKind.METHOD)) { - for (method in clazz.methods) { - val mojmapName = method.getName(memberNsId) - if (mojmapName != null) { - if (super.visitMethod(method.getName(srcNsId), method.getDesc(srcNsId))) { - super.visitDstName(MappedElementKind.METHOD, idx, mojmapName) - if (types.contains(MappedElementKind.METHOD_ARG) || types.contains(MappedElementKind.METHOD_VAR)) { - if (super.visitElementContent(MappedElementKind.METHOD)) { - if (types.contains(MappedElementKind.METHOD_ARG)) { - for (arg in method.args) { - val mojmapName = arg.getName(memberNsId) - if (mojmapName != null) { - if (super.visitMethodArg( - arg.argPosition, - arg.lvIndex, - arg.getName(srcNsId) - ) - ) { - super.visitDstName( - MappedElementKind.METHOD_ARG, - idx, - mojmapName - ) - } - } - } - } - if (types.contains(MappedElementKind.METHOD_VAR)) { - for (local in method.vars) { - val mojmapName = local.getName(memberNsId) - if (mojmapName != null) { - if (super.visitMethodVar( - local.lvIndex, - local.lvtRowIndex, - local.startOpIdx, - local.getName(srcNsId) - ) - ) { - super.visitDstName( - MappedElementKind.METHOD_VAR, - idx, - mojmapName - ) - } - } - } - } - } - } - } - } - } - } - if (types.contains(MappedElementKind.FIELD)) { - for (field in clazz.fields) { - val mojmapName = field.getName(memberNsId) - if (mojmapName != null) { - if (super.visitField(field.getName(srcNsId), null)) { - super.visitDstName(MappedElementKind.FIELD, idx, mojmapName) - } - } - } - } - } - } - return value - } - - override fun visitDstName(targetKind: MappedElementKind, namespace: Int, name: String?) { - if (targetKind != MappedElementKind.CLASS && namespace == idx) { - return - } - super.visitDstName(targetKind, namespace, name) - } - - -} \ No newline at end of file diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingDepConfigImpl.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingDepConfigImpl.kt index c2bd3670..eb4d248a 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingDepConfigImpl.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingDepConfigImpl.kt @@ -105,39 +105,86 @@ class ContainedMappingImpl() : ContainedMapping { override fun classNameReplacer(targetNs: String, classNs: String) { checkFinalized() - inputActions.add { - forwardVisitor { v, tree -> - ClassNameReplacer( - v, - targetNs, - classNs, - tree - ) - } - } + memberNameReplacer(targetNs, classNs, setOf(MappedElementKind.CLASS)) } - override fun memberNameReplacer(targetNs: String, classNs: String, types: Set) { + override fun memberNameReplacer(targetNs: String, memberNs: String, types: Set) { memberNameReplacer( targetNs, - classNs, + memberNs, types.map { MappedElementKind.valueOf(it.uppercase()) }.toSet() ) } @JvmName("memberNameReplacerIntl") @ApiStatus.Internal - fun memberNameReplacer(targetNs: String, classNs: String, types: Set) { + fun memberNameReplacer(targetNs: String, memberNs: String, types: Set) { checkFinalized() inputActions.add { - forwardVisitor { v, tree -> - MemberNameReplacer( - v, - targetNs, - classNs, - tree, - types - ) + afterRemap { + val targetKey = it.getNamespaceId(targetNs) + + if (targetKey == MappingTreeView.NULL_NAMESPACE_ID) { + throw IllegalStateException("Target namespace $targetNs does not exist") + } + + val memberKey = it.getNamespaceId(memberNs) + + if (memberKey == MappingTreeView.NULL_NAMESPACE_ID) { + throw IllegalStateException("Member namespace $memberNs does not exist") + } + + for (classMapping in it.classes) { + if (types.contains(MappedElementKind.CLASS)) { + val className = classMapping.getName(memberKey) + if (className != null) { + classMapping.setDstName(className, targetKey) + } + } + if (types.contains(MappedElementKind.METHOD) || types.contains(MappedElementKind.METHOD_ARG) || types.contains(MappedElementKind.METHOD_VAR)) { + for (method in classMapping.methods) { + if (types.contains(MappedElementKind.METHOD)) { + val mojmapName = method.getName(memberKey) + if (mojmapName != null) { + if (method.getName(targetKey) == null) { + method.setDstName(mojmapName, targetKey) + } + } + } + if (types.contains(MappedElementKind.METHOD_ARG)) { + for (arg in method.args) { + val mojmapName = arg.getName(memberKey) + if (mojmapName != null) { + if (arg.getName(targetKey) == null) { + arg.setDstName(mojmapName, targetKey) + } + } + } + } + if (types.contains(MappedElementKind.METHOD_VAR)) { + for (local in method.vars) { + val mojmapName = local.getName(memberKey) + if (mojmapName != null) { + if (local.getName(targetKey) == null) { + local.setDstName(mojmapName, targetKey) + } + } + } + } + } + } + if (types.contains(MappedElementKind.FIELD)) { + for (field in classMapping.fields) { + val mojmapName = field.getName(memberKey) + if (mojmapName != null) { + if (field.getName(targetKey) == null) { + field.setDstName(mojmapName, targetKey) + } + } + } + } + } + } } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingsProvider.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingsProvider.kt index d928cd99..54fb538f 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingsProvider.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/MappingsProvider.kt @@ -27,7 +27,7 @@ import java.nio.file.Path import java.security.MessageDigest import kotlin.io.path.* -class MappingsProvider(project: Project, minecraft: MinecraftConfig): MappingsConfig(project, minecraft) { +class MappingsProvider(project: Project, minecraft: MinecraftConfig, val mappingKey: String = "mappings"): MappingsConfig(project, minecraft) { override var side: EnvType by FinalizeOnRead(LazyMutable { minecraft.side }) @@ -429,12 +429,20 @@ class MappingsProvider(project: Project, minecraft: MinecraftConfig): MappingsCo } mapping(project.files(buildDataZip), key) { - outputs("spigot", false) { listOf("official") } contains({ n, _ -> n.endsWith("-members.csrg") }) { exclude() } + // so it can be valid to remap directly from dev... + memberNameReplacer("spigot", "official", setOf("method", "field", "method_arg", "method_var")) + outputs("spigot", false) { + if ("spigot_dev" in getNamespaces()) { + listOf("official", "spigot_dev") + } else { + listOf("official") + } + } renest() action() } @@ -482,23 +490,23 @@ class MappingsProvider(project: Project, minecraft: MinecraftConfig): MappingsCo if (layerMojmap) { project.logger.lifecycle("[Unimined/MappingsProvider] Layering mojmap on top of spigot") - postProcess("spigot", { + postProcess(key, { mojmap() mapping(project.files(buildDataZip), key) { - mapNamespace("spigot", "spigot-dev") - outputs("spigot-dev", true) { listOf("official", "mojmap") } + mapNamespace("spigot", "spigot_dev") + outputs("spigot_dev", true) { listOf("official", "mojmap") } dependsOn("mojmap") - memberNameReplacer("spigot-dev", "mojmap", if (hasMembers) setOf("field") else setOf("method", "field", "method_arg", "method_var")) + memberNameReplacer("spigot_dev", "mojmap", if (hasMembers) setOf("field") else setOf("method", "field", "method_arg", "method_var")) renest() } }) { - outputs("spigot-dev", true) { listOf("official") } + outputs("spigot_dev", true) { listOf("official") } action() } } else { mapping(project.files(buildDataZip), key) { - mapNamespace("spigot", "spigot-dev") - outputs("spigot-dev", true) { listOf("official") } + mapNamespace("spigot", "spigot_dev") + outputs("spigot_dev", true) { listOf("official") } renest() action() } @@ -506,7 +514,7 @@ class MappingsProvider(project: Project, minecraft: MinecraftConfig): MappingsCo } override fun postProcess(key: String, mappings: MappingsConfig.() -> Unit, merger: MappingDepConfig.() -> Unit) { - val mappingsConfig = MappingsProvider(project, minecraft) + val mappingsConfig = MappingsProvider(project, minecraft, "postProcess-$key") mappingsConfig.mappings() mappingsConfig.resolveMappingTree() mapping(project.dependencies.create( @@ -639,7 +647,7 @@ class MappingsProvider(project: Project, minecraft: MinecraftConfig): MappingsCo private fun mappingCacheFile(): Path = (if (hasStubs) minecraft.localCache else project.unimined.getGlobalCache()) - .resolve("mappings").resolve("mappings-${side}-${combinedNames}.tiny") + .resolve("mappings").resolve("${mappingKey}-${side}-${combinedNames}.tiny") override val combinedNames: String by lazy {