diff --git a/src/main/java/io/papermc/asm/rules/method/FilteredMethodRewriteRule.java b/src/main/java/io/papermc/asm/rules/method/FilteredMethodRewriteRule.java index 59a2c8d..17ac9d7 100644 --- a/src/main/java/io/papermc/asm/rules/method/FilteredMethodRewriteRule.java +++ b/src/main/java/io/papermc/asm/rules/method/FilteredMethodRewriteRule.java @@ -19,7 +19,7 @@ public interface FilteredMethodRewriteRule extends MethodRewriteRule, OwnableRewriteRule { private static String transformExecutableName(final Executable executable) { - return executable instanceof Constructor ? "" : executable.getName(); + return executable instanceof Constructor ? StaticRewrite.CONSTRUCTOR_METHOD_NAME : executable.getName(); } MethodMatcher methodMatcher(); diff --git a/src/main/java/io/papermc/asm/rules/method/MethodRewriteRule.java b/src/main/java/io/papermc/asm/rules/method/MethodRewriteRule.java index 80d6cee..0999c8b 100644 --- a/src/main/java/io/papermc/asm/rules/method/MethodRewriteRule.java +++ b/src/main/java/io/papermc/asm/rules/method/MethodRewriteRule.java @@ -43,7 +43,7 @@ public void visitMethodInsn(final int opcode, final String owner, final String n @Override public void visitInvokeDynamicInsn(final String name, final String descriptor, final Handle bootstrapMethodHandle, final Object... bootstrapMethodArguments) { if (LAMBDA_METAFACTORY_OWNER.equals(bootstrapMethodHandle.getOwner()) && bootstrapMethodArguments.length > 1 && bootstrapMethodArguments[1] instanceof final Handle handle) { - if (MethodRewriteRule.this.shouldProcess(context, handle.getTag(), handle.getOwner(), name, descriptor, handle.isInterface())) { + if (MethodRewriteRule.this.shouldProcess(context, handle.getTag(), handle.getOwner(), handle.getName(), handle.getDesc(), handle.isInterface())) { final @Nullable Rewrite rewrite = MethodRewriteRule.this.rewrite(context, true, handle.getTag(), handle.getOwner(), handle.getName(), methodDesc(handle.getDesc()), handle.isInterface()); if (rewrite != null) { bootstrapMethodArguments[1] = rewrite.createHandle(); diff --git a/src/main/java/io/papermc/asm/rules/method/StaticRewrite.java b/src/main/java/io/papermc/asm/rules/method/StaticRewrite.java index 3768525..7d10131 100644 --- a/src/main/java/io/papermc/asm/rules/method/StaticRewrite.java +++ b/src/main/java/io/papermc/asm/rules/method/StaticRewrite.java @@ -28,6 +28,8 @@ public interface StaticRewrite extends FilteredMethodRewriteRule { + String CONSTRUCTOR_METHOD_NAME = ""; + ClassDesc staticRedirectOwner(); default MethodTypeDesc modifyMethodDescriptor(final MethodTypeDesc bytecodeDescriptor) { @@ -39,7 +41,7 @@ default MethodRewriteRule.Rewrite rewrite(final ClassProcessingContext context, if (isVirtual(opcode, invokeDynamic) || isInterface(opcode, invokeDynamic)) { // insert owner object as first param descriptor = descriptor.insertParameterTypes(0, fromOwner(owner)); } else if (isSpecial(opcode, invokeDynamic)) { - if ("".equals(name)) { + if (CONSTRUCTOR_METHOD_NAME.equals(name)) { name = "create" + owner.substring(owner.lastIndexOf('/') + 1); descriptor = descriptor.changeReturnType(fromOwner(owner)); return new RewriteConstructor(this.staticRedirectOwner(), owner, name, this.modifyMethodDescriptor(descriptor)); @@ -61,7 +63,7 @@ public void apply(final MethodVisitor delegate, final MethodNode context) { boolean handled = false; final Deque typeStack = new ArrayDeque<>(); while (insn != null) { - if (insn.getOpcode() == Opcodes.INVOKESPECIAL && "".equals(((MethodInsnNode) insn).name)) { + if (insn.getOpcode() == Opcodes.INVOKESPECIAL && CONSTRUCTOR_METHOD_NAME.equals(((MethodInsnNode) insn).name)) { typeStack.push(((MethodInsnNode) insn).owner); } if (wasDup && insn.getOpcode() == Opcodes.NEW) {