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