package jetbrains.mps.lang.editor.menus.extras.runtime;
/*Generated by MPS */
import jetbrains.mps.openapi.editor.menus.transformation.ActionItemBase;
import jetbrains.mps.openapi.editor.menus.transformation.TransformationMenuContext;
import jetbrains.mps.refactoring.framework.IRefactoring;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.ide.actions.MPSCommonDataKeys;
import com.intellij.ide.DataManager;
import java.awt.Component;
import jetbrains.mps.refactoring.framework.RefactoringContext;
import java.util.Collections;
import jetbrains.mps.refactoring.runtime.access.RefactoringAccess;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.refactoring.framework.IRefactoringTarget;
import jetbrains.mps.refactoring.framework.RefactoringUtil;
public class RefactoringMenuItemBase extends ActionItemBase {
protected final TransformationMenuContext _context;
protected final IRefactoring myRefactoring;
public RefactoringMenuItemBase(TransformationMenuContext context, IRefactoring refactoring) {
_context = context;
myRefactoring = refactoring;
}
@Nullable
@Override
public String getLabelText(@NotNull String pattern) {
return myRefactoring.getUserFriendlyName();
}
@Override
public boolean canExecute(@NotNull String pattern) {
return isRefactoringApplicableToNode(myRefactoring, _context.getNode());
}
@Override
public void execute(@NotNull String pattern) {
MPSProject project = MPSCommonDataKeys.MPS_PROJECT.getData(DataManager.getInstance().getDataContext((Component) _context.getEditorContext().getEditorComponent()));
RefactoringContext refactoringContext = RefactoringContext.createRefactoringContext(myRefactoring, Collections.emptyList(), Collections.emptyList(), _context.getNode(), project);
RefactoringAccess.getInstance().getRefactoringFacade().execute(refactoringContext);
}
private static boolean isRefactoringApplicableToNode(IRefactoring refactoring, SNode node) {
IRefactoringTarget refactoringTarget = refactoring.getRefactoringTarget();
if (refactoringTarget.getTarget() != IRefactoringTarget.TargetType.NODE) {
return false;
}
Object targetEntity = (refactoringTarget.allowMultipleTargets() ? Collections.singletonList(node) : node);
return RefactoringUtil.isApplicable(refactoring, targetEntity);
}
}