This commit is contained in:
Alexey Kudravtsev
2012-12-17 14:05:11 +04:00
parent d250d13faf
commit ee15a2c593
4 changed files with 45 additions and 26 deletions
@@ -65,9 +65,10 @@ public class AnActionEvent implements PlaceProvider<String> {
myModifiers = modifiers;
}
public static AnActionEvent createFromInputEvent(AnAction action, InputEvent event, String place) {
DataContext context = event != null ? DataManager.getInstance().getDataContext(event.getComponent()) : DataManager.getInstance().getDataContext();
int modifiers = event != null ? event.getModifiers() : 0;
@NotNull
public static AnActionEvent createFromInputEvent(@NotNull AnAction action, InputEvent event, @NotNull String place) {
DataContext context = event == null ? DataManager.getInstance().getDataContext() : DataManager.getInstance().getDataContext(event.getComponent());
int modifiers = event == null ? 0 : event.getModifiers();
return new AnActionEvent(
event,
context,
@@ -32,7 +32,10 @@ public abstract class ReadonlyStatusHandler {
public static boolean ensureDocumentWritable(@NotNull Project project, @NotNull Document document) {
final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
boolean okWritable;
if (psiFile != null) {
if (psiFile == null) {
okWritable = document.isWritable();
}
else {
final VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile != null) {
okWritable = ensureFilesWritable(project, virtualFile);
@@ -41,9 +44,6 @@ public abstract class ReadonlyStatusHandler {
okWritable = psiFile.isWritable();
}
}
else {
okWritable = document.isWritable();
}
return okWritable;
}
@@ -60,7 +60,7 @@ public abstract class ReadonlyStatusHandler {
public abstract OperationStatus ensureFilesWritable(@NotNull VirtualFile... files);
public OperationStatus ensureFilesWritable(@NotNull Collection<VirtualFile> files) {
return ensureFilesWritable(VfsUtil.toVirtualFileArray(files));
return ensureFilesWritable(VfsUtilCore.toVirtualFileArray(files));
}
public static ReadonlyStatusHandler getInstance(Project project) {
@@ -26,10 +26,7 @@ import com.intellij.openapi.components.StoragePathMacros;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.WritingAccessProvider;
import com.intellij.openapi.vfs.*;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
@@ -59,14 +56,17 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements
myAccessProviders = WritingAccessProvider.getProvidersForProject(myProject);
}
@Override
public State getState() {
return myState;
}
@Override
public void loadState(State state) {
myState = state;
}
@Override
public OperationStatus ensureFilesWritable(@NotNull VirtualFile... files) {
if (files.length == 0) {
return new OperationStatusImpl(VirtualFile.EMPTY_ARRAY);
@@ -80,7 +80,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements
realFiles.add(file);
}
}
files = VfsUtil.toVirtualFileArray(realFiles);
files = VfsUtilCore.toVirtualFileArray(realFiles);
for (final WritingAccessProvider accessProvider : myAccessProviders) {
Collection<VirtualFile> denied = ContainerUtil.filter(files, new Condition<VirtualFile>() {
@@ -94,7 +94,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements
denied = accessProvider.requestWriting(files);
}
if (!denied.isEmpty()) {
return new OperationStatusImpl(VfsUtil.toVirtualFileArray(denied));
return new OperationStatusImpl(VfsUtilCore.toVirtualFileArray(denied));
}
}
@@ -131,7 +131,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements
}
}
return new OperationStatusImpl(VfsUtil.toVirtualFileArray(readOnlyFiles));
return new OperationStatusImpl(VfsUtilCore.toVirtualFileArray(readOnlyFiles));
}
private FileInfo[] createFileInfos(VirtualFile[] files) {
@@ -170,15 +170,18 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements
myReadonlyFiles = readonlyFiles;
}
@Override
@NotNull
public VirtualFile[] getReadonlyFiles() {
return myReadonlyFiles;
}
@Override
public boolean hasReadonlyFiles() {
return myReadonlyFiles.length > 0;
}
@Override
@NotNull
public String getReadonlyFilesMessage() {
if (hasReadonlyFiles()) {
@@ -199,9 +199,16 @@ public class PopupFactoryImpl extends JBPopupFactory {
private final Runnable myDisposeCallback;
private final Component myComponent;
public ActionGroupPopup(final String title, @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext,
boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions, boolean honorActionMnemonics,
final Runnable disposeCallback, final int maxRowCount, final Condition<AnAction> preselectActionCondition,
public ActionGroupPopup(final String title,
@NotNull ActionGroup actionGroup,
@NotNull DataContext dataContext,
boolean showNumbers,
boolean useAlphaAsNumbers,
boolean showDisabledActions,
boolean honorActionMnemonics,
final Runnable disposeCallback,
final int maxRowCount,
final Condition<AnAction> preselectActionCondition,
@Nullable final String actionPlace) {
super(createStep(title, actionGroup, dataContext, showNumbers, useAlphaAsNumbers, showDisabledActions, honorActionMnemonics,
preselectActionCondition, actionPlace),
@@ -226,10 +233,15 @@ public class PopupFactoryImpl extends JBPopupFactory {
});
}
private static ListPopupStep createStep(String title, @NotNull ActionGroup actionGroup, @NotNull DataContext dataContext,
boolean showNumbers, boolean useAlphaAsNumbers, boolean showDisabledActions,
private static ListPopupStep createStep(String title,
@NotNull ActionGroup actionGroup,
@NotNull DataContext dataContext,
boolean showNumbers,
boolean useAlphaAsNumbers,
boolean showDisabledActions,
boolean honorActionMnemonics,
Condition<AnAction> preselectActionCondition, @Nullable String actionPlace) {
Condition<AnAction> preselectActionCondition,
@Nullable String actionPlace) {
final Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
final ActionStepBuilder builder =
@@ -831,8 +843,7 @@ public class PopupFactoryImpl extends JBPopupFactory {
}
private void calcMaxIconSize(final ActionGroup actionGroup) {
AnAction[] actions = actionGroup.getChildren(new AnActionEvent(null, myDataContext, myActionPlace,
getPresentation(actionGroup), ActionManager.getInstance(), 0));
AnAction[] actions = actionGroup.getChildren(createActionEvent(actionGroup));
for (AnAction action : actions) {
if (action == null) continue;
if (action instanceof ActionGroup) {
@@ -857,9 +868,13 @@ public class PopupFactoryImpl extends JBPopupFactory {
}
}
@NotNull
private AnActionEvent createActionEvent(@NotNull AnAction actionGroup) {
return new AnActionEvent(null, myDataContext, myActionPlace, getPresentation(actionGroup), ActionManager.getInstance(), 0);
}
private void appendActionsFromGroup(@NotNull ActionGroup actionGroup) {
AnAction[] actions = actionGroup.getChildren(new AnActionEvent(null, myDataContext, myActionPlace,
getPresentation(actionGroup), ActionManager.getInstance(), 0));
AnAction[] actions = actionGroup.getChildren(createActionEvent(actionGroup));
for (AnAction action : actions) {
if (action == null) {
LOG.error("null action in group " + actionGroup);
@@ -888,7 +903,7 @@ public class PopupFactoryImpl extends JBPopupFactory {
private void appendAction(@NotNull AnAction action) {
Presentation presentation = getPresentation(action);
AnActionEvent event = new AnActionEvent(null, myDataContext, myActionPlace, presentation, ActionManager.getInstance(), 0);
AnActionEvent event = createActionEvent(action);
ActionUtil.performDumbAwareUpdate(action, event, true);
if ((myShowDisabled || presentation.isEnabled()) && presentation.isVisible()) {