package ru.naumen.gintonic.command;
import static ru.naumen.gintonic.utils.CollectionUtils.getFirst;
import java.util.List;
import ru.naumen.gintonic.GinTonicPlugin;
import ru.naumen.gintonic.guice.injection.IInjectionPoint;
import ru.naumen.gintonic.guice.statements.BindingDefinition;
import ru.naumen.gintonic.project.navigate.selection.ICompilationUnitSelection;
import ru.naumen.gintonic.project.source.references.SourceCodeReference;
import ru.naumen.gintonic.utils.ListUtils;
import ru.naumen.gintonic.widgets.Widgets;
/**
* Jumps from an {@link IInjectionPoint} to its binding definition(s).
*
* @author tmajunke
*/
public class CycleBindingsHandler extends BaseBindingHandler {
private BindingNavigationCycle navigationCycle;
@Override
protected void makeCommand(ICompilationUnitSelection compilationUnitSelection,
SourceCodeReference currentCodeLocation, IInjectionPoint injectionPoint) {
List<BindingDefinition> bindingDefinitions = guiceIndex.getBindingDefinitions(injectionPoint);
if (!bindingDefinitions.isEmpty()) {
BindingDefinition bindingDefinition = null;
if(bindingDefinitions.size() > 1) {
bindingDefinition = Widgets.showUserSelectWithSelected(bindingDefinitions, getFirst(bindingDefinitions));
if(bindingDefinition == null) {
return;
}
}
if(bindingDefinitions.size() > 0) {
bindingDefinition = getFirst(bindingDefinitions);
}
navigationCycle = new BindingNavigationCycle(currentCodeLocation, ListUtils.newArrayList(bindingDefinition));
navigationCycle.jumpToNext();
} else {
GinTonicPlugin.logInfo("No binding definition found for injection point " + injectionPoint);
}
}
}