diff --git a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/mixin/MixinRemapOptions.kt b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/mixin/MixinRemapOptions.kt index 6fe6e47b..d3e8c9eb 100644 --- a/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/mixin/MixinRemapOptions.kt +++ b/src/api/kotlin/xyz/wagyourtail/unimined/api/mapping/mixin/MixinRemapOptions.kt @@ -25,5 +25,7 @@ interface MixinRemapOptions { @ApiStatus.Experimental fun resetRefmapBuilder() fun off() + fun disableRefmap() + fun disableRefmap(keys: List = listOf("BaseMixin", "JarModAgent")) } \ No newline at end of file diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/MixinRemapExtension.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/MixinRemapExtension.kt index 3ac3d389..dab4ef6c 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/MixinRemapExtension.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/MixinRemapExtension.kt @@ -16,7 +16,7 @@ import org.objectweb.asm.ClassVisitor import xyz.wagyourtail.unimined.api.mapping.mixin.MixinRemapOptions import xyz.wagyourtail.unimined.internal.mapping.extension.jma.hard.JMAHard import xyz.wagyourtail.unimined.internal.mapping.extension.jma.refmap.JMARefmap -import xyz.wagyourtail.unimined.internal.mapping.extension.jma.refmap.JarModAgentMetaData +import xyz.wagyourtail.unimined.internal.mapping.extension.jma.JarModAgentMetaData import xyz.wagyourtail.unimined.internal.mapping.extension.mixin.OfficialMixinMetaData import xyz.wagyourtail.unimined.internal.mapping.extension.mixin.hard.BaseMixinHard import xyz.wagyourtail.unimined.internal.mapping.extension.mixin.hard.HardTargetRemappingClassVisitor @@ -30,7 +30,6 @@ import java.nio.file.FileSystem import java.nio.file.Path import java.util.* import java.util.concurrent.CompletableFuture -import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentLinkedDeque class MixinRemapExtension( @@ -60,7 +59,7 @@ class MixinRemapExtension( ) var off by FinalizeOnRead(false) - var noRefmap by FinalizeOnRead(false) + var noRefmap: Set by FinalizeOnRead(setOf()) @ApiStatus.Internal fun modifyMetadataReader(modifier: (MixinRemapExtension) -> MixinMetadata) { @@ -85,8 +84,11 @@ class MixinRemapExtension( } override fun disableRefmap() { - noRefmap = true - TODO("todo. duplicate behavior of tinyremapper hard target/soft target remapping") + disableRefmap(listOf("BaseMixin", "JarModAgent")) + } + + override fun disableRefmap(keys: List) { + noRefmap = keys.toSet() } override fun enableMixinExtra() { @@ -120,7 +122,7 @@ class MixinRemapExtension( override fun reset() { off = false - noRefmap = false + noRefmap = setOf() resetMetadataReader() resetHardRemapper() resetRefmapBuilder() @@ -203,6 +205,7 @@ class MixinRemapExtension( target, next, mappings, + extension, onEnd = { if (target.size() > 0) { extension.logger.info("[RefmapBuilder] adding ${target.size()} mappings for ${cls.name}") diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/JarModAgentMetaData.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/JarModAgentMetaData.kt similarity index 93% rename from src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/JarModAgentMetaData.kt rename to src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/JarModAgentMetaData.kt index 36969577..6e13bd6e 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/JarModAgentMetaData.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/JarModAgentMetaData.kt @@ -1,4 +1,4 @@ -package xyz.wagyourtail.unimined.internal.mapping.extension.jma.refmap +package xyz.wagyourtail.unimined.internal.mapping.extension.jma import com.google.gson.GsonBuilder import com.google.gson.JsonObject @@ -94,7 +94,11 @@ class JarModAgentMetaData(parent: MixinRemapExtension) : MixinRemapExtension.Mix if (refmaps.isNotEmpty()) { val manifest = Manifest(fs.getPath("META-INF/MANIFEST.MF").inputStream()) - manifest.mainAttributes.putValue("JarModAgent-Refmaps", refmaps.keys.joinToString(" ")) + if (!parent.noRefmap.contains("JarModAgent")) { + manifest.mainAttributes.putValue("JarModAgent-Refmaps", refmaps.keys.joinToString(" ")) + } else { + manifest.mainAttributes.remove("JarModAgent-Refmaps") + } fs.getPath("META-INF/MANIFEST.MF") .outputStream(StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE).use { diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/CTargetAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/CTargetAnnotationVisitor.kt index 3eb6b16d..e5ca3ff3 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/CTargetAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/CTargetAnnotationVisitor.kt @@ -22,10 +22,16 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, private val mapper = refmapBuilder.mapper private val refmap = refmapBuilder.refmap private val mixinName = refmapBuilder.mixinName + private val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("JarModAgent") override fun visit(name: String, value: Any) { super.visit(name, value) - if (name == AnnotationElement.TARGET) targetName = (value as String).replace(" ", "") + if (name == AnnotationElement.TARGET) { + targetName = (value as String).replace(" ", "") + if (!noRefmap) super.visit(name, value) + } else { + super.visit(name, value) + } } override fun visitAnnotation(name: String, descriptor: String): AnnotationVisitor { @@ -48,7 +54,6 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, } override fun visitEnd() { - super.visitEnd() if (remapAt && targetName != null) { val matchFd = targetField.matchEntire(targetName!!) if (matchFd != null) { @@ -85,6 +90,9 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, val mappedName = mapper.mapName(it) val mappedDesc = mapper.mapDesc(it) refmap.addProperty(this.targetName, "L$mappedOwner;$mappedName:$mappedDesc") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mappedOwner;$mappedName:$mappedDesc") + } } } if (!target.isPresent || !targetClass.isPresent) { @@ -96,7 +104,11 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } } + super.visitEnd() return } val matchMd = targetMethod.matchEntire(targetName!!) @@ -134,6 +146,9 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, val mappedName = mapper.mapName(it) val mappedDesc = mapper.mapDesc(it) refmap.addProperty(this.targetName, "L$mappedOwner;$mappedName$mappedDesc") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mappedOwner;$mappedName$mappedDesc") + } } } if (!target.isPresent || !targetClass.isPresent) { @@ -145,7 +160,11 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } } + super.visitEnd() return } if (targetName!!.startsWith("(")) { @@ -155,16 +174,29 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, val mapped = mapper.asTrRemapper().mapDesc(existing) if (mapped == existing) { logger.warn("Failed to remap $existing") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } + super.visitEnd() return } + refmap.addProperty(this.targetName, mapped) + super.visitEnd() return } else { val mapped = mapper.asTrRemapper().mapDesc(targetName) if (mapped == targetName) { logger.warn("Failed to remap $targetName") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } return } else { refmap.addProperty(this.targetName, mapped) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, mapped) + } + super.visitEnd() return } } @@ -194,8 +226,12 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, target.ifPresent { val mapped = mapper.mapName(it) refmap.addProperty(this.targetName, "L$mapped;") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mapped;") + } } if (target.isPresent) { + super.visitEnd() return } } @@ -208,6 +244,14 @@ class CTargetAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } + } else if (targetName != null) { + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName) + } } + super.visitEnd() } } \ No newline at end of file diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CAbstractFieldAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CAbstractFieldAnnotationVisitor.kt index 467d48d5..83b22cf1 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CAbstractFieldAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CAbstractFieldAnnotationVisitor.kt @@ -37,17 +37,13 @@ abstract class CAbstractFieldAnnotationVisitor( protected val mixinName = refmapBuilder.mixinName protected val targetClasses = refmapBuilder.targetClasses protected val allowImplicitWildcards = refmapBuilder.allowImplicitWildcards + protected val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("JarModAgent") override fun visit(name: String?, value: Any) { super.visit(name, value) if (name == AnnotationElement.REMAP) remap.set(value as Boolean) } - override fun visitEnd() { - super.visitEnd() - remapTargetNames() - } - open fun getTargetNameAndDescs(targetField: String): Pair> { val targetDescs = setOf(if (targetField.contains(":")) { targetField.substringAfter(":") @@ -58,7 +54,7 @@ abstract class CAbstractFieldAnnotationVisitor( return targetName to targetDescs } - open fun remapTargetNames() { + open fun remapTargetNames(noRefmapAcceptor: (String) -> Unit) { if (remap.get()) { outer@for (targetField in targetNames) { val (targetName, targetDescs) = getTargetNameAndDescs(targetField) @@ -94,8 +90,10 @@ abstract class CAbstractFieldAnnotationVisitor( val mappedDesc = mapper.mapDesc(targetVal) if (targetClasses.size > 1) { refmap.addProperty(targetField, "$mappedName$mappedDesc") + noRefmapAcceptor("$mappedName$mappedDesc") } else { refmap.addProperty(targetField, "L$mappedClass;$mappedName:$mappedDesc") + noRefmapAcceptor("L$mappedClass;$mappedName:$mappedDesc") } } @@ -107,6 +105,11 @@ abstract class CAbstractFieldAnnotationVisitor( logger.warn( "Failed to resolve $annotationName $targetField ($targetDescs) on ($fieldName:$fieldDescriptor) $fieldSignature in $mixinName" ) + noRefmapAcceptor(targetField) + } + } else { + for (targetField in targetNames) { + noRefmapAcceptor(targetField) } } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CShadowFieldAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CShadowFieldAnnotationVisitor.kt index 31e4acfe..aa9f6ae9 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CShadowFieldAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/field/CShadowFieldAnnotationVisitor.kt @@ -47,10 +47,22 @@ class CShadowFieldAnnotationVisitor( override fun visit(name: String?, value: Any) { if (name == AnnotationElement.VALUE) { targetNames.add(value as String) + if (!noRefmap) { + super.visit(name, value) + } + } else { + super.visit(name, value) } - super.visit(name, value) } + override fun visitEnd() { + remapTargetNames { + if (noRefmap) { + super.visit(AnnotationElement.VALUE, it) + } + } + super.visitEnd() + } override fun getTargetNameAndDescs(targetField: String): Pair> { return if (targetField.contains(":")) { diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CAbstractMethodAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CAbstractMethodAnnotationVisitor.kt index 4fc9c3af..22358722 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CAbstractMethodAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CAbstractMethodAnnotationVisitor.kt @@ -36,17 +36,13 @@ abstract class CAbstractMethodAnnotationVisitor( protected val mixinName = refmapBuilder.mixinName protected val targetClasses = refmapBuilder.targetClasses protected val allowImplicitWildcards = refmapBuilder.allowImplicitWildcards + protected val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("BaseMixin") override fun visit(name: String?, value: Any) { super.visit(name, value) if (name == AnnotationElement.REMAP) remap.set(value as Boolean) } - override fun visitEnd() { - super.visitEnd() - remapTargetNames() - } - open fun getTargetNameAndDescs(targetMethod: String, wildcard: Boolean): Pair> { val targetDescs = setOf(if (targetMethod.contains("(")) { "(" + targetMethod.substringAfter("(") @@ -61,12 +57,13 @@ abstract class CAbstractMethodAnnotationVisitor( return targetName to targetDescs } - open fun remapTargetNames() { + open fun remapTargetNames(noRefmapAcceptor: (String) -> Unit) { if (remap.get()) { outer@for (targetMethod in targetNames) { if (targetMethod == "" || targetMethod == "" || targetMethod == "*" ) { + noRefmapAcceptor(targetMethod) continue } val wildcard = targetMethod.endsWith("*") @@ -122,8 +119,10 @@ abstract class CAbstractMethodAnnotationVisitor( val mappedDesc = /* if (implicitWildcard) "" else */ if (wildcard && mappedName != "") "*" else mapper.mapDesc(targetVal) if (targetClasses.size > 1) { refmap.addProperty(targetMethod, "$mappedName$mappedDesc") + noRefmapAcceptor("$mappedName$mappedDesc") } else { refmap.addProperty(targetMethod, "L$mappedClass;$mappedName$mappedDesc") + noRefmapAcceptor("L$mappedClass;$mappedName$mappedDesc") } } @@ -135,6 +134,7 @@ abstract class CAbstractMethodAnnotationVisitor( logger.warn( "Failed to resolve $annotationName $targetMethod ($targetDescs) on ($methodName$methodDescriptor) $methodSignature in $mixinName" ) + noRefmapAcceptor(targetMethod) } } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CInjectAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CInjectAnnotationVisitor.kt index 66091087..c3c3320d 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CInjectAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CInjectAnnotationVisitor.kt @@ -50,17 +50,16 @@ class CInjectAnnotationVisitor( } override fun visitArray(name: String): AnnotationVisitor { - val delegate = super.visitArray(name) return when (name) { AnnotationElement.TARGET -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { CTargetAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { CTargetAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.SLICE -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { CSliceAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { CSliceAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, delegate) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -69,11 +68,24 @@ class CInjectAnnotationVisitor( } else -> { - delegate + super.visitArray(name) } } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { + method?.visit(null, it) + } + method?.visitEnd() + super.visitEnd() + } + private val callbackInfo = "Lnet/lenni0451/classtransform/InjectionCallback" private fun stripCallbackInfoFromDesc(): Set { diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CModifyConstantAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CModifyConstantAnnotationVisitor.kt index 2794ab4c..d9c65cce 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CModifyConstantAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CModifyConstantAnnotationVisitor.kt @@ -66,7 +66,7 @@ open class CModifyConstantAnnotationVisitor( override fun visitArray(name: String): AnnotationVisitor { return when (name) { AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -80,4 +80,17 @@ open class CModifyConstantAnnotationVisitor( } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { + method?.visit(null, it) + } + method?.visitEnd() + super.visitEnd() + } + } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/COverrideAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/COverrideAnnotationVisitor.kt index ab495ede..b83d9483 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/COverrideAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/COverrideAnnotationVisitor.kt @@ -50,10 +50,9 @@ class COverrideAnnotationVisitor( } override fun visitArray(name: String): AnnotationVisitor { - val delegate = super.visitArray(name) return when (name) { AnnotationElement.VALUE -> { - object: AnnotationVisitor(Constant.ASM_VERSION, delegate) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -62,11 +61,24 @@ class COverrideAnnotationVisitor( } else -> { - delegate + super.visitArray(name) } } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.VALUE) + } else { + null + } + remapTargetNames { + method?.visit(null, it) + } + method?.visitEnd() + super.visitEnd() + } + override fun getTargetNameAndDescs(targetMethod: String, wildcard: Boolean): Pair> { return if (targetMethod.contains("(")) { val n = targetMethod.split("(") diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CRedirectAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CRedirectAnnotationVisitor.kt index 6606d6ac..bf66d459 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CRedirectAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CRedirectAnnotationVisitor.kt @@ -71,7 +71,7 @@ open class CRedirectAnnotationVisitor( override fun visitArray(name: String): AnnotationVisitor { return when (name) { AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -85,4 +85,17 @@ open class CRedirectAnnotationVisitor( } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { + method?.visit(null, it) + } + method?.visitEnd() + super.visitEnd() + } + } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CShadowMethodAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CShadowMethodAnnotationVisitor.kt index dc3453d6..80d1692e 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CShadowMethodAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CShadowMethodAnnotationVisitor.kt @@ -48,8 +48,10 @@ class CShadowMethodAnnotationVisitor( override fun visit(name: String?, value: Any) { if (name == AnnotationElement.VALUE) { targetNames.add(value as String) + if (!noRefmap) super.visit(name, value) + } else { + super.visit(name, value) } - super.visit(name, value) } override fun getTargetNameAndDescs(targetMethod: String, wildcard: Boolean): Pair> { @@ -60,4 +62,13 @@ class CShadowMethodAnnotationVisitor( } } + override fun visitEnd() { + remapTargetNames { + if (noRefmap) { + super.visit(AnnotationElement.VALUE, it) + } + } + super.visitEnd() + } + } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CWrapCatchAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CWrapCatchAnnotationVisitor.kt index 891ca9e1..4fdb173b 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CWrapCatchAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/jma/refmap/annotations/method/CWrapCatchAnnotationVisitor.kt @@ -57,6 +57,9 @@ open class CWrapCatchAnnotationVisitor( override fun visit(name: String?, value: Any) { if (name == AnnotationElement.TARGET) { targetName = value as String + if (!noRefmap) super.visit(name, value) + } else { + super.visit(name, value) } } @@ -76,7 +79,7 @@ open class CWrapCatchAnnotationVisitor( override fun visitArray(name: String): AnnotationVisitor { return when (name) { AnnotationElement.VALUE -> { - object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -103,7 +106,15 @@ open class CWrapCatchAnnotationVisitor( } override fun visitEnd() { - super.visitEnd() + val method = if (noRefmap) { + super.visitArray(AnnotationElement.VALUE) + } else { + null + } + remapTargetNames { + method?.visit(null, it) + } + method?.visitEnd() if (remap.get() && targetName != null) { val matchMd = targetMethod.matchEntire(targetName!!) if (matchMd != null) { @@ -140,6 +151,9 @@ open class CWrapCatchAnnotationVisitor( val mappedName = mapper.mapName(it) val mappedDesc = mapper.mapDesc(it) refmap.addProperty(this.targetName, "L$mappedOwner;$mappedName$mappedDesc") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mappedOwner;$mappedName$mappedDesc") + } } } if (!target.isPresent || !targetClass.isPresent) { @@ -151,12 +165,24 @@ open class CWrapCatchAnnotationVisitor( ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, targetName) + } } + super.visitEnd() return } else { logger.warn("Failed to parse CWrapCatch target $targetName in mixin ${mixinName.replace('/', '.')}") + if (noRefmap && targetName != null) { + super.visit(AnnotationElement.TARGET, targetName!!) + } + } + } else { + if (noRefmap && targetName != null) { + super.visit(AnnotationElement.TARGET, targetName!!) } } + super.visitEnd() } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/OfficialMixinMetaData.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/OfficialMixinMetaData.kt index 1be46726..9562e0b6 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/OfficialMixinMetaData.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/OfficialMixinMetaData.kt @@ -74,7 +74,11 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M classesToRefmap["$pkg.$mixinName"] = refmap parent.logger.info("[PreRead] Added $pkg.$mixinName to $refmap") } - json.addProperty("refmap", refmap) + if (parent.noRefmap.contains("BaseMixin")) { + json.remove("refmap") + } else { + json.addProperty("refmap", refmap) + } mixinJsons[file] = json } catch (e: Exception) { parent.logger.error("[PreRead] Failed to parse mixin config $file: ${e.message}") @@ -97,9 +101,16 @@ class OfficialMixinMetaData(parent: MixinRemapExtension) : MixinRemapExtension.M } override fun writeExtra(fs: FileSystem) { - for ((name, json) in refmaps) { - parent.logger.info("[Unimined/MixinMetaData] Writing refmap $name") - fs.getPath(name).writeText(GSON.toJson(json), Charsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING) + if (!parent.noRefmap.contains("BaseMixin")) { + for ((name, json) in refmaps) { + parent.logger.info("[Unimined/MixinMetaData] Writing refmap $name") + fs.getPath(name).writeText( + GSON.toJson(json), + Charsets.UTF_8, + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING + ) + } } for ((name, json) in mixinJsons) { parent.logger.info("[Unimined/MixinMetaData] Writing mixin config $name") diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/RefmapBuilderClassVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/RefmapBuilderClassVisitor.kt index b27f5853..69a1d091 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/RefmapBuilderClassVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/RefmapBuilderClassVisitor.kt @@ -7,6 +7,7 @@ import org.objectweb.asm.AnnotationVisitor import org.objectweb.asm.ClassVisitor import org.objectweb.asm.FieldVisitor import org.objectweb.asm.MethodVisitor +import xyz.wagyourtail.unimined.internal.mapping.extension.MixinRemapExtension import xyz.wagyourtail.unimined.internal.mapping.extension.mixin.refmap.annotations.clazz.MixinAnnotationVisitor import xyz.wagyourtail.unimined.internal.mapping.extension.mixin.refmap.annotations.method.* import java.util.concurrent.atomic.AtomicBoolean @@ -74,6 +75,7 @@ class RefmapBuilderClassVisitor( val refmap: JsonObject, delegate: ClassVisitor, val existingMappings: Map, + val mixinRemapExtension: MixinRemapExtension, private val onEnd: () -> Unit = {}, val allowImplicitWildcards: Boolean = false ) : ClassVisitor(Constant.ASM_VERSION, delegate) { diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/AtAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/AtAnnotationVisitor.kt index c2e6e423..9f02c07f 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/AtAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/AtAnnotationVisitor.kt @@ -20,11 +20,20 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv private val mapper = refmapBuilder.mapper private val refmap = refmapBuilder.refmap private val mixinName = refmapBuilder.mixinName + private val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("BaseMixin") - override fun visit(name: String, value: Any) { - super.visit(name, value) - if (name == AnnotationElement.REMAP) remapAt.set(value as Boolean) - if (name == AnnotationElement.TARGET) targetName = (value as String).replace(" ", "") + override fun visit(name: String?, value: Any) { + when (name) { + AnnotationElement.REMAP -> { + super.visit(name, value) + remapAt.set(value as Boolean) + } + AnnotationElement.TARGET -> { + if (!noRefmap) super.visit(name, value) + targetName = (value as String).replace(" ", "") + } + else -> super.visit(name, value) + } } override fun visitAnnotation(name: String, descriptor: String): AnnotationVisitor { @@ -51,10 +60,10 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv } override fun visitEnd() { - super.visitEnd() if (remapAt.get() && targetName != null) { val matchFd = targetField.matchEntire(targetName!!) if (matchFd != null) { + logger.info("Found field target: $targetName") var (targetOwner, targetName, targetDesc) = matchToParts(matchFd) val target = resolver.resolveField( targetOwner, @@ -88,6 +97,9 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv val mappedName = mapper.mapName(it) val mappedDesc = mapper.mapDesc(it) refmap.addProperty(this.targetName, "L$mappedOwner;$mappedName:$mappedDesc") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mappedOwner;$mappedName:$mappedDesc") + } } } if (!target.isPresent || !targetClass.isPresent) { @@ -99,11 +111,16 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } } + super.visitEnd() return } val matchMd = targetMethod.matchEntire(targetName!!) if (matchMd != null) { + logger.info("Found method target: $targetName") var (targetOwner, targetName, targetDesc) = matchToParts(matchMd) val target = resolver.resolveMethod( targetOwner, @@ -137,6 +154,9 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv val mappedName = mapper.mapName(it) val mappedDesc = mapper.mapDesc(it) refmap.addProperty(this.targetName, "L$mappedOwner;$mappedName$mappedDesc") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mappedOwner;$mappedName$mappedDesc") + } } } if (!target.isPresent || !targetClass.isPresent) { @@ -148,26 +168,45 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } } + super.visitEnd() return } if (targetName!!.startsWith("(")) { + logger.info("Found descriptor target: $targetName") val existing = existingMappings[this.targetName] if (existing != null) { logger.info("remapping $existing from existing refmap") val mapped = mapper.asTrRemapper().mapDesc(existing) if (mapped == existing) { logger.warn("Failed to remap $existing") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } + super.visitEnd() return } + refmap.addProperty(this.targetName, mapped) + super.visitEnd() return } else { val mapped = mapper.asTrRemapper().mapDesc(targetName) if (mapped == targetName) { logger.warn("Failed to remap $targetName") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } + super.visitEnd() return } else { refmap.addProperty(this.targetName, mapped) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, mapped) + } + super.visitEnd() return } } @@ -197,8 +236,12 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv target.ifPresent { val mapped = mapper.mapName(it) refmap.addProperty(this.targetName, "L$mapped;") + if (noRefmap) { + super.visit(AnnotationElement.TARGET, "L$mapped;") + } } if (target.isPresent) { + super.visitEnd() return } } @@ -211,6 +254,14 @@ class AtAnnotationVisitor(parent: AnnotationVisitor?, remap: AtomicBoolean, priv ) }" ) + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } + } else if (targetName != null) { + if (noRefmap) { + super.visit(AnnotationElement.TARGET, this.targetName!!) + } } + super.visitEnd() } } \ No newline at end of file diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/clazz/MixinAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/clazz/MixinAnnotationVisitor.kt index ec9bfce7..036ee10f 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/clazz/MixinAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/clazz/MixinAnnotationVisitor.kt @@ -33,6 +33,7 @@ class MixinAnnotationVisitor( private val refmap = refmapBuilder.refmap private val mixinName = refmapBuilder.mixinName private val targetClasses = refmapBuilder.targetClasses + private val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("BaseMixin") private val classTargets = mutableListOf() private val classValues = mutableListOf() @@ -48,13 +49,13 @@ class MixinAnnotationVisitor( override fun visitArray(name: String?): AnnotationVisitor { return when (name) { AnnotationElement.TARGETS -> { - return object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { + return object : AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { classTargets.add(value as String) super.visit(name, value) } } - } + } AnnotationElement.VALUE, null -> { return object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { @@ -72,7 +73,11 @@ class MixinAnnotationVisitor( } override fun visitEnd() { - super.visitEnd() + val targets = if (noRefmap && classTargets.isNotEmpty()) { + super.visitArray(AnnotationElement.TARGETS) + } else { + null + } if (remap.get()) { logger.info("existing mappings: $existingMappings") for (target in classTargets.toSet()) { @@ -87,12 +92,20 @@ class MixinAnnotationVisitor( } clz.ifPresent { refmap.addProperty(target, mapper.mapName(it)) + targets?.visit(null, mapper.mapName(it)) } if (!clz.isPresent) { + targets?.visit(null, target) logger.warn("Failed to resolve class $target in mixin ${mixinName.replace('/', '.')}") } } + } else { + for (target in classTargets) { + targets?.visit(null, target) + } } + targets?.visitEnd() targetClasses.addAll((classValues + classTargets.map { it.replace('.', '/') }).toSet()) + super.visitEnd() } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AbstractMethodAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AbstractMethodAnnotationVisitor.kt index e0dc54c4..5353d87c 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AbstractMethodAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AbstractMethodAnnotationVisitor.kt @@ -35,17 +35,13 @@ abstract class AbstractMethodAnnotationVisitor( protected val mixinName = refmapBuilder.mixinName protected val targetClasses = refmapBuilder.targetClasses protected val allowImplicitWildcards = refmapBuilder.allowImplicitWildcards + protected val noRefmap = refmapBuilder.mixinRemapExtension.noRefmap.contains("BaseMixin") override fun visit(name: String?, value: Any) { super.visit(name, value) if (name == AnnotationElement.REMAP) remap.set(value as Boolean) } - override fun visitEnd() { - super.visitEnd() - remapTargetNames() - } - open fun getTargetNameAndDescs(targetMethod: String, wildcard: Boolean): Pair> { val targetDescs = setOf(if (targetMethod.contains("(")) { "(" + targetMethod.substringAfter("(") @@ -60,12 +56,13 @@ abstract class AbstractMethodAnnotationVisitor( return targetName to targetDescs } - open fun remapTargetNames() { + open fun remapTargetNames(noRefmapAcceptor: (String) -> Unit) { if (remap.get()) { outer@for (targetMethod in targetNames) { if (targetMethod == "" || targetMethod == "" || targetMethod == "*" ) { + noRefmapAcceptor(targetMethod) continue } val wildcard = targetMethod.endsWith("*") @@ -111,19 +108,24 @@ abstract class AbstractMethodAnnotationVisitor( val mappedDesc = /* if (implicitWildcard) "" else */ if (wildcard && mappedName != "") "*" else mapper.mapDesc(targetVal) if (targetClasses.size > 1) { refmap.addProperty(targetMethod, "$mappedName$mappedDesc") + noRefmapAcceptor("$mappedName$mappedDesc") } else { refmap.addProperty(targetMethod, "L$mappedClass;$mappedName$mappedDesc") + noRefmapAcceptor("L$mappedClass;$mappedName$mappedDesc") } } - if (target.isPresent) { - continue@outer - } + if (target.isPresent) continue@outer } } logger.warn( "Failed to resolve $annotationName $targetMethod ($targetDescs) on ($methodName$methodDescriptor) $methodSignature in $mixinName" ) + noRefmapAcceptor(targetMethod) + } + } else { + for (targetMethod in targetNames) { + noRefmapAcceptor(targetMethod) } } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AccessorAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AccessorAnnotationVisitor.kt index 6debcc12..72ff05c1 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AccessorAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/AccessorAnnotationVisitor.kt @@ -58,14 +58,25 @@ class AccessorAnnotationVisitor( override val annotationName: String = "@Accessor" override fun visit(name: String?, value: Any) { - super.visit(name, value) + if (!noRefmap) { + super.visit(name, value) + } if (name == AnnotationElement.VALUE || name == null) targetNames.add(value as String) } - override fun remapTargetNames() { + override fun visitEnd() { + remapTargetNames { mappedName -> + if (noRefmap) { + super.visit(AnnotationElement.VALUE, mappedName) + } + } + super.visitEnd() + } + + override fun remapTargetNames(noRefmapAcceptor: (String) -> Unit) { if (remap.get()) { + val prefix = validPrefixes.firstOrNull { methodName.startsWith(it) } val targetNames = if (targetNames.isEmpty()) { - val prefix = validPrefixes.firstOrNull { methodName.startsWith(it) } if (prefix == null) { logger.warn( "Failed to resolve accessor $methodName in mixin ${ @@ -121,12 +132,14 @@ class AccessorAnnotationVisitor( refmap.addProperty(targetName.capitalized(), mappedName) } refmap.addProperty(targetName, mappedName) + noRefmapAcceptor(mappedName) } else { // BUGFIX: it appears 1 length don't lowercase when checking the refmap if (targetName.length == 1) { refmap.addProperty(targetName.capitalized(), "$mappedName:$mappedDesc") } refmap.addProperty(targetName, "$mappedName:$mappedDesc") + noRefmapAcceptor("$mappedName:$mappedDesc") } } if (target.isPresent) return @@ -140,6 +153,9 @@ class AccessorAnnotationVisitor( ) }" ) + if (targetNames.isNotEmpty()) { + noRefmapAcceptor(targetNames.first()) + } } } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InjectAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InjectAnnotationVisitor.kt index 73160cfc..9087e988 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InjectAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InjectAnnotationVisitor.kt @@ -51,22 +51,21 @@ class InjectAnnotationVisitor( } override fun visitArray(name: String): AnnotationVisitor { - val delegate = super.visitArray(name) return when (name) { AnnotationElement.AT -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { AtAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { AtAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.SLICE -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { SliceAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { SliceAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.TARGET -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { DescAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { DescAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, delegate) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -75,11 +74,24 @@ class InjectAnnotationVisitor( } else -> { - delegate + super.visitArray(name) } } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { mappedName -> + method?.visit(null, mappedName) + } + method?.visitEnd() + super.visitEnd() + } + private val callbackInfo = "Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfo" private val callbackInfoReturn = "Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable" diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InvokerAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InvokerAnnotationVisitor.kt index ff4e55d0..72f6d7a0 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InvokerAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/InvokerAnnotationVisitor.kt @@ -58,11 +58,22 @@ class InvokerAnnotationVisitor( } override fun visit(name: String?, value: Any) { - super.visit(name, value) + if (!noRefmap) { + super.visit(name, value) + } if (name == AnnotationElement.VALUE || name == null) targetNames.add(value as String) } - override fun remapTargetNames() { + override fun visitEnd() { + remapTargetNames { + if (noRefmap) { + super.visit(AnnotationElement.VALUE, it) + } + } + super.visitEnd() + } + + override fun remapTargetNames(noRefmapAcceptor: (String) -> Unit) { if (remap.get()) { val targetNames = if (targetNames.isEmpty()) { val prefix = validPrefixes.firstOrNull { methodName.startsWith(it) } @@ -114,6 +125,7 @@ class InvokerAnnotationVisitor( // refmap.addProperty(targetName, mappedName) // } else { refmap.addProperty(targetName, "$mappedName$mappedDesc") + noRefmapAcceptor("$mappedName$mappedDesc") // } } if (target.isPresent) return @@ -127,6 +139,11 @@ class InvokerAnnotationVisitor( ) }" ) + noRefmapAcceptor(targetNames.first()) + } else { + if (targetNames.isNotEmpty()) { + noRefmapAcceptor(targetNames.first()) + } } } } \ No newline at end of file diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/ModifyArgAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/ModifyArgAnnotationVisitor.kt index f6054d0c..ba1799dd 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/ModifyArgAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixin/refmap/annotations/method/ModifyArgAnnotationVisitor.kt @@ -76,7 +76,7 @@ open class ModifyArgAnnotationVisitor( } AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, super.visitArray(name)) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -90,4 +90,17 @@ open class ModifyArgAnnotationVisitor( } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { mappedName -> + method?.visit(null, mappedName) + } + method?.visitEnd() + super.visitEnd() + } + } diff --git a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixinextra/annotations/method/ModifyExpressionValueAnnotationVisitor.kt b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixinextra/annotations/method/ModifyExpressionValueAnnotationVisitor.kt index d65c30e3..8da4e0f9 100644 --- a/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixinextra/annotations/method/ModifyExpressionValueAnnotationVisitor.kt +++ b/src/mapping/kotlin/xyz/wagyourtail/unimined/internal/mapping/extension/mixinextra/annotations/method/ModifyExpressionValueAnnotationVisitor.kt @@ -51,17 +51,16 @@ open class ModifyExpressionValueAnnotationVisitor( } override fun visitArray(name: String): AnnotationVisitor { - val delegate = super.visitArray(name) return when (name) { AnnotationElement.AT -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { AtAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { AtAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.SLICE -> { - ArrayVisitorWrapper(Constant.ASM_VERSION, delegate) { SliceAnnotationVisitor(it, remap, refmapBuilder) } + ArrayVisitorWrapper(Constant.ASM_VERSION, super.visitArray(name)) { SliceAnnotationVisitor(it, remap, refmapBuilder) } } AnnotationElement.METHOD -> { - object: AnnotationVisitor(Constant.ASM_VERSION, delegate) { + object: AnnotationVisitor(Constant.ASM_VERSION, if (noRefmap) null else super.visitArray(name)) { override fun visit(name: String?, value: Any) { super.visit(name, value) targetNames.add(value as String) @@ -69,11 +68,24 @@ open class ModifyExpressionValueAnnotationVisitor( } } else -> { - delegate + super.visitArray(name) } } } + override fun visitEnd() { + val method = if (noRefmap) { + super.visitArray(AnnotationElement.METHOD) + } else { + null + } + remapTargetNames { mappedName -> + method?.visit(null, mappedName) + } + method?.visitEnd() + super.visitEnd() + } + } \ No newline at end of file diff --git a/src/minecraft/kotlin/xyz/wagyourtail/unimined/internal/minecraft/patch/forge/NeoForgedMinecraftTransformer.kt b/src/minecraft/kotlin/xyz/wagyourtail/unimined/internal/minecraft/patch/forge/NeoForgedMinecraftTransformer.kt index 99e08cc4..e7e6b5d4 100644 --- a/src/minecraft/kotlin/xyz/wagyourtail/unimined/internal/minecraft/patch/forge/NeoForgedMinecraftTransformer.kt +++ b/src/minecraft/kotlin/xyz/wagyourtail/unimined/internal/minecraft/patch/forge/NeoForgedMinecraftTransformer.kt @@ -4,6 +4,7 @@ import com.google.gson.JsonObject import org.gradle.api.Project import org.gradle.api.artifacts.Dependency import xyz.wagyourtail.unimined.api.minecraft.patch.NeoForgedPatcher +import xyz.wagyourtail.unimined.api.task.RemapJarTask import xyz.wagyourtail.unimined.api.unimined import xyz.wagyourtail.unimined.internal.minecraft.MinecraftProvider import xyz.wagyourtail.unimined.internal.minecraft.patch.forge.fg3.FG3MinecraftTransformer @@ -11,6 +12,7 @@ import xyz.wagyourtail.unimined.internal.minecraft.patch.jarmod.JarModMinecraftT import xyz.wagyourtail.unimined.internal.minecraft.resolver.parseAllLibraries import xyz.wagyourtail.unimined.util.FinalizeOnWrite import xyz.wagyourtail.unimined.util.MustSet +import xyz.wagyourtail.unimined.util.SemVerUtils class NeoForgedMinecraftTransformer(project: Project, provider: MinecraftProvider) : ForgeLikeMinecraftTransformer(project, provider, "NeoForged"), NeoForgedPatcher { @@ -57,4 +59,13 @@ class NeoForgedMinecraftTransformer(project: Project, provider: MinecraftProvide tweakClassClient = args.split("--tweakClass")[1].trim() } + override fun configureRemapJar(task: RemapJarTask) { + if (provider.version != "1.20.1") { + project.logger.info("setting `disableRefmap()` in mixinRemap") + task.mixinRemap { + disableRefmap() + } + } + } + } diff --git a/src/mods/kotlin/xyz/wagyourtail/unimined/internal/mods/ModsProvider.kt b/src/mods/kotlin/xyz/wagyourtail/unimined/internal/mods/ModsProvider.kt index 2b230ade..4102eb10 100644 --- a/src/mods/kotlin/xyz/wagyourtail/unimined/internal/mods/ModsProvider.kt +++ b/src/mods/kotlin/xyz/wagyourtail/unimined/internal/mods/ModsProvider.kt @@ -1,6 +1,5 @@ package xyz.wagyourtail.unimined.internal.mods -import net.fabricmc.tinyremapper.TinyRemapper import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.jetbrains.annotations.ApiStatus