From 4a5e03c11a4698b841ced723c38260a4df5be63f Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Mon, 26 Jun 2023 18:51:14 +0100 Subject: [PATCH] Convert NamedMethod into a record --- .../peripheral/generic/SaturatedMethod.java | 4 +- .../core/apis/PeripheralAPI.java | 2 +- .../computercraft/core/asm/NamedMethod.java | 45 +++++++------------ .../core/lua/CobaltLuaMachine.java | 6 +-- .../core/apis/ObjectWrapper.java | 2 +- .../computercraft/core/asm/GeneratorTest.java | 8 ++-- .../generic/GenericPeripheralProvider.java | 2 +- .../generic/GenericPeripheralProvider.java | 2 +- 8 files changed, 28 insertions(+), 43 deletions(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/SaturatedMethod.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/SaturatedMethod.java index 78049da8c..d43a30de0 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/SaturatedMethod.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/SaturatedMethod.java @@ -19,8 +19,8 @@ final class SaturatedMethod { SaturatedMethod(Object target, NamedMethod method) { this.target = target; - name = method.getName(); - this.method = method.getMethod(); + name = method.name(); + this.method = method.method(); } MethodResult apply(ILuaContext context, IComputerAccess computer, IArguments args) throws LuaException { diff --git a/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java b/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java index 5c8ab85d4..cfdaea0e3 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java +++ b/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java @@ -328,7 +328,7 @@ public static Map getMethods(IPeripheral peripheral) { methodMap.put(dynamicMethods[i], PeripheralMethod.DYNAMIC.get(i)); } for (var method : methods) { - methodMap.put(method.getName(), method.getMethod()); + methodMap.put(method.name(), method.method()); } return methodMap; } diff --git a/projects/core/src/main/java/dan200/computercraft/core/asm/NamedMethod.java b/projects/core/src/main/java/dan200/computercraft/core/asm/NamedMethod.java index 35f5c51c7..4c4cfbf8d 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/asm/NamedMethod.java +++ b/projects/core/src/main/java/dan200/computercraft/core/asm/NamedMethod.java @@ -4,38 +4,23 @@ package dan200.computercraft.core.asm; +import dan200.computercraft.api.lua.LuaFunction; +import dan200.computercraft.api.lua.MethodResult; +import dan200.computercraft.api.peripheral.GenericPeripheral; import dan200.computercraft.api.peripheral.PeripheralType; import javax.annotation.Nullable; -public final class NamedMethod { - private final String name; - private final T method; - private final boolean nonYielding; - - private final @Nullable PeripheralType genericType; - - NamedMethod(String name, T method, boolean nonYielding, @Nullable PeripheralType genericType) { - this.name = name; - this.method = method; - this.nonYielding = nonYielding; - this.genericType = genericType; - } - - public String getName() { - return name; - } - - public T getMethod() { - return method; - } - - public boolean nonYielding() { - return nonYielding; - } - - @Nullable - public PeripheralType getGenericType() { - return genericType; - } +/** + * A method generated from a {@link LuaFunction}. + * + * @param name The name of this method. + * @param method The underlying method implementation. + * @param nonYielding If this method is guaranteed to never yield, and will always return a + * {@linkplain MethodResult#of(Object...) basic result}. + * @param genericType The peripheral type of this method. This is only set if this is a method on a + * {@link GenericPeripheral}. + * @param The type of method, either a {@link LuaMethod} or {@link PeripheralMethod}. + */ +public record NamedMethod(String name, T method, boolean nonYielding, @Nullable PeripheralType genericType) { } diff --git a/projects/core/src/main/java/dan200/computercraft/core/lua/CobaltLuaMachine.java b/projects/core/src/main/java/dan200/computercraft/core/lua/CobaltLuaMachine.java index 40174a438..7ce55baa1 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/lua/CobaltLuaMachine.java +++ b/projects/core/src/main/java/dan200/computercraft/core/lua/CobaltLuaMachine.java @@ -172,9 +172,9 @@ private LuaTable wrapLuaObject(Object object) { } ObjectSource.allMethods(LuaMethod.GENERATOR, object, (instance, method) -> - table.rawset(method.getName(), method.nonYielding() - ? new BasicFunction(this, method.getMethod(), instance, context, method.getName()) - : new ResultInterpreterFunction(this, method.getMethod(), instance, context, method.getName()))); + table.rawset(method.name(), method.nonYielding() + ? new BasicFunction(this, method.method(), instance, context, method.name()) + : new ResultInterpreterFunction(this, method.method(), instance, context, method.name()))); try { if (table.next(Constants.NIL).first().isNil()) return null; diff --git a/projects/core/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java b/projects/core/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java index e8370ed84..513848e7b 100644 --- a/projects/core/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java +++ b/projects/core/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java @@ -28,7 +28,7 @@ public ObjectWrapper(Object object) { methodMap.put(dynamicMethods[i], LuaMethod.DYNAMIC.get(i)); } for (var method : methods) { - methodMap.put(method.getName(), method.getMethod()); + methodMap.put(method.name(), method.method()); } } diff --git a/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java b/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java index 94b33f0d3..85de1ba28 100644 --- a/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java +++ b/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java @@ -44,7 +44,7 @@ public void testIdenticalMethods() { var methods = LuaMethod.GENERATOR.getMethods(Basic.class); var methods2 = LuaMethod.GENERATOR.getMethods(Basic2.class); assertThat(methods, contains(named("go"))); - assertThat(methods.get(0).getMethod(), sameInstance(methods2.get(0).getMethod())); + assertThat(methods.get(0).method(), sameInstance(methods2.get(0).method())); } @Test @@ -217,8 +217,8 @@ public final void invalid(LuaTable table) { private static T find(Collection> methods, String name) { return methods.stream() - .filter(x -> x.getName().equals(name)) - .map(NamedMethod::getMethod) + .filter(x -> x.name().equals(name)) + .map(NamedMethod::method) .findAny() .orElseThrow(NullPointerException::new); } @@ -235,7 +235,7 @@ public static Matcher one(Matcher object) { } public static Matcher> named(String method) { - return contramap(is(method), "name", NamedMethod::getName); + return contramap(is(method), "name", NamedMethod::name); } private static final ILuaContext CONTEXT = new ILuaContext() { diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java b/projects/fabric/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java index 4b36a5d84..de61e0d69 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java @@ -71,7 +71,7 @@ void addMethods(Object target, List> methods) { // If we have a peripheral type, use it. Always pick the smallest one, so it's consistent (assuming mods // don't change). - var type = method.getGenericType(); + var type = method.genericType(); if (type != null && type.getPrimaryType() != null) { var name = type.getPrimaryType(); if (this.name == null || this.name.compareTo(name) > 0) this.name = name; diff --git a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java index a2a26e65a..c9a59e366 100644 --- a/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java +++ b/projects/forge/src/main/java/dan200/computercraft/shared/peripheral/generic/GenericPeripheralProvider.java @@ -71,7 +71,7 @@ void addMethods(Object target, List> methods) { // If we have a peripheral type, use it. Always pick the smallest one, so it's consistent (assuming mods // don't change). - var type = method.getGenericType(); + var type = method.genericType(); if (type != null && type.getPrimaryType() != null) { var name = type.getPrimaryType(); if (this.name == null || this.name.compareTo(name) > 0) this.name = name;