diff options
Diffstat (limited to 'platform/platform-api/src/com/intellij/openapi/editor/actionSystem')
2 files changed, 59 insertions, 3 deletions
diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/DialogAwareDataContext.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/DialogAwareDataContext.java new file mode 100644 index 000000000000..c49645254ebd --- /dev/null +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/DialogAwareDataContext.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.editor.actionSystem; + +import com.intellij.ide.DataManager; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.DataKey; +import com.intellij.openapi.editor.Editor; +import org.jetbrains.annotations.NonNls; + +import java.util.HashMap; +import java.util.Map; + +import static com.intellij.openapi.actionSystem.CommonDataKeys.*; +import static com.intellij.openapi.actionSystem.PlatformDataKeys.PROJECT_FILE_DIRECTORY; + +/** +* @author Konstantin Bulenkov +*/ +final class DialogAwareDataContext implements DataContext { + private static final DataKey[] keys = {PROJECT, PROJECT_FILE_DIRECTORY, EDITOR, VIRTUAL_FILE, PSI_FILE}; + private final Map<String, Object> values = new HashMap<String, Object>(); + + DialogAwareDataContext(DataContext context) { + for (DataKey key : keys) { + values.put(key.getName(), key.getData(context)); + } + } + + @Override + public Object getData(@NonNls String dataId) { + if (values.keySet().contains(dataId)) { + return values.get(dataId); + } + final Editor editor = (Editor)values.get(EDITOR.getName()); + if (editor != null) { + return DataManager.getInstance().getDataContext(editor.getContentComponent()).getData(dataId); + } + return null; + } +} diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java index 217ff70c3fb5..945c52022984 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorAction.java @@ -26,6 +26,8 @@ import org.jetbrains.annotations.Nullable; import java.awt.event.KeyEvent; +import static com.intellij.openapi.actionSystem.CommonDataKeys.PROJECT; + public abstract class EditorAction extends AnAction implements DumbAware { private EditorActionHandler myHandler; private boolean myHandlersLoaded; @@ -126,14 +128,14 @@ public abstract class EditorAction extends AnAction implements DumbAware { } private static DataContext getProjectAwareDataContext(final Editor editor, @NotNull final DataContext original) { - if (CommonDataKeys.PROJECT.getData(original) == editor.getProject()) { - return original; + if (PROJECT.getData(original) == editor.getProject()) { + return new DialogAwareDataContext(original); } return new DataContext() { @Override public Object getData(String dataId) { - if (CommonDataKeys.PROJECT.is(dataId)) { + if (PROJECT.is(dataId)) { return editor.getProject(); } return original.getData(dataId); |