Skip to content

Commit d45da06

Browse files
committed
Add support for the NoLoad annotation
1 parent 904287d commit d45da06

5 files changed

Lines changed: 24 additions & 5 deletions

File tree

src/main/java/jaci/openrio/toast/core/loader/RobotLoader.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import jaci.openrio.toast.core.ToastConfiguration;
66
import jaci.openrio.toast.core.io.usb.MassStorageDevice;
77
import jaci.openrio.toast.core.io.usb.USBMassStorage;
8+
import jaci.openrio.toast.core.loader.annotation.NoLoad;
89
import jaci.openrio.toast.core.loader.module.ModuleCandidate;
910
import jaci.openrio.toast.core.loader.module.ModuleContainer;
1011
import jaci.openrio.toast.core.thread.ToastThreadPool;
1112
import jaci.openrio.toast.lib.log.Logger;
12-
import jaci.openrio.toast.lib.module.ToastIterativeModule;
1313
import jaci.openrio.toast.lib.module.ToastModule;
14-
import jaci.openrio.toast.lib.module.ToastStateModule;
1514

1615
import java.io.File;
1716
import java.io.FilenameFilter;
@@ -346,7 +345,7 @@ public static void postCore() {
346345
static void parseClass(String clazz, ModuleCandidate candidate) {
347346
try {
348347
Class c = Class.forName(clazz);
349-
if (ToastModule.class.isAssignableFrom(c) && isNotDefault(c)) {
348+
if (ToastModule.class.isAssignableFrom(c) && classLoadable(c)) {
350349
ModuleContainer container = new ModuleContainer(c, candidate);
351350
getContainers().add(container);
352351
if (threaded) {
@@ -361,8 +360,8 @@ static void parseClass(String clazz, ModuleCandidate candidate) {
361360
/**
362361
* Checks if the class is a default class created by Toast. If it is, ignore it as it serves no purpose.
363362
*/
364-
static boolean isNotDefault(Class clazz) {
365-
return !(clazz.equals(ToastModule.class) || clazz.equals(ToastStateModule.class) || clazz.equals(ToastIterativeModule.class));
363+
static boolean classLoadable(Class clazz) {
364+
return !clazz.isAnnotationPresent(NoLoad.class);
366365
}
367366

368367
/**
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package jaci.openrio.toast.core.loader.annotation;
2+
3+
import java.lang.annotation.Retention;
4+
import java.lang.annotation.RetentionPolicy;
5+
6+
/**
7+
* Placing this annotation on a {@link jaci.openrio.toast.lib.module.ToastModule} class will cause the loader to not
8+
* recognize the module as a valid candidate. This is used for ToastModules that are used as abstract classes or designed
9+
* to be extended by other classes. This should be placed above the class definition.
10+
*
11+
* @author Jaci
12+
*/
13+
@Retention(RetentionPolicy.RUNTIME)
14+
public @interface NoLoad { }

src/main/java/jaci/openrio/toast/lib/module/ToastIterativeModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import edu.wpi.first.wpilibj.Timer;
44
import jaci.openrio.toast.core.StateTracker;
5+
import jaci.openrio.toast.core.loader.annotation.NoLoad;
56
import jaci.openrio.toast.lib.state.RobotState;
67
import jaci.openrio.toast.lib.state.StateListener;
78

@@ -11,6 +12,7 @@
1112
*
1213
* @author Jaci
1314
*/
15+
@NoLoad
1416
public abstract class ToastIterativeModule extends ToastStateModule {
1517

1618
/**

src/main/java/jaci/openrio/toast/lib/module/ToastModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package jaci.openrio.toast.lib.module;
22

3+
import jaci.openrio.toast.core.loader.annotation.NoLoad;
34
import jaci.openrio.toast.core.loader.module.ModuleContainer;
45

56
/**
@@ -8,6 +9,7 @@
89
*
910
* @author Jaci
1011
*/
12+
@NoLoad
1113
public abstract class ToastModule {
1214

1315
/**

src/main/java/jaci/openrio/toast/lib/module/ToastStateModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package jaci.openrio.toast.lib.module;
22

33
import jaci.openrio.toast.core.StateTracker;
4+
import jaci.openrio.toast.core.loader.annotation.NoLoad;
45
import jaci.openrio.toast.lib.state.RobotState;
56
import jaci.openrio.toast.lib.state.StateListener;
67

@@ -13,6 +14,7 @@
1314
*
1415
* @author Jaci
1516
*/
17+
@NoLoad
1618
public abstract class ToastStateModule extends ToastModule implements StateListener.Ticker, StateListener.Transition {
1719

1820
/**

0 commit comments

Comments
 (0)