User: joe Date: 03 Feb 24 20:28 Revision: 57dcef7a20c5725ef5bb010fb7ddd68d221ec956 Summary: Support all types of NEW target TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9102&personal=false Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision ca2d85fc98d60d8ad33c3815d877b7bc1e5fff27) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision 57dcef7a20c5725ef5bb010fb7ddd68d221ec956) @@ -219,11 +219,30 @@ if (!at.hasQualifiedName(AT)) return null if (at.findAttributeValue("value")?.constantStringValue != "NEW") return null - return NewInsnSelector(value) + val strippedValue = value.replace(" ", "") + return if (strippedValue.startsWith('(')) { + NewInsnDescriptorSelector(strippedValue) + } else { + NewInsnTypeSelector(strippedValue) - } -} + } + } +} -private class NewInsnSelector( +private class NewInsnTypeSelector( + override val owner: String, +) : MixinSelector { + override fun matchField(owner: String, name: String, desc: String) = false + + override fun matchMethod(owner: String, name: String, desc: String): Boolean { + return name == "" && owner == this.owner + } + + override val fieldDescriptor = null + override val methodDescriptor = null + override val displayName = owner +} + +private class NewInsnDescriptorSelector( override val methodDescriptor: String, ) : MixinSelector { override fun matchField(owner: String, name: String, desc: String): Boolean = false Index: src/main/kotlin/platform/mixin/reference/MixinSelectors.kt =================================================================== --- src/main/kotlin/platform/mixin/reference/MixinSelectors.kt (revision ca2d85fc98d60d8ad33c3815d877b7bc1e5fff27) +++ src/main/kotlin/platform/mixin/reference/MixinSelectors.kt (revision 57dcef7a20c5725ef5bb010fb7ddd68d221ec956) @@ -240,6 +240,11 @@ } owner = internalOwner.replace('/', '.') + + // if owner is all there is to the selector, match anything with the owner + if (pos == reference.length - 1) { + return MemberReference("", null, owner, matchAllNames = true, matchAllDescs = true) + } } else { // No owner/qualifier specified pos = -1