package tc.oc.minecraft.scheduler; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import javax.inject.Qualifier; import com.google.inject.BindingAnnotation; import tc.oc.commons.core.reflect.AnnotationBase; /** * Binding qualifier for executors that are synchronized with the "main" * thread of the server, if there is one. * * @see MinecraftExecutorManifest */ @Qualifier @BindingAnnotation @Retention(RetentionPolicy.RUNTIME) public @interface Sync { /** * If true, tasks are always queued, even if submitted from the main thread. * * If false, tasks that are submitted from the main thread will run immediately. */ boolean defer() default false; Sync immediate = new SyncImpl() { @Override public boolean defer() { return false; } }; Sync deferred = new SyncImpl() { @Override public boolean defer() { return true; } }; } abstract class SyncImpl extends AnnotationBase implements Sync {}