package com.laboki.eclipse.plugin.smartsave.checkers; import org.eclipse.ui.IEditorPart; import com.google.common.base.Optional; import com.google.common.eventbus.Subscribe; import com.laboki.eclipse.plugin.smartsave.contexts.AnnotationContext; import com.laboki.eclipse.plugin.smartsave.contexts.EditorContext; import com.laboki.eclipse.plugin.smartsave.events.CheckWarningEvent; import com.laboki.eclipse.plugin.smartsave.events.SaveEvent; import com.laboki.eclipse.plugin.smartsave.instance.EventBusInstance; import com.laboki.eclipse.plugin.smartsave.main.EventBus; import com.laboki.eclipse.plugin.smartsave.main.Scheduler; import com.laboki.eclipse.plugin.smartsave.preferences.Store; import com.laboki.eclipse.plugin.smartsave.task.AsyncTask; public final class WarningChecker extends EventBusInstance { private final Optional<IEditorPart> editor = EditorContext.getEditor(); @Subscribe public void eventHandler(final CheckWarningEvent event) { new AsyncTask() { @Override public void execute() { if (this.editorHasNoWarnings()) this.broadcastEvent(); } private boolean editorHasNoWarnings() { return !this.editorHasWarnings(); } private boolean editorHasWarnings() { return this.canCheckWarning() && this.hasWarnings(); } private boolean canCheckWarning() { return !Store.getCanSaveIfWarnings(); } private boolean hasWarnings() { return AnnotationContext.hasWarnings(WarningChecker.this.editor); } private void broadcastEvent() { EventBus.post(new SaveEvent()); } }.setDelay(Scheduler.DELAY) .setFamily(Scheduler.FAMILY) .setRule(Scheduler.RULE) .start(); } }