From 9ea7f45fa7395eac8a6bdcad04e46e14bde5db9b Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Fri, 7 Jul 2023 18:05:02 +0100 Subject: [PATCH] Fix class cast exception with ObjectSource We were generating methods with the original object, rather than the extra one. Updated our tests to actually catch this. Unfortunately the only places we use this interface is in HTTP responses and transferred files, neither of which show up in the Lua-side tests. --- .../dan200/computercraft/core/asm/MethodSupplierImpl.java | 2 +- .../test/java/dan200/computercraft/core/asm/MethodTest.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/projects/core/src/main/java/dan200/computercraft/core/asm/MethodSupplierImpl.java b/projects/core/src/main/java/dan200/computercraft/core/asm/MethodSupplierImpl.java index 44e5775e4..16141485d 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/asm/MethodSupplierImpl.java +++ b/projects/core/src/main/java/dan200/computercraft/core/asm/MethodSupplierImpl.java @@ -76,7 +76,7 @@ final class MethodSupplierImpl implements MethodSupplier { for (var extra : source.getExtra()) { var extraMethods = getMethods(extra.getClass()); if (!extraMethods.isEmpty()) hasMethods = true; - for (var method : extraMethods) consumer.accept(object, method.name(), method.method(), method); + for (var method : extraMethods) consumer.accept(extra, method.name(), method.method(), method); } } diff --git a/projects/core/src/test/java/dan200/computercraft/core/asm/MethodTest.java b/projects/core/src/test/java/dan200/computercraft/core/asm/MethodTest.java index a61b15ec0..c40525007 100644 --- a/projects/core/src/test/java/dan200/computercraft/core/asm/MethodTest.java +++ b/projects/core/src/test/java/dan200/computercraft/core/asm/MethodTest.java @@ -58,7 +58,7 @@ public class MethodTest { @Test public void testExtra() { - ComputerBootstrap.run("assert(extra.go, 'go')\nassert(extra.go2, 'go2')", + ComputerBootstrap.run("assert(extra.go() == nil, 'go')\nassert(extra.go2() == 456, 'go2')", x -> x.addApi(new ExtraObject()), 50); } @@ -163,7 +163,8 @@ public class MethodTest { } @LuaFunction - public final void go2() { + public final int go2() { + return 456; } @Override