package jetbrains.mps.ide.devkit.actions;
/*Generated by MPS */
import jetbrains.mps.nodeEditor.IntentionActionsProvider;
import org.jetbrains.annotations.NotNull;
import com.intellij.openapi.actionSystem.AnAction;
import jetbrains.mps.openapi.intentions.IntentionExecutable;
import javax.swing.Icon;
import jetbrains.mps.intentions.icons.IntentionIconProvider;
import jetbrains.mps.workbench.action.BaseAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import jetbrains.mps.project.Project;
import jetbrains.mps.ide.actions.MPSCommonDataKeys;
import org.jetbrains.mps.openapi.model.SNodeReference;
import org.jetbrains.mps.openapi.model.SNode;
import com.intellij.openapi.ui.Messages;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.openapi.navigation.NavigationSupport;
import jetbrains.mps.intentions.IntentionsManager;
public class IntentionActionsProviderImpl implements IntentionActionsProvider {
@NotNull
public AnAction[] getIntentionActions(@NotNull final IntentionExecutable intention) {
Icon icon = new IntentionIconProvider(intention.getDescriptor().getKind()).getIcon();
AnAction[] actions = {new BaseAction("Go to Intention Declaration", "Go to declaration of this intention", icon) {
@Override
protected void doExecute(AnActionEvent e, Map<String, Object> params) {
final Project mpsProject = e.getData(MPSCommonDataKeys.MPS_PROJECT);
mpsProject.getModelAccess().runWriteInEDT(new Runnable() {
public void run() {
SNodeReference nodeRef = intention.getDescriptor().getIntentionNodeReference();
SNode intentionNode = (nodeRef == null ? null : nodeRef.resolve(mpsProject.getRepository()));
if (intentionNode == null) {
Messages.showErrorDialog(ProjectHelper.toIdeaProject(mpsProject), String.format("Could not find declaration for %s intention (%s)", intention.getClass().getSimpleName(), intention.getClass().getName()), "Intention Declaration");
} else {
NavigationSupport.getInstance().openNode(mpsProject, intentionNode, true, true);
NavigationSupport.getInstance().selectInTree(mpsProject, intentionNode, false);
}
}
});
}
}, new BaseAction("Disable This Intention", "Disables this intention type", icon) {
@Override
protected void doExecute(AnActionEvent e, Map<String, Object> params) {
IntentionsManager.getInstance().disableIntention(intention.getDescriptor().getPersistentStateKey());
}
}};
return actions;
}
}