package jetbrains.mps.lang.editor.menus.extras.runtime;
/*Generated by MPS */
import jetbrains.mps.lang.editor.menus.MenuPart;
import jetbrains.mps.openapi.editor.menus.transformation.TransformationMenuItem;
import jetbrains.mps.openapi.editor.menus.transformation.TransformationMenuContext;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Collection;
import jetbrains.mps.openapi.intentions.IntentionExecutable;
import jetbrains.mps.intentions.IntentionsManager;
import java.util.ArrayList;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.openapi.editor.menus.transformation.ActionItemBase;
public abstract class AbstractIntentionMenuPart implements MenuPart<TransformationMenuItem, TransformationMenuContext> {
private final String myIntentionId;
public AbstractIntentionMenuPart(String intentionId) {
myIntentionId = intentionId;
}
@NotNull
public List<TransformationMenuItem> createItems(TransformationMenuContext context) {
Collection<IntentionExecutable> executables = IntentionsManager.getInstance().getIntentionsById(context.getNode(), context.getEditorContext(), myIntentionId);
List<TransformationMenuItem> result = new ArrayList<TransformationMenuItem>();
for (IntentionExecutable executable : executables) {
TransformationMenuItem item = createItem(context, executable);
if (item != null) {
result.add(item);
}
}
return result;
}
@Nullable
protected abstract TransformationMenuItem createItem(@NotNull TransformationMenuContext context, @NotNull IntentionExecutable executable);
protected static class ItemBase extends ActionItemBase {
protected final TransformationMenuContext _context;
protected final IntentionExecutable myExecutable;
protected ItemBase(TransformationMenuContext context, IntentionExecutable executable) {
_context = context;
myExecutable = executable;
}
@Nullable
@Override
public String getLabelText(@NotNull String pattern) {
return myExecutable.getDescription(_context.getNode(), _context.getEditorContext());
}
@Override
public void execute(@NotNull String pattern) {
myExecutable.execute(_context.getNode(), _context.getEditorContext());
}
}
}