diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index aaafdfd01..b96d5c3db 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -149,8 +149,12 @@ - + + + + + diff --git a/src/main/java/dan200/computercraft/api/lua/ILuaContext.java b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java index 70502b535..4d29b57d1 100644 --- a/src/main/java/dan200/computercraft/api/lua/ILuaContext.java +++ b/src/main/java/dan200/computercraft/api/lua/ILuaContext.java @@ -40,5 +40,8 @@ public interface ILuaContext * @throws LuaException If the task could not be queued, or if the task threw an exception. */ @Nonnull - MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException; + default MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException + { + return TaskCallback.make( this, task ); + } } diff --git a/src/main/java/dan200/computercraft/core/asm/TaskCallback.java b/src/main/java/dan200/computercraft/api/lua/TaskCallback.java similarity index 58% rename from src/main/java/dan200/computercraft/core/asm/TaskCallback.java rename to src/main/java/dan200/computercraft/api/lua/TaskCallback.java index 1298391e4..85870a221 100644 --- a/src/main/java/dan200/computercraft/core/asm/TaskCallback.java +++ b/src/main/java/dan200/computercraft/api/lua/TaskCallback.java @@ -1,16 +1,14 @@ /* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com + * This file is part of the public ComputerCraft API - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2021. This API may be redistributed unmodified and in full only. + * For help using the API, and posting your mods, visit the forums at computercraft.info. */ -package dan200.computercraft.core.asm; - -import dan200.computercraft.api.lua.*; +package dan200.computercraft.api.lua; import javax.annotation.Nonnull; import java.util.Arrays; -public final class TaskCallback implements ILuaCallback +final class TaskCallback implements ILuaCallback { private final MethodResult pull = MethodResult.pullEvent( "task_complete", this ); private final long task; @@ -47,19 +45,7 @@ public final class TaskCallback implements ILuaCallback } } - static Object[] checkUnwrap( MethodResult result ) - { - if( result.getCallback() != null ) - { - // Due to how tasks are implemented, we can't currently return a MethodResult. This is an - // entirely artificial limitation - we can remove it if it ever becomes an issue. - throw new IllegalStateException( "Cannot return MethodResult for mainThread task." ); - } - - return result.getResult(); - } - - public static MethodResult make( ILuaContext context, ILuaTask func ) throws LuaException + static MethodResult make( ILuaContext context, ILuaTask func ) throws LuaException { long task = context.issueMainThreadTask( func ); return new TaskCallback( task ).pull; diff --git a/src/main/java/dan200/computercraft/core/asm/LuaMethod.java b/src/main/java/dan200/computercraft/core/asm/LuaMethod.java index b0562835c..281ab9c56 100644 --- a/src/main/java/dan200/computercraft/core/asm/LuaMethod.java +++ b/src/main/java/dan200/computercraft/core/asm/LuaMethod.java @@ -13,7 +13,7 @@ import java.util.Collections; public interface LuaMethod { Generator GENERATOR = new Generator<>( LuaMethod.class, Collections.singletonList( ILuaContext.class ), - m -> ( target, context, args ) -> TaskCallback.make( context, () -> TaskCallback.checkUnwrap( m.apply( target, context, args ) ) ) + m -> ( target, context, args ) -> context.executeMainThreadTask( () -> ResultHelpers.checkNormalResult( m.apply( target, context, args ) ) ) ); IntCache DYNAMIC = new IntCache<>( diff --git a/src/main/java/dan200/computercraft/core/asm/PeripheralMethod.java b/src/main/java/dan200/computercraft/core/asm/PeripheralMethod.java index 38618442f..146896b04 100644 --- a/src/main/java/dan200/computercraft/core/asm/PeripheralMethod.java +++ b/src/main/java/dan200/computercraft/core/asm/PeripheralMethod.java @@ -18,7 +18,7 @@ import java.util.Arrays; public interface PeripheralMethod { Generator GENERATOR = new Generator<>( PeripheralMethod.class, Arrays.asList( ILuaContext.class, IComputerAccess.class ), - m -> ( target, context, computer, args ) -> TaskCallback.make( context, () -> TaskCallback.checkUnwrap( m.apply( target, context, computer, args ) ) ) + m -> ( target, context, computer, args ) -> context.executeMainThreadTask( () -> ResultHelpers.checkNormalResult( m.apply( target, context, computer, args ) ) ) ); IntCache DYNAMIC = new IntCache<>( diff --git a/src/main/java/dan200/computercraft/core/asm/ResultHelpers.java b/src/main/java/dan200/computercraft/core/asm/ResultHelpers.java new file mode 100644 index 000000000..7b9b464b2 --- /dev/null +++ b/src/main/java/dan200/computercraft/core/asm/ResultHelpers.java @@ -0,0 +1,27 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2021. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.core.asm; + +import dan200.computercraft.api.lua.MethodResult; + +final class ResultHelpers +{ + private ResultHelpers() + { + } + + static Object[] checkNormalResult( MethodResult result ) + { + if( result.getCallback() != null ) + { + // Due to how tasks are implemented, we can't currently return a MethodResult. This is an + // entirely artificial limitation - we can remove it if it ever becomes an issue. + throw new IllegalStateException( "Must return MethodResult.of from mainThread function." ); + } + + return result.getResult(); + } +} diff --git a/src/main/java/dan200/computercraft/core/computer/MainThread.java b/src/main/java/dan200/computercraft/core/computer/MainThread.java index 8f53541e2..1c77e3692 100644 --- a/src/main/java/dan200/computercraft/core/computer/MainThread.java +++ b/src/main/java/dan200/computercraft/core/computer/MainThread.java @@ -93,7 +93,7 @@ public final class MainThread executor.updateTime(); // We're not currently on the queue, so update its current execution time to - // ensure its at least as high as the minimum. + // ensure it's at least as high as the minimum. long newRuntime = minimumTime; // Slow down new computers a little bit. diff --git a/src/main/java/dan200/computercraft/core/lua/LuaContext.java b/src/main/java/dan200/computercraft/core/lua/LuaContext.java index 0e5c792c8..626d15fad 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaContext.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaContext.java @@ -9,8 +9,6 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; -import dan200.computercraft.api.lua.MethodResult; -import dan200.computercraft.core.asm.TaskCallback; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.MainThread; @@ -68,11 +66,4 @@ class LuaContext implements ILuaContext throw new LuaException( "Task limit exceeded" ); } } - - @Nonnull - @Override - public MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException - { - return TaskCallback.make( this, task ); - } } diff --git a/src/main/java/dan200/computercraft/data/BasicCustomLoader.java b/src/main/java/dan200/computercraft/data/BasicCustomLoader.java index 6316aeeb6..5c1fd5cde 100644 --- a/src/main/java/dan200/computercraft/data/BasicCustomLoader.java +++ b/src/main/java/dan200/computercraft/data/BasicCustomLoader.java @@ -26,7 +26,7 @@ public class BasicCustomLoader> extends CustomLoaderBu public static > BiFunction> makeFactory( ResourceLocation id ) { - return makeFactory( id, j -> { } ); + return makeFactory( id, j -> {} ); } public static > BiFunction> makeFactory( ResourceLocation id, Consumer extra ) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/generic/data/DataHelpers.java b/src/main/java/dan200/computercraft/shared/peripheral/generic/data/DataHelpers.java index 96d0699b1..49f2c92be 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/generic/data/DataHelpers.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/generic/data/DataHelpers.java @@ -17,7 +17,7 @@ import java.util.Map; public final class DataHelpers { private DataHelpers() - { } + {} @Nonnull public static Map getTags( @Nonnull Collection tags ) diff --git a/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java b/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java index 82ea9bb93..8c3c981cd 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java +++ b/src/main/java/dan200/computercraft/shared/turtle/apis/TurtleAPI.java @@ -13,7 +13,6 @@ import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.event.TurtleActionEvent; import dan200.computercraft.api.turtle.event.TurtleInspectItemEvent; import dan200.computercraft.core.apis.IAPIEnvironment; -import dan200.computercraft.core.asm.TaskCallback; import dan200.computercraft.core.tracking.TrackingField; import dan200.computercraft.shared.peripheral.generic.data.ItemData; import dan200.computercraft.shared.peripheral.generic.methods.InventoryMethods; @@ -770,7 +769,7 @@ public class TurtleAPI implements ILuaAPI { int actualSlot = checkSlot( slot ).orElse( turtle.getSelectedSlot() ); return detailed.orElse( false ) - ? TaskCallback.make( context, () -> getItemDetail( actualSlot, true ) ) + ? context.executeMainThreadTask( () -> getItemDetail( actualSlot, true ) ) : MethodResult.of( getItemDetail( actualSlot, false ) ); } diff --git a/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java b/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java index 3950e813b..1c50dc779 100644 --- a/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java +++ b/src/test/java/dan200/computercraft/core/apis/ObjectWrapper.java @@ -8,7 +8,6 @@ package dan200.computercraft.core.apis; import dan200.computercraft.api.lua.*; import dan200.computercraft.core.asm.LuaMethod; import dan200.computercraft.core.asm.NamedMethod; -import dan200.computercraft.core.asm.TaskCallback; import javax.annotation.Nonnull; import java.util.HashMap; @@ -65,11 +64,4 @@ public class ObjectWrapper implements ILuaContext { throw new IllegalStateException( "Method should never queue events" ); } - - @Nonnull - @Override - public MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException - { - return TaskCallback.make( this, task ); - } } diff --git a/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java b/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java index 314c92bf8..21aec5288 100644 --- a/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java +++ b/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java @@ -124,7 +124,7 @@ public class GeneratorTest { @LuaFunction public final void go() - { } + {} } public static class Basic2 extends Basic @@ -139,14 +139,14 @@ public class GeneratorTest { @LuaFunction public final void go() - { } + {} } public static class NonInstance { @LuaFunction public static void go() - { } + {} } public static class IllegalThrows @@ -162,42 +162,42 @@ public class GeneratorTest { @LuaFunction( { "go1", "go2" } ) public final void go() - { } + {} } public static class ArgKinds { @LuaFunction public final void objectArg( Object arg ) - { } + {} @LuaFunction public final void intArg( int arg ) - { } + {} @LuaFunction public final void optIntArg( Optional arg ) - { } + {} @LuaFunction public final void context( ILuaContext arg ) - { } + {} @LuaFunction public final void arguments( IArguments arg ) - { } + {} @LuaFunction public final void unknown( IComputerAccess arg ) - { } + {} @LuaFunction public final void illegalMap( Map arg ) - { } + {} @LuaFunction public final void optIllegalMap( Optional> arg ) - { } + {} } public static class EnumMethods @@ -219,7 +219,7 @@ public class GeneratorTest { @LuaFunction( mainThread = true ) public final void go() - { } + {} } private static T find( Collection> methods, String name ) @@ -256,12 +256,5 @@ public class GeneratorTest { return 0; } - - @Nonnull - @Override - public MethodResult executeMainThreadTask( @Nonnull ILuaTask task ) throws LuaException - { - return TaskCallback.make( this, task ); - } }; }